2012-12-14 24 views
0

我試圖從Accelerate Mac OS X框架獲取cblas_dgemm函數在許多迭代中的平均MFLOPS/S速率。這是我使用的代碼(它通過函數指針AFP調用cblas_dgemm):不穩定的分析時機

double benchmark_cblas_matmul(dgemm_fp afp, 
    const CBLAS_ORDER Order, 
    const CBLAS_TRANSPOSE TransA, 
    const CBLAS_TRANSPOSE TransB, 
    const int M, 
    const int N, 
    const int K, 
    const double alpha, 
    const double *A, 
    const int lda, 
    const double *B, 
    const int ldb, 
    const double beta, 
    double *C, 
    const int ldc) 
{ 
    double mflops_s,seconds = -1.0; 
    for(int n_iterations = 1; seconds < 0.1; n_iterations *= 2) 
    { 
     seconds = read_timer(); 
     for(int i = 0; i < n_iterations; ++i) 
     { 
      (*afp)(Order,TransA,TransB,M,N,K,alpha,A,lda,B,ldb,beta,C,ldc); 
     } 
     seconds = read_timer() - seconds; 
     mflops_s = (2e-6*n_iterations*N*N*N)/seconds; 
    } 
    return mflops_s; 
} 

計時器例程是:

double read_timer() 
{ 
    static bool initialized = false; 
    static struct timeval start; 
    struct timeval end; 
    if(!initialized) 
    { 
     gettimeofday(&start, NULL); 
     initialized = true; 
    } 

    gettimeofday(&end, NULL); 

    return (end.tv_sec - start.tv_sec) + 1.0e-6 * (end.tv_usec - start.tv_usec); 
} 

該代碼典型地運行兩個1000×1000矩陣的乘法。我的問題是這個代碼的連續時間是非常不可靠的;即使外環中的時間限制增加到5秒,最終速率也會在20000到30000 mflops/s之間變化。我使用OS X 10.8.2搭配2011款Macbook Pro,搭配四核i5,超頻時關閉this kernel extension,除了終端外,沒有任何應用程序正在運行。有沒有人有任何建議如何獲得更穩定的時間?

+0

什麼是'read_timer()'?你確定它可靠嗎?你有沒有嘗試與掛鐘時間比較? –

+0

對不起,在編輯中添加。 gettimeofday()比我測試的ctime和OpenMP掛鐘更準確 –

回答

2

有一些混亂,你沒有控制。

正在討論的處理器具有turbo模式,只要不受熱限制,該模式就可以使其運行速度超過標稱時鐘頻率。然而,運行一個持續的GEMM基準測試可以保證核心處於接近峯值的算術吞吐量,這將最終導致核心達到其熱包絡極限,並且時鐘將被降低到標稱速率,然後降低到更低的頻率。

假設您在測量的表現中看到下降趨勢,這可能是負責任的。

+0

這很有道理。有沒有在i5上獲得良好基準的公認慣例? –

+0

這實際上取決於你要測量的東西。你是基準的標杆嗎?然後,您可以選擇使用最大或穩態性能。你是否試圖確定一些具體的實際計算利息將如何執行?然後你應該嘗試儘可能真實地匹配計算的條件(可能包括*不*禁用超線程,並讓其他任務運行,例如) –

0

Stephen Canon的回答可能是正確的。因此,延長測試時間直到您達到穩定的答案可能是一個好主意。此外,Accelerate documentation還有一些代碼用於測試Mflops,它比你的代碼執行得多,所以也許你可以在運行測試之前找到一些關於CPU調整的線索。

+0

這個示例代碼真的很古老,所有PPC-具體花絮;我不會用它作爲正確時機的例子。提問者的時間選擇方法似乎基本健全。 –