2013-11-15 19 views
6

現在、ハードウェア温度テストを行っていますが、最大パフォーマンスをどのように行うのだろうかと思っていました。最大CPU使用率を強制する方法

もちろん、無限ループのスレッドをn個起動することもできますが、これを解決するにはより良い方法があると思います。

あなたのマニフェストでも
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 
     } 
    } 

<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 

しかし、それはまだAnTuTu安定ほど効果的ではありません。

temp curve

+0

スレッドの数を有限数に制限する必要があります。そうしないと、アプリはすべてのメモリを使い果たし、クラッシュします。 –

+0

ちょうどそれを見て、私の質問を編集する – bluewhile

答えて

1

すべてのコアを使い果たすこのマルチコアテストを試すことができます。そしてあなたが望むようにオーバーロードすることができます。

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 + ")"); 
     } 
    } 
} 
関連する問題