C中几个耗时的操作是什么?

时间:2009-07-15 18:54:02

标签: c algorithm math cpu benchmarking

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

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

是否有其他算法相对简单,但同时计算量大(可能与数学相关)?

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

14 个答案:

答案 0 :(得分:8)

Ackermann function通常是一个有趣的,但如果你希望它在你的一生中完成,不要给它非常大的输入。

答案 1 :(得分:3)

<强>分形

(各种决议)Some fractal source in C (without opengl)

答案 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)

尝试计算数千或数百万pi位数。该任务有很多formulas

答案 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问题之一编写“解决方案”:)。

相关问题