3

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 km*n*k(m-1)*n*k

もちろん、足し算の回数を に設定することもできm*n*k、合計の操作回数は になります2*n*m*k。半分は掛け算で、半分は足し算です。

しかし、掛け算は足し算よりも計算コストが高いと思います。この 2 種類の操作が混同されるのはなぜですか? コンピューターサイエンスでは常にそうですか?2 つの異なるタイプの操作をどのように考慮することができますか?

私の英語でごめんなさい)

4

1 に答える 1

2

簡単に言えば、はい、掛け算と足し算の両方を数えます。ほとんどの浮動小数点プロセッサは融合された乗算/加算演算を備えていますが、それでも乗算と加算を 2 つの別個の浮動小数点演算としてカウントします。

これが、何十年もの間、人々が FLOP は基本的に無意味な測定であると不平を言ってきた理由の一部です。少しでも、FLOP を測定している特定のコード本体を指定する必要があります (たとえば、「Linpack ギガフロップス」)。それでも、測定対象が実際にマシンの速度であることを保証するために、どのコンパイラーの最適化が許可されているかなどをかなり厳密に制御する必要がある場合があります。

最終的に、これらのベンチマークの実行方法と結果の報告方法に関するベンチマークとルール (SPEC など) を設定する組織が形成されるに至ったのは、このような懸念です。そうしないと、2 つの異なるプロセッサについて報告された結果が意味のある方法で実際に比較できるかどうかを確認するのが難しい場合があります。それがあっても比較は難しいかもしれませんが、それがなければ意味がありません。

于 2014-12-16T17:30:49.560 に答える