【发布时间】:2015-02-15 02:16:57
【问题描述】:
在我看来,我并不完全理解 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 浮点运算。
但是,为了计算结果矩阵C (n x k) 的 1 个元素,必须执行m 乘法和(m-1) 加法运算。因此,操作总数(计算n x k 元素)是m*n*k 乘法和(m-1)*n*k 加法。
当然,我们也可以设置加法的次数为m*n*k,总的运算次数为2*n*m*k,一半是乘法,一半是加法。
但是,我想,乘法比加法计算成本更高。为什么这两种操作混在一起?计算机科学总是如此吗?如何考虑两种不同类型的操作?
对不起我的英语)
【问题讨论】:
-
大多数架构(包括 nVidia GPU)都支持融合乘法加法,因此您可以有效地免费获得加法并计算乘法。
-
但在这种情况下,答案必须是
m*n*k,比示例中的小一倍 -
抱歉 - 没有仔细阅读。