Power8上的硬件事件

时间:2015-03-31 12:54:22

标签: performancecounter powerpc

我正在试验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测试(矩阵乘法),这2个数字匹配,我们可以有pb。

在测试结束时有错误捕捉器:

 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编译测试并且我得到了双重

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不是翻牌的数量,而是完成的助记符数量。因此,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大师的任何提议?

最佳,

++吨

1 个答案:

答案 0 :(得分: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个FLOP。