我问自己,衡量并行程序性能(触发器)的最佳方法是什么.我读到了papi_flops.这似乎适用于串行程序.但我不知道如何衡量并行程序的整体性能.
我想测量blas/lapack函数的性能,在我的gemm下面的例子中.但我也想测量其他功能,特别是功能不知道操作次数的地方.(在gemm的情况下,ops是已知的(ops(gemm)= 2*n ^ 3),因此我可以根据操作次数和执行时间计算性能.)库(我正在使用Intel MKL)自动生成线程.所以我不能单独测量每个线程的性能然后减少它.
这是我的例子:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "mkl.h"
#include "omp.h"
#include "papi.h"
int main(int argc, char *argv[] )
{
int i, j, l, k, n, m, idx, iter;
int mat, mat_min, mat_max;
int threads;
double *A, *B, *C;
double alpha =1.0, beta=0.0;
float rtime1, rtime2, ptime1, ptime2, mflops;
long long flpops;
#pragma omp parallel
{
#pragma omp master
threads = omp_get_num_threads();
}
if(argc < 4){
printf("pass me 3 arguments!\n");
return( -1 );
} …Run Code Online (Sandbox Code Playgroud)