-1

たとえば、ここで数学の演算を数えます。

          for (int i = 0; i < 100; ++i)
          {
            for (int j = 0; j < 50; ++j)
            {
              X[i*xcol+j] = Y[i] * Z[j];
             }
           }

合計gflops++ii*xcol+jなどの演算をカウントする必要がありますか(ここで明らかな間違いを指摘する前に、フロップスの厳密な定義を少し忘れましょう)カウントする必要がありますY[i]*Z[j]か?私がこれを尋ねる理由は、ここで最後の1つだけをgflops /mathsopsとして数えるいくつかの論文を読んだからです。

4

1 に答える 1

2

あなたが私のために仕事をしている時、私が気にかけているのは、自分が欲しいものを数えることだけです。私はあなたのオーバーヘッドを数えることを気にしません。この場合の目標は、各 Y に各 Z を掛けることです。問題は、1 秒間に何回乗算できるかということです。

多くの配列インデックス計算を行う必要があるかどうか、またはそれらを回避する方法を見つけるかどうかは気にしません。たとえば、ある日、合計 20,000 回の算術演算を行って 5,000 回の乗算を行ったところ、1 秒かかったとします (最新のコンピューターにしては遅すぎます)。私にとって、それは 1 秒あたり 5,000 フロップです。翌日、あなたはコードを書くためのより良い方法を見つけ出し、10,000 回の算術演算だけで 5,000 回の乗算を行うことができ、0.5 秒かかります。つまり、1 秒あたり 10,000 フロップです。

明らかに、0.5 秒で 5,000 回の操作を実行したいと考えています。これらは、カウントされる唯一の操作です。

于 2012-12-16T04:09:21.820 に答える