我正在寻找一个可以在各种机器上编译和运行的快速基准程序。我宁愿自己使用线程和算法优化技术,而不是使用商业/开源可用的选项。
我已经使用了一对,其中包括递归计算斐波那契数列的第 n 个数,以及播种/rand() 几千次。
是否有任何其他算法相对简单,但同时计算密集(并且可能与数学相关)?
(请注意,这些操作将在 C 语言中实现。)
我正在寻找一个可以在各种机器上编译和运行的快速基准程序。我宁愿自己使用线程和算法优化技术,而不是使用商业/开源可用的选项。
我已经使用了一对,其中包括递归计算斐波那契数列的第 n 个数,以及播种/rand() 几千次。
是否有任何其他算法相对简单,但同时计算密集(并且可能与数学相关)?
(请注意,这些操作将在 C 语言中实现。)
Ackermann 函数通常很有趣,但如果您希望它在您的一生中完成,请不要给它很大的输入。
分形
(以各种分辨率)C中的一些分形源(没有opengl)
我知道你说过你想自己做,但也许你可以利用现有的基准来获得灵感。计算机语言基准测试游戏通过一组基准测试运行了许多编程语言。也许你可以从他们的基准中得到一些想法。
我脑海中的一些快速想法:
矩阵乘法:乘以 2 个大矩阵的计算量相对较高,但您必须考虑缓存
生成素数
整数分解
求解 ODE 的数值方法 - 例如Runge-kutta
反转大矩阵。
您可以计算大素数或分解整数。
你在项目 euler中有一些非常好的,这些都是与数学相关的,如果你想使用更高的值,可能会很耗时。
寻找素数被认为是相当耗时的。
这做了很多补充:
int c = 0;
for (int n = 0; n < INT_MAX; n++)
for (int m = 0; m < INT_MAX; m++)
c++;
std::cout << c;
从语言大战中查看基准:http: //shootout.alioth.debian.org/
然而:基准只是基准,不一定能告诉你很多关于现实世界的信息,相反,可能会产生误导。
如果您想尝试并行性,请进行大量矩阵数学运算。您可以使用的矩阵大小将受内存限制,但您可以根据需要进行尽可能多的迭代。
这将强调现代 CPU 附带的 SIMD 指令。
您可以尝试使用非常大的输入集的 tsort(Turbo 排序)。我理解这是一种常见的操作。