【问题标题】:How can i stress my phone's CPU programatically?如何以编程方式对手机的 CPU 施加压力?
【发布时间】:2011-11-15 20:11:54
【问题描述】:

所以我将我的手机超频到 1.664ghz,我知道有一些应用程序可以测试你手机的 CPU 性能和stressers,但我想以某种方式自己制作。真正让你的 CPU 工作的最好方法是什么?我在想只做一个 for 循环做 100 万次迭代来做一些耗时的数学......但这没有用,因为我的手机在几毫秒内完成了我想......我尝试了数万亿次迭代......应用程序冻结但我的任务管理器甚至没有显示应用程序正在使用的 CPU。通常压力测试应用程序显示为红色并说 cpu:85% ram: 10mb ...那么我怎样才能真正让我的处理器认真思考呢?

【问题讨论】:

  • 确保编译器没有完全优化你的循环。例如,如果你从不使用计算结果,编译器几乎肯定会完全删除它。
  • 听起来你杀死了(无限期地阻塞)“UI线程”。制作一个后台(或多个后台)线程并在其中放置一些“工作循环”——我怀疑观察到的结果会有所不同,但不知道这是否会成功地给 CPU 带来压力。 (我不做 Android 开发。)
  • 如何运行多个线程以及如何使用我的结果但不向用户显示?只做几次 thread.start() ?抱歉,我擅长 Java,但我一生中从未处理过线程,哈哈。
  • 启动编译数百万个正则表达式字符串的后台线程。从个人经验来看,这对 CPU 来说非常困难。
  • @davids0n 你能解释或显示编译“正则表达式”字符串的代码吗?可能在多个线程上?

标签: android cpu processor stress-testing root


【解决方案1】:

编译正则表达式字符串:

Pattern p1 = Pattern.compile("a*b"); // a simple regex
// slightly more complex regex: an attempt at validating email addresses
Pattern p2 = Pattern.compile("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)\b");

您需要在后台线程中启动这些:

class RegexThread extends Thread {
   RegexThread() {
      // Create a new, second thread
      super("Regex Thread");
      start(); // Start the thread
   } 

   // This is the entry point for the second thread.
   public void run() {
      while(true) {
        Pattern p = Pattern.compile("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)\b");
      }
   }
}

class CPUStresser {
   public static void main(String args[]) {
      static int NUM_THREADS = 10, RUNNING_TIME = 120; // run 10 threads for 120s
      for(int i = 0; i < NUM_THREADS; ++i) {
         new RegexThread(); // create a new thread
      }
      Thread.sleep(1000 * RUNNING_TIME);
   }
}

(以上代码取自here

看看情况如何。

【讨论】:

  • 非常感谢!有时间会试一试的!我猜 Pattern 是我不必上的一门课?编辑:10个线程很多吗?什么会对我的 CPU 造成相当麻烦的负担?大声笑 100 个线程?
  • Pattern 是一个内置类。 import java.util.regex.Pattern; 如果你愿意,你可以做 100 个线程,但每个线程上的 while(true) 循环会最大限度地消耗 CPU。
  • 我不太明白你在这里做了什么:“[a-z0-9!#$%&'*+/=?^_{|}~-]+(?:\.[a-z0-9!#$%&amp;'*+/=?^_{|}~-]+) *@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[AZ]{2}|com|org |net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)\b" 这是我见过的最大的乱码!大声笑
  • 非常感谢您的帮助。好人。非常感谢:)
【解决方案2】:

我会建议一个稍微不同的测试,它不是简单的数学算法和函数。有很多看起来很奇怪的测试,其结果总是包含所有评论。您启动应用程序,它会运行一段时间,然后以标准分数的形式为您提供结果。点数越多(或少),则认为该设备越好。但是,比较结果在现实生活中意味着什么,并不总是很清楚。而且不是全部。 说到数学,首先想到的就是大量的小数点数和数“pi”这个数字的任务

好的。没问题,我们会做的:

这里有一个测试号——“The Number Pi”——你的手机需要多长时间才能计算出 Pi (3.14) 的一千万位数字(如果一百年前有人说过这句话,确实会立即去精神病院)

当你觉得手机很慢时。你转/扭界面。但如何衡量它 - 目前还不清楚。 愤怒的小鸟在不同的时间在不同的设备上运行——也许可以测试“愤怒的小鸟”

我们想得更远 - 进行更多测试,“厚书”和“大页面”。

计算算法:

  1. 测试“Pi”

以 Speed Pi 为例。 使用慢速算法“Abraham Sharp Series”数一千万标记。重复测量几次,取平均值。

  1. 测试“愤怒的小鸟”

以第一个愤怒的小鸟为例(不是必需的,但这些版本不是最优化的)

测量从发射到第一声音乐响起的时间。出口。立刻跑来跑去。重复几次,取平均值。

  1. 测试“大页面”

测量繁重网站页面的加载时间。你可以用你最喜欢的浏览器做到这一点:)

您可以使用This link(对不起,西里尔字母)

此页面是通过使用“计算机浏览器”以及图片来维护的。总共有 6.5 Mb 和 99 个文件(我还在这个页面上存储了一个小声音文件的版本)

所有 99 个文件都上传到手机。关闭 Wi-Fi 和移动互联网(这很重要!)

页面使用您的浏览器打开。单击“返回”按钮。现在单击“前进”并测量页面完全加载的时间。等了几次。后退,后退。像往常一样,我们取平均值。

所有结果都以秒为单位。

在测试所有支持 microSD 卡的设备时,都是同一张卡——Transcend 16 Gb,10 类。以及上面的所有数据。

嗯,部分设备的实际测试结果TEST RESULT

【讨论】:

    【解决方案3】:

    https://play.google.com/store/apps/details?id=xcom.saplin.xOPS - 该应用程序在多个线程(2 倍内核数)上处理数字(整数和浮点数)并构建性能和 CPU 温度图表。

    https://github.com/maxim-saplin/xOPS-Console/blob/master/Saplin.xOPS/Compute.cs - 这是应用程序的核心

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多