14

我正在寻找一个可以在各种机器上编译和运行的快速基准程序。我宁愿自己使用线程和算法优化技术,而不是使用商业/开源可用的选项。

我已经使用了一对,其中包括递归计算斐波那契数列的第 n 个数,以及播种/rand() 几千次。

是否有任何其他算法相对简单,但同时计算密集(并且可能与数学相关)?

(请注意,这些操作将在 C 语言中实现。)

4

14 回答 14

9

Ackermann 函数通常很有趣,但如果您希望它在您的一生中完成,请不要给它很大的输入。

于 2009-07-15T18:57:38.880 回答
3

分形

(以各种分辨率)C中的一些分形源(没有opengl)

于 2009-07-15T19:00:25.367 回答
3

我知道你说过你想自己做,但也许你可以利用现有的基准来获得灵感。计算机语言基准测试游戏通过一组基准测试运行了许多编程语言。也许你可以从他们的基准中得到一些想法。

我脑海中的一些快速想法:

  • 矩阵乘法:乘以 2 个大矩阵的计算量相对较高,但您必须考虑缓存

  • 生成素数

  • 整数分解

  • 求解 ODE 的数值方法 - 例如Runge-kutta

于 2009-07-15T19:02:06.563 回答
2

反转大矩阵。

于 2009-07-15T18:57:46.727 回答
2

您可以计算大素数或分解整数。

于 2009-07-15T18:59:28.423 回答
2

看看NAS 并行基准。这些最初是由NASA在 Fortran 中为使用 MPI 的超级计算机编写的(并且仍然可以通过这种方式获得),但现在也有 C、Java 和 OpenMP 实现可用。

其中大多数都是计算密集型的,因为它们旨在代表科学计算中使用的数值算法。

于 2009-07-15T19:00:07.487 回答
1

尝试计算数千或数百万个pi数字。该任务有很多公式

于 2009-07-15T19:03:05.623 回答
1

你在项目 euler中有一些非常好的,这些都是与数学相关的,如果你想使用更高的值,可能会很耗时。

于 2009-07-15T19:18:58.527 回答
0

寻找素数被认为是相当耗时的。

于 2009-07-15T18:59:09.517 回答
0

这做了很多补充:

int c = 0; 
for (int n = 0; n < INT_MAX; n++)
    for (int m = 0; m < INT_MAX; m++)
        c++;

std::cout << c;
于 2009-07-15T18:59:57.817 回答
0

从语言大战中查看基准:http: //shootout.alioth.debian.org/

然而:基准只是基准,不一定能告诉你很多关于现实世界的信息,相反,可能会产生误导。

于 2009-07-15T19:02:30.277 回答
0

如果您想尝试并行性,请进行大量矩阵数学运算。您可以使用的矩阵大小将受内存限制,但您可以根据需要进行尽可能多的迭代。

这将强调现代 CPU 附带的 SIMD 指令。

于 2009-07-15T19:10:24.690 回答
0

您可以尝试使用非常大的输入集的 tsort(Turbo 排序)。我理解这是一种常见的操作。

于 2009-07-15T19:32:08.093 回答
0

NP 完全问题的启发式方法是获取一些 CPU 密集型代码的有趣方式。您可以为Karps NP-Complete 问题之一编写“解决方案”:) 。

于 2009-07-15T21:16:36.387 回答