在Programming Massively Parallel Processors
一书中,gflops的数量用于比较不同矩阵乘法内核的效率。我怎么在我自己的机器上为我自己的内核计算这个呢?
在NVIDIA论坛的某个地方,我发现了这个"算法",但我不知道,它是多么有效,或者时间2来自哪里。
NumOps = 2 * pow(MatrixSize,3)
gflops = 1.0e-9 * NumOps / ExecutionTime
注。请随意更改标签
可以通过在大输入下运行算法并测量执行时间来测量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')。