我正在Power8上试验PAPI和硬件计数器。 我认为PM_FLOP计算(由PAPI_flop使用)确实是一个问题。 PM_FLOP是以下计数器的总和:PM_VSU {i} _ {j} FLOP其中i为(1,2)(每个内核2 VSU)”,j为(1,2,4,8)。这2个数字匹配但是,如果我们分析PAPI测试(矩阵乘法)的matrix-hl.c测试,我们可以得到一个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和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都不是翻牌数,而是完成的助记符数。 因此,PM_VSU {i} _ {j} FLOP应该因以下因素而正确:M_VSU {i} _1FLOP为x1,M_VSU {i} _2FLOP为x2,M_VSU {i} _4FLOP为x4,M_VSU {i} _8FLOP为x8。

实际上,原始测试之所以有效是因为默认情况下,我们使用-O0进行编译,因此生成的ASM仅具有串行操作,由M_VSU {i} _1FLOP衡量,其中1个标量助记符表示一阶错误。 我对dgemm和基本向量加法以及FMA做了一些测试,这证实了我的正确性。

IBM-Power大师有什么建议吗?

最好,

++吨

#1楼 票数: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。

  ask by Timocafé translate from so

未解决问题?本站智能推荐:

2回复

Power8上的OpenMPSIMD

我想知道在Power8上是否有任何编译器( gcc , xlc等)支持Power8上的OpenMP SIMD结构? 我试过XL(13.1),但我无法成功编译。 可能它还不支持simd构造。 我可以用gcc 4.9.1(这些标志编译-fopenmp -fopenmp-simd和-O1 )。
1回复

Power8上的PM_DATA_ALL*和PM_DATA*事件之间有什么区别?

在使用能量8处理器的内存性能评估perf我结束了与事件之间的理解差异的问题PM_DATA_ALL_*和PM_DATA_* 。 大多数计数器都存在于两个版本中,但是oprofile文档和papi_native_avail中的描述是相同的,例如: PM_DATA_FROM_LMEM 由
1回复

通过getauxval检测Power8内核加密?

我在GCC112上,这是一台运行Linux的小端Power8机器。 Power8具有内核加密功能,可提供AES,SHA和其他一些有用的功能。 我正在尝试使用getauxval在运行时确定功能的可用性。 用例是为“最小”功能的机器构建的发行版,我们需要在运行时交换更快的功能。 hwcap
2回复

如何在Power8或PPC64机器上安装pytorch?

我试图安装使用功率8 IBM机器上畅达pytorch。 虽然,我阅读了IBM 博客上的文章,但我无法成功安装,因为我一直在编译magma 。
1回复

Power8上的SLES12缺少libuuid1-devel软件包

我试图在Power8服务器(ppc64le)的SLES 12上构建我的应用程序。 我的应用程序使用libuuid生成唯一标识符,并且由于缺少libuuid库和包含文件,因此构建失败。 我搜索了libuuid的devel软件包,但在SLES12安装DVD,SUSE 网站或其他rpm搜索站点上
1回复

Power8可以使用原子操作与通过PCIExpress连接的ASIC/FPGA通信吗?

众所周知,Power8支持Coherent Accelerator处理器接口(CAPI): https ://www.nextplatform.com/2015/06/22/the-secret-of-power8-capi-is-addressing/ 硬件托管的缓存一致性 使
3回复

用于power-pc的c++编码

有谁知道power-pc的任何cpp编译器? 最好是适用于操作系统9的东西。我有一个旧的imac g3我想制作程序。 如果cpp不存在,我应该用它来编程呢? 如果您能找到一款适用于power-pc的java开发套件,那么奖励积分就太棒了! 提前谢谢大家:D
1回复

Power7架构上的混合装配标量/矢量

从2年开始,我正在开发一个库: cyme,用于对“友好容器”进行SIMD计算。 我能够达到处理器的最大性能。 通常是用户定义的容器,并使用以下语法编写内核(简单示例): R [i] + R [i] + ...使用SIMD寄存器执行操作。 我可以精确控制asm的生成(使用模板表达式)。