计算Cuda的GFLOPS

时间:2013-12-25 19:42:57

标签: c cuda parallel-processing

我正在研究一个cuda项目,我正在比较矩阵乘法的各种CUDA实现的性能。重点是我正在尝试计算GPU的GFLOPS,但我无法弄清楚如何做到这一点。我到目前为止,使用cuda事件管理了执行乘法所需的时间,如下所示:

cudaEvent_t start, stop;
    cudaEventCreate(&start);
    cudaEventCreate(&stop);

    cudaEventRecord(start);
    MatrixMulKernel<<<dimGrid,dimBlock>>> (Ad, Bd, Cd, M, N, K);
    cudaEventRecord(stop);



    cudaEventSynchronize(stop);
    float milliseconds = 0;
    float seconds = 0;
    float GFLOPS=0;
    cudaEventElapsedTime(&milliseconds, start, stop);
    seconds = milliseconds *  pow((float) 10,-3);;

是否有某种方程来计算GFLOPS?! 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

如果你计算出一些低维度的例子(纸和铅笔),你可以弄清楚矩阵乘法的浮点运算数是

long NumOps = N*N*(2*N-1);

我简单地假设矩阵是N*N。练习:将其推广到矩阵A(尺寸,N1 * N2)和B(尺寸,N2 * N3)的任意数组大小。给A*B(尺寸为N1 * N3)。

请记住,在关于该主题的文献中,当对矩阵乘法进行分析时,浮点运算的数量O(N^3)通常简单地被视为NumOps = N^3。因此,如果您将结果与其他已发布的值进行比较,请记住这一点。

无论哪种方式,Gflops都可以计算为:

float gflops = (float)NumOps/time_per_multiply_inSec/1e+9;

还有一些good notes here