回答:
:理論ピークFLOP / sがで与えられる のコアの数が簡単です。理論的には、平均周波数はある程度のTurbo Boost(Intel)またはTurbo Core(AMD)を考慮すべきですが、動作周波数は適切な下限です。サイクルごとの操作はアーキテクチャに依存しており、見つけにくい場合があります(SandyBridgeおよびIvyBridgeの場合は8、スライド26を参照)。これは、このスタックオーバーフローの質問の主題であり、多数の最新のアーキテクチャの数字が含まれています。
マシンのCPUのモデルとベンダーを知る必要があります。それができたら、クロックレート、チップ/ソケットの数、チップごとのコアの数、サイクルごとの浮動小数点演算の数、およびそれらの演算のベクトル幅をベンダーのWebサイト(またはWikipediaで)で調べることができます。 。次に、単に乗算します。
たとえば、私が働いているStampedeのIntel Xeon E5-2680「Sandy Bridge」プロセッサを考えてみましょう。仕様は次のとおりです。
これらを乗算すると、システムの加速されていない部分に対して345.6 GF /ノードまたは2.2 PFが得られます。
私たちは通常、倍精度(64ビット)演算の観点から考えます。これは、大部分のユーザーに必要な精度であるためです。ただし、必要に応じて単精度で計算をやり直すことができます。これは通常、最後の要因、たとえば4 DP Flops / instではなく8 SP Flops / instructionのみを変更しますが、それとは大きく異なる場合があります。たとえば、古いGPUでは、SPの約1/8のレートでのみDPを実行していました。システムの数値を引用する場合、倍精度でない場合は、それを使用したとみなされるため、使用したものを明示する必要があります。
また、チップがFMA(Fused Multiply-Add)命令をサポートし、フルレートで実行できる場合、ほとんどの人はこれを2つの浮動小数点演算としてカウントしますが、ハードウェアパフォーマンスカウンターでは1つの命令としてカウントされる場合があります。
最後に、システムに存在する可能性のあるアクセラレータ(GPUやXeon Phiなど)に対してこれを実行し、そのパフォーマンスをCPUパフォーマンスに追加して、理論的な合計を取得することもできます。
あなたは理論的な値を求めたことを理解していますが、これは実際のコードではほとんど常にアクセスできないため、LINPACKであっても、非常に大きな行列に対してDGEMMを実行(最適化)することができます。私がこの方法を好む理由は、特定のプロセッサの理論上のピークフロップ値を達成するのを妨げる特定のプロセッサの欠点のいくつかを明らかにするからです。
たとえば、NVIDIA GPUは現在、同じパイプラインで整数および浮動小数点演算を実行します。これは、整数計算をまったく行わない場合にのみ、理論的なピークフロップを達成できることを意味します。配列のインデックス付けやその他の形式のデータアクセスには整数演算が必要になるため、NVIDIA GPUで理論上のピークフロップを達成できるコードはありません。ほとんどの場合、上限として〜80%が見られます。整数演算と浮動小数点演算を同時に発行するCPUの場合、これは問題ではありません。
Intel Knights CornerやBlue Gene / Qのような一部のGPUのようなマルチコアプロセッサでは、同様のパイプラインの問題に対して、従来のCPUよりもピークフロップを達成するのが困難です(ただし、両方とも少なくとも大規模なDGEMMで〜90% )。