【问题标题】:How to measure the gflops of a matrix multiplication kernel?如何测量矩阵乘法内核的 gflops?
【发布时间】:2011-07-29 12:26:01
【问题描述】:

Programming Massively Parallel Processors一书中,使用gflops的数量来比较不同矩阵乘法内核的效率。我如何在我自己的机器上为我自己的内核计算这个?

我在 NVIDIA 论坛的某个地方找到了这个“算法”,但我不知道它的有效性或两个时间的来源。

NumOps = 2 * pow(MatrixSize,3)
gflops = 1.0e-9 * NumOps / ExecutionTime

附言请随意更改标签...

【问题讨论】:

    标签: cuda benchmarking gpgpu


    【解决方案1】:

    您可以通过使用大量输入运行算法并测量执行时间来测量 GFLOP。然后将执行时间和矩阵大小放入该公式中。对于大到足以让整个机器保持忙碌的矩阵大小,FLOPs 仅微弱地依赖于矩阵大小。

    GPU 矩阵乘法算法执行与朴素算法相同数量的浮点运算。

    for (i = 0; i < MatrixSize; i++)
      for (j = 0; j < MatrixSize; j++)
        for (k = 0; k < MatrixSize; k++)
          C[j][i] += A[j][k] * B[k][i];
    

    循环体中有2个浮点运算,循环体的MatrixSize * MatrixSize * MatrixSize迭代,这给了你NumOps的公式。 GFLOPs 就是每秒的操作数除以 10^9('giga')。

    【讨论】:

    • +1。让我在具有内置 FMAD(融合乘法和加法)指令的硬件上添加它,其中包括所有最新的 nvidia gpus,人们会争论是否在 MatrixSize^3 项前面使用因子 2。只要您始终如一地这样做,就没有什么大不了的。
    猜你喜欢
    • 2012-12-14
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    相关资源
    最近更新 更多