在我看来,我并不完全理解 FLOPS 的概念。在 CUDA SAMPLES 中,有矩阵乘法示例 (0_Simple/matrixMul)。在此示例中,每个矩阵乘法的 FLOP(浮点运算)数通过以下公式计算:
double flopsPerMatrixMul = 2.0 * (double)dimsA.x * (double)dimsA.y * (double)dimsB.x;
所以,这意味着,为了将矩阵乘以A(n x m)
,B(m x k)
我们需要做:2*n*m*k
浮点运算。
但是,为了计算结果矩阵的 1 个元素C (n x k)
,必须执行m
乘法和(m-1)
加法运算。因此,操作总数(计算n x k
元素)是m*n*k
乘法和(m-1)*n*k
加法。
当然,我们也可以设置加法的次数为m*n*k
,总运算次数为2*n*m*k
,一半是乘法,一半是加法。
但是,我想,乘法比加法计算成本更高。为什么这两种操作混在一起?计算机科学总是如此吗?如何考虑两种不同类型的操作?
对不起我的英语不好)