高速化
HPC
理論演算性能
理論性能
性能評価

演算性能とは、システムやアプリケーションの性能評価に使われる指標です!
1秒間にCPUが浮動小数点演算(Flop)を何回できるかを示しています。

演算性能(Flops) = 浮動小数点演算(Flop) ÷ 秒(Sec)

下に例を示すので、自分のプログラムと見比べると感覚的にわかります!

どんな時に使う?

アプリケーションと、パソコンの性能の評価や比較をする時

まず用語の説明

理論演算性能

理論演算性能とは、システムが理論上で、1秒間に浮動小数点演算を、最大何回行えるかという数値である。

実測値(実行性能)

実行性能とは、1秒間にそのシステムが浮動小数点演算数を何回できるかのことである。

実測値(実行性能)の計算方法

(例1)

for(i = 0; i < 100000; i++){
 A[i] = B[i] * C[i];
}

というプログラムが0.01秒かかったとすると、
1ループあたりに「*演算」を1回行なっているので、
100000(ループ) × 1Flop ÷ 0.01(sec) = 1000Flops
となる。

(例2)

for(i = 0; i < 100000; i++){
 A[i] = B[i] * C[i] * C[i] * C[i];
}

このプログラムが0.01秒かかったとすると、
1ループあたりに「*演算」を3回行なっているので、
100000(ループ) × 3Flop ÷ 0.01(sec) = 3000Flops
となる。

(例3)

for(i = 0; i < 100000; i++){
for(j = 0; j < 100000; j++){
 A[i] = B[i] * C[i] * C[i] * C[i];
}
}

このプログラムが0.01秒かかったとすると、
1ループあたりに「*演算」を3回行なっていて、100000の2段のループなので
100000(ループ) × 100000(ループ) × 3Flop ÷ 0.01(sec)
= 300000000Flops = 0.3GFlops
となる。
また、基本的にはGFlops(ギガフロップス)を使う。

理論演算性能の計算方法

クロック周波数=2.1GHz
コア数=10
CPU内部の演算器の数=2
の場合、
2.1GHz × 10コア × 2(演算装置数) = 42GFlops
となる。

SIMD命令(256ビットSIMD)を使った場合の理論演算性能

クロック周波数=2.1GHz
コア数=10
CPU内部の演算器の数=2
SIMD(256ビットSIMD)=4
の場合、
2.1GHz × 10コア × 2(演算装置数) × 4(256ビットSIMD) = 168GFlops
となる。

SIMD命令(128ビットSIMD)を使った場合の理論演算性能

クロック周波数=2.1GHz
コア数=10
CPU内部の演算器の数=2
SIMD(128ビットSIMD)=2
の場合、
2.1GHz × 10コア × 2(演算装置数) × 2(128ビットSIMD) = 84GFlops
となる。

SIMD命令でFMA命令を使って、FMA演算器が2つある場合の理論演算性能

クロック周波数=2.1GHz
コア数=10
CPU内部の演算器の数=2
SIMD(256ビットSIMD)=4
FMA(Fused Multiply-Add)演算器の数=2
の場合、
2.1GHz × 10コア × 2(演算装置数) × 4(256ビットSIMD) × 2(FMA演算器) = 336GFlops
となる。

MPIを使った場合の理論演算性能

クロック周波数=2.1GHz
コア数=10
CPU内部の演算器の数=2
SIMD(256ビットSIMD)=4
プロセス並列数=10
の場合、
2.1GHz × 10コア × 2(演算装置数) × 4(256ビットSIMD) × 10(プロセス並列数) = 1680GFlops
となる。

参考

ルーフラインモデルとは(メモリ性能がネックとなって、演算性能がさらに小さくなったりする)
http://qiita.com/bokotomo/items/05f761ab580b4a9b6458
演算器(ALU)
https://ja.wikipedia.org/wiki/%E6%BC%94%E7%AE%97%E8%A3%85%E7%BD%AE
SIMD
https://ja.wikipedia.org/wiki/SIMD
プロセス並列
https://web.kudpc.kyoto-u.ac.jp/manual/ja/parallel

SIMD, FMA引用
https://ja.wikipedia.org/wiki/SIMD

FMA命令に対応した演算器においては、上記の浮動小数点演算を1クロックサイクルのスループットで実行可能で、加算のみ、乗算のみを実行できる演算器と比較すると理論FLOPSを倍にすることができる。また、乗算の結果に対しては丸めを行わず、加算を行った後に一度だけ丸めを行うため、乗算と加算を独立して実行するのと比較して丸め誤差を小さくできるという利点もある。実装としてはAMDのBulldozerマイクロアーキテクチャでサポートされたのが最初で、モジュールあたり2つの128ビットFMA演算器を搭載している。IntelはHaswellマイクロアーキテクチャで初めてサポートしており、コアあたり2つの256ビットFMA演算器を搭載している。