我正在寻找一个可以在各种机器上编译和运行的快速基准程序。与其使用商业/开源可用选项,我宁愿自己使用线程和算法优化技术。
我已经使用了一对,包括递归计算斐波那契序列的第n个数,以及播种/兰德()数千次。
是否有其他算法相对简单,但同时计算量大(可能与数学相关)?
(请注意,这些操作将以C语言实现。)
答案 0 :(得分:8)
Ackermann function通常是一个有趣的,但如果你希望它在你的一生中完成,不要给它非常大的输入。
答案 1 :(得分:3)
<强>分形强>
答案 2 :(得分:3)
我知道你说你想做自己的,但也许你可以利用现有的基准来获得灵感。 The Computer language benchmark game通过一组基准测试运行了许多编程语言。也许你可以从他们的基准测试中得到一些想法。
我头脑中的一些快速想法:
矩阵乘法:mulitplying 2 大矩阵是相对的 计算密集,虽然你 将不得不考虑缓存
生成素数
整数分解
解决ODEs的数值方法 - 例如Runge-kutta
答案 3 :(得分:2)
反转大矩阵。
答案 4 :(得分:2)
你可以计算大素数或分解整数。
答案 5 :(得分:2)
看看NAS Parallel Benchmarks。这些最初是由NASA在Fortran中为使用MPI的超级计算机编写的(并且仍以这种方式提供),但现在也有可用的C,Java和OpenMP实现。
其中大部分都是非常计算密集型,因为它们旨在代表科学计算中使用的数值算法。
答案 6 :(得分:1)
答案 7 :(得分:1)
你在project euler中有一些非常好的,这些都是数学相关的,并且可能因为你想要使用更高的值而耗费时间。
答案 8 :(得分:0)
查找素数被认为非常耗时。
答案 9 :(得分:0)
这做了很多补充:
int c = 0;
for (int n = 0; n < INT_MAX; n++)
for (int m = 0; m < INT_MAX; m++)
c++;
std::cout << c;
答案 10 :(得分:0)
查看语言枪战的基准:http://shootout.alioth.debian.org/
然而:基准测试只是基准,并不一定能告诉你很多关于现实世界的信息,相反,它可能会产生误导。
答案 11 :(得分:0)
如果你想尝试并行性,可以进行大量的矩阵数学运算。您可以使用的矩阵大小将受到内存的限制,但您可以根据需要进行多次迭代。
这将强调现代CPU附带的SIMD指令。
答案 12 :(得分:0)
您可以尝试使用非常大的输入集的tsort(Turbo Sort)。我理解这是一个常见的操作。
答案 13 :(得分:0)
NP-Complete问题的启发式方法是获取一些CPU密集型代码的有趣方式。您可以为Karps NP-Complete问题之一编写“解决方案”:)。