CPU密集计算示例?

我需要一些易于实现的单CPU和内存密集型计算,我可以在java中为测试线程调度程序编写。

它们应该耗费一些时间,但更重要的是消耗资源。

有任何想法吗?

一些CPU密集型任务的简单示例:

  • 搜索素数(涉及大量的BigInteger部门)
  • 计算大因子,例如2000! ((涉及大量BigInteger乘法)
  • 许多Math.tan()计算(这很有趣,因为Math.tan是原生的,所以你使用两个调用堆栈:一个用于Java调用,另一个用于C调用。)

乘以两个矩阵。 矩阵应该很大并存储在磁盘上。

字符串搜索。 或者,索引一个巨大的文档(检测并计算每个单词或字符串的出现)例如,您可以索引大型软件项目的源代码中的所有标识符。

计算pi。

旋转2D矩阵或图像。

压缩一些巨大的文件。

PDP-11的CPU浸泡测试是tan(atan(tan(atan(...)))等。非常努力地工作FPU以及堆栈和寄存器。

好的,这不是Java,但这是基于此处的 Dhrystone基准算法。 算法的这些实现可能会让您了解它是如何完成的。 此处的链接包含C / C ++和Assembler的源以获取基准。

  • 计算斐波纳契数列的第n项,其中n大于70.(耗时)

  • 计算大数的阶乘。 (耗时的)

  • 在图中查找两个节点之间的所有可能路径。 (记忆消耗)

  1. 官方RSA挑战赛
  2. 非官方RSA挑战 – 获取您想要以纯文本阅读的密文。 让计算机在它。 如果你使用随机算法,那么你将获得一个很小但非零的机会。

我在Java中乱用Thread优先级并使用下面的代码。 它似乎使CPU保持足够忙,线程优先级有所不同。

 @Test public void testCreateMultipleThreadsWithDifferentPriorities() throws Exception { class MyRunnable implements Runnable { @Override public void run() { for (int i=0; i<1_000_000; i++) { double d = tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(123456789.123456789)))))))))); cbrt(d); } LOGGER.debug("I am {}, and I have finished", Thread.currentThread().getName()); } } final int NUMBER_OF_THREADS = 32; List threadList = new ArrayList(NUMBER_OF_THREADS); for (int i=1; i<=NUMBER_OF_THREADS; i++) { Thread t = new Thread(new MyRunnable()); if (i == NUMBER_OF_THREADS) { // Last thread gets MAX_PRIORITY t.setPriority(Thread.MAX_PRIORITY); t.setName("T-" + i + "-MAX_PRIORITY"); } else { // All other threads get MIN_PRIORITY t.setPriority(Thread.MIN_PRIORITY); t.setName("T-" + i); } threadList.add(t); } threadList.forEach(t->t.start()); for (Thread t : threadList) { t.join(); } }