2013-11-15 9 views
6

Ich mache derzeit Hardware-Temperaturtests und ich frage mich, wie Sie eine maximale Leistung tun würden Aufgabe, alle 4 Kerne meines Geräts beschäftigt zu halten, um die Peaktemperatur zu messen?Wie maximale CPU-Auslastung erzwingen

Ich könnte natürlich n Threads mit Endlosschleifen starten, aber ich denke, es könnte bessere Wege geben, dies zu lösen.

while (true) { 
     try { 
      new Thread() { 
       public void run() { 
        while (true) { 
         try { 
          Runtime.getRuntime().exec("ps"); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
        } 
       } 
      }.start(); 
     } catch (Error e) { 
      // typically will be OutOfMemoryerror during Thread alloc 
     } 
    } 

Auch in Ihrem Manifest:

<application 
    android:largeHeap="true" 
... 

adb shell top:

User 99%, System 0%, IOW 0%, IRQ 0% 
User 1216 + Nice 0 + Sys 4 + Idle 0 + IOW 0 + IRQ 0 + SIRQ 0 = 1220 

PID PR CPU% S #THR  VSS  RSS PCY UID  Name 
3534 0 99% S 1292 1990880K 32784K fg u0_a56 com.myapp.cpupressure 

Aber es ist noch nicht so effektiv wie AnTuTu Stabilität:

temp curve

+0

Sie müssen die Anzahl der Threads auf eine endliche Zahl begrenzen oder Ihre App wird den gesamten Speicher verbrauchen und dann abstürzen. –

+0

Yep hat das gerade gesehen und wird meine Frage bearbeiten – bluewhile

Antwort

1

Sie können diesen Multicore-Test versuchen, der alle Kerne verbraucht. Und kann überladen, wie Sie wollen.

public class MultiCore { 
    private static final int SPIN_COUNT = 2000; 

    public static void main(String[] args) { 
     int numThreads = 4; 
     if (args.length == 1) { 
      numThreads = Integer.valueOf(args[0]); 
     } 

     System.out.println("Starting " + numThreads + " threads"); 
     long startWhen = System.nanoTime(); 

     SpinThread threads[] = new SpinThread[numThreads]; 
     for (int i = 0; i < numThreads; i++) { 
      threads[i] = new SpinThread(i); 
      threads[i].start(); 
     } 

     for (int i = 0; i < numThreads; i++) { 
      try { 
       threads[i].join(); 
      } catch (InterruptedException ie) { 
       System.err.println("join " + i + " failed: " + ie); 
      } 
     } 

     long endWhen = System.nanoTime(); 
     System.out.println("All threads finished in " + 
      ((endWhen - startWhen)/1000000) + "ms"); 
    } 

    static class SpinThread extends Thread { 
     private int mTid; 

     SpinThread(int tid) { 
      mTid = tid; 
     } 

     public void run() { 
      long startWhen = System.nanoTime(); 
      System.out.println("Thread " + mTid + " started"); 
      int tid = mTid; 
      int reps = SPIN_COUNT + tid; 
      int ret = 0; 

      for (int i = 0; i < reps; i++) { 
       for (int j = 0; j < 100000; j++) { 
        ret += i * j; 
       } 
      } 

      long endWhen = System.nanoTime(); 
      System.out.println("Thread " + mTid + " finished in " + 
       ((endWhen - startWhen)/1000000) + "ms (" + ret + ")"); 
     } 
    } 
} 
Verwandte Themen