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
。半分は掛け算で、半分は足し算です。
しかし、掛け算は足し算よりも計算コストが高いと思います。この 2 種類の操作が混同されるのはなぜですか? コンピューターサイエンスでは常にそうですか?2 つの異なるタイプの操作をどのように考慮することができますか?
私の英語でごめんなさい)