2015-03-31 56 views
0

我正在試驗Power8上的PAPI和硬件計數器。我認爲PM_FLOP計算(由PAPI_flop使用)是一個問題。 PM_FLOP是以下計數器的總和:PM_VSU {i} _ {j} FLOP其中i是(1,2)(2個VSU每個核心)「,j是(1,2,4,8)。這兩個數字匹配。但如果我們分析PAPI測試(矩陣乘法)的矩陣hl.c測試中,我們可以有一個PBPower8上的硬件事件

在試驗結束時有錯誤捕手:

if (event[0] == PAPI_FP_INS) { 
      /*  Compare measured FLOPS to expected value */ 
      tmp = 
        2 * (long long) (NROWS1) * (long long) (NCOLS2) * 
        (long long) (NCOLS1); 
    printf("%llu \n",tmp); 
      if (abs((int) values[0] - (int) tmp) > (float) tmp * 0.05) { 
        /*  Maybe we are counting FMAs? */ 
        tmp = tmp/2; 
        if (abs((int) values[0] - (int) tmp) > 
          (float) tmp * 0.05) { 
          printf("\n" TAB1, "Expected operation count: ", 2 * tmp); 
          printf(TAB1, "Or possibly (using FMA): ", tmp); 
          printf(TAB1, "Instead I got:   ", values[0]); 
          test_fail(__FILE__, __LINE__, 
               "Unexpected FLOP count (check vector operations)", 
               1); 
        } 
      } 
    } 

沒有但錯誤如果我刪除第一個分支,並與-O3編譯測試float和double我得到

Expected operation count:  11812500 
Or possibly (using FMA):  5906250 
Instead I got:     3003761 
matrix-hl.c - DOUBLE        FAILED 

Expected operation count:  11812500 
Or possibly (using FMA):  5906250 
Instead I got:     1552507 
matrix-hl.c - FLOAT        FAILED 

目前我認爲的計算PM_FLOP是錯誤的。對我來說,每個PM_VSU {i} _ {j} FLOP不是翻牌的數量,而是完成的助記符的數量。因此,對於M_VSU {i} _1FLOP,PM_VSU {i} _ {j} FLOP應該通過以下因子來正確:x1對於M_VSU {i} _1FLOP,x2對於M_VSU {i} _2FLOP,x4對於M_VSU {i} _4FLOP和x8對於M_VSU {i} _8FLOP。

事實上,原始測試的工作原理是因爲默認情況下我們使用-O0進行編譯,因此生成的ASM只有串行操作,由M_VSU {i} _1FLOP測量,其中1個標量助記符是一個翻牌。我在dgemm和基本矢量添加和FMA上做了一些測試,這證實了我的修正。

IBM-Power guru的任何命題?

最佳,

++牛逼

+0

從我幾乎不記得你是對的,硬件計數器應該計算浮點指令的數量(FLIPs與FLOPs),它們是ADDs,MULs或FMAs,在這種情況下我不會考慮它是一個錯誤,只是直接評估實際GFlops沒有用處。但是當我遇到他們時,我正在研究Power3/4/5。 IBM有可能在更新的處理器中引入了FP操作計數器,所以這實際上是一個錯誤。 – Sigismondo 2015-03-31 13:36:43

+0

謝謝你的快速回答,我真的需要這個失敗的表現模型。我將嘗試將信息轉發給IBM – 2015-03-31 16:53:20

回答

2

是的,我想你是對的。

看(從ophelp)的文檔:

PM_VSU1_8FLOP: (counter: 0, 1, 2, 3) 
    eight flops operation (DP vector versions of fdiv,fsqrt and SP vector versions of 
    fmadd,fnmadd,fmsub,fnmsub) (min count: 10000) 

這是不是很清楚,但意味着對這一事件的1計數裝置8個FLOPS被處決。