2009-07-15 64 views
13

我正在寻找一个可以在各种机器上编译和运行的快速基准测试程序。与其使用商业/开源可用的选项,我宁愿让自己的代码使用线程和算法优化技术。C中有几个耗时的操作是什么?

我已经使用了一对夫妇,其中包括递归计算Fibonacci序列的第n个数字,以及播种/ rand()数千次。

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

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

+0

那么你想要基准?整数性能?浮点? RAM访问速度?各种缓存级别的大小和速度?我唯一能看到的是你对I/O不感兴趣(这可能主宰大多数人的工作)。 – starblue 2009-07-18 13:45:23

+0

以上所有内容。 :) – 2009-07-30 12:53:37

回答

8

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

0

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

2

你可以计算大素数或因式分解整数。

0

这做了很多另外的:

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

std::cout << c; 
+5

其实,它没有。任何体面编译器都会看到你对n或m没有做任何事情,因此会优化它。 – 2009-07-15 19:15:14

+1

增加数字是电脑最擅长的事情之一。任意宽度浮点乘法将更加密集! – 2009-07-15 19:16:51

+0

@肯白 - 已经做了调整。 – 2009-07-15 19:19:58

2

看一看的NAS Parallel Benchmarks。这些文件最初由Fortran的NASA为使用MPI的超级计算机编写(现在仍然可用),但现在也有C,Java和OpenMP实现。

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

3

我知道你说你想使你自己的,但也许你可以在现有的基准汲取灵感。 The Computer language benchmark game已经通过一系列基准测试运行了许多编程语言。也许你可以看看他们的基准的一些想法。

我的头顶部的一些快速的想法:

  • 矩阵乘法:mulitplying 2个 大型矩阵相对 计算密集型的,虽然你 将不得不采取缓存考虑

  • 生成素数

  • 整数因子分解

  • 数值方法求解微分方程 - Runge-kutta例如

1

尝试计算数千或数百个数字pi。该任务有相当多的formulas

0

如果你想尝试并行性,做大量的矩阵数学。您可以使用的矩阵大小将受到内存的限制,但是您可以根据需要进行多次迭代。

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

1

你在project euler中有一些非常好的,这些都是数学相关的,并且如果你想使用更高的值,可能会很费时间。

0

你可以尝试一个tsort(涡轮排序)与一个非常大的输入集。我明白这是一个常见的操作。

0

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