2016-10-05 75 views
1

我想獲得真正的最大CPU核心速度。如何獲得真正的最大cpu核心速度?

此代碼的工作只是爲我的Nexus 5X的四個第一核心,但它未能在過去兩個核心:

 for (int i = 0; i < cpuCoresNumber; i++) { 
      try { 
       BufferedReader freqBufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("/sys/devices/system/cpu/cpu" + i + "/cpufreq/scaling_max_freq")))); 
       int freq = Integer.valueOf(freqBufferedReader.readLine()).intValue()/1000; 
       freqBufferedReader.close(); 
       coreMaxFreqArray[i] = freq; 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

對於第4我得到真正的價值,在過去的2,第一我得到實際值,但有時我會得到較低的值,例如600,300,0 ......並且最後兩個核心的實際值是1800mhz。

+1

一些快速谷歌搜索給了我這個:_「的SoC節流也是另一個重大課題Anandtech在其Nexus 5X中表示,「Snapdragon 808只能將兩個A57內核的峯值頻率保持兩分鐘,然後才能將頻率降至633MHz,並使A53達到峯值1.44GHz,」Anandtech在其Nexus 5X中表示,系統 性能評估。 「12分鐘後,A57完全關閉,你將剩下一組4個A53核心,頻率爲1.44GHz。」「_ – Michael

+0

是的,但我可以看到谷歌在某些谷歌播放應用程序的最高速度,正在檢查內核的最大速度,所以我確定有可能在某處檢查 – NullPointerException

+0

您是否嘗試過獲取「cat/sys/devices/system/cpu/cpu」的結果+ i +「/ cpufreq/scaling_available_frequencies「並選擇最大的數字? – Michael

回答

0

嘗試一些這個,我執行命令獲得每個核心的最大頻率。

private String exCommand(String comando) throws IOException { 
    try { 
     Process process = Runtime.getRuntime().exec(comando); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
     int read; 
     char[] buffer = new char[4096]; 
     StringBuilder output = new StringBuilder(); 
     while ((read = reader.read(buffer)) > 0) { 
      output.append(buffer, 0, read); 
     } 
     reader.close(); 
     process.waitFor(); 
     return output.toString(); 
    } catch (IOException | InterruptedException e) { 
     throw new RuntimeException(e); 
    } 
} 

而且所著我的主要方法的代碼來獲得每個內核速度

 for (int i = 0; i <= cores; i++) { 
     speed = exCommand("cat /sys/devices/system/cpu/cpu"+i+"/cpufreq/cpuinfo_max_freq"); 
     vel = Double.parseDouble(speed); 
     vel = vel /1000000; 
     System.out.println(vel); 
    } 

希望它可以幫助