2009-07-15 56 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問題之一。