
みなさん、こんにちわ。Vectory(@vectorywork)です。
今回は、FLOPSについて書きたいと思います。
理論計算性能は簡単に計算できますので、分からなくなったら自分で計算してみてください。
メモリバンド幅の計算方法については以下をどうぞ↓
- FLOPS(Floating-point Operations Per Second)とは
- FLOPS計算方法
- Intel Xeon Gold 6126(2.6GHz/12core)
- Intel Core i7 8700K(Coffee Lake)(3.7GHz/6core)
- AMD EPYC 7451(2.3GHz/24core)
- NVIDIA GPU Tesla V100(1.53GHz/2560core)
- NVIDIA GPU A100(1.41GHz/3456core)
- 京(K computer)(SPARC64TM VIIIfx)(2GHz/8core)
- 富岳A64FX、Armv8.2-A SVE(1.8GHz/48core)
- SX-Aurora TSUBASA 10A (1.6GHz/8core)
- ゲーム機:PlayStation4、PS5、Xbox X
- 実際に自分のパソコン(Windows)でLINPACKを測ってみた。
- まとめ:FLOPSの理論値計算は簡単。でも大事なのは実効性能
FLOPS(Floating-point Operations Per Second)とは
FLOPS(フロップスと読みます)は、FLoating-point Operations Per Secondの略でコンピュータの性能指標の一つです。
FLOPSは、1秒間に浮動小数点演算が何回できるか示す値です。
例えば、1秒間に10回演算が出来るマシンは、「10FLOPSの性能を持つ」ということになります。
最近のコンピュータは性能が上がってきていますので、1兆FLOPSなど、非常に大きな値になります。
そういったときには、Giga(ギガ)とかTera(テラ)とかの接頭辞をつけることが一般的です。
読み | 記号 | ||
---|---|---|---|
エクサ(Exa) | E | 1,000,000,000,000,000,000 | 100京 |
ペタ(Peta) | P | 1,000,000,000,000,000 | 1000兆 |
テラ(Tera) | T | 1,000,000,000,000 | 1兆 |
ギガ(Giga) | G | 1,000,000,000 | 10億 |
メガ(Mega) | M | 1,000,000 | 100万 |
FLOPS簡易計算ツール
クロックとコア数を入れると、FLOPSが算出できる簡易計算ツールを作りました。
間違っているかもしれませんが、良かったら参考にしてください。
FLOPS計算方法

理論演算性能(FLOPS)の計算方法ですが、プロセッサのクロック周波数とクロックあたりの演算数で決まります。
例えば、Intel Xeon Skylake-SP Goldシリーズの場合のクロックあたり演算数は、
- AVX512⇒8 (=512/64)
- FMA演算器の数⇒2
- FMA (Fused Multiply-Add) 1演算器あたり⇒2 (足し算と掛け算が同時にできるので2)
から、クロックあたりの演算数=8×2×2=32です。
※この32という値は、プロセッサによって変わります。
Intel Xeon Gold 6126(2.6GHz/12core)
Intel Xeon Gold 6126のクロック周波数は2.6GHz(ベース動作周波数)です。
よって、1コアあたりの性能は、
となります。
加えてIntel Xeon Gold 6126は、1CPUあたり、12コアありますので
となります。
AVX利用時は、演算数は増えるけどクロックが下がる?

少し細かい話になりますが、AVX利用時の周波数は、ベースクロックより下がります。
そのため、AVX512を考慮した演算数でFLOPS計算する時は、AVX512 Base Frequencyを使って理論演算性能を計算する必要があります。
ただし、今までの慣例からかTOP500などに登録されるFLOPS値は、AVX512を考慮した演算数×ベースクロックで計算されることが多いようです。
このあたりは少し注意が必要です。
なお、ベースクロック、AVXクロックともにIntelより情報が公開されています。
⇒Intel® Xeon® Processor Scalable Family Specification Update
⇒2nd Gen Intel® Xeon® Scalable Processors Spec Update
計算なんか面倒くさいよー!という人はこちらのページをどうぞ⇒インテル® マイクロプロセッサーの輸出規制基準
Intel Core i7 8700K(Coffee Lake)(3.7GHz/6core)
パソコンに使われるCPUのFLOPS値も確認しておきましょう。
Intel Core i7 8700Kは、AVX2となりますので演算数は上記のXeonよりも少なくなります。
※FMA対応や演算器数が違うかも知れません。。違ってたら指摘お願いします。
Intel ロードマップ
コードネーム | 世代 | 製造プロセス | 発売年 |
Nehalem(Lynnfield) | 1st | 45nm | 2009 |
Sandy Bridge | 2nd | 32nm | 2011 |
Ivy Bridge | 3rd | 22nm | 2012 |
Haswell | 4th | 22nm | 2013 |
Broadwell | 5th | 14nm | 2014 |
Skylake | 6th | 14nm | 2015 |
Kabylake | 7th | 14nm | 2016 |
Coffeelake | 8th | 14nm | 2017 |
Coffee Lake Refresh | 9th | 14nm | 2018 |
Comet Lake/Icelake | 10th | 14nm/10nm | 2020 |
Rocket Lake/Tigerlake | 11th | 14nm/10nm | 2021 |
Alder Lake | 12th | 10nm | 2022 |
Meteor Lake | 12th | 7nm | 2023 |
ちなみにデスクトップパソコン向けのIntel CPUの推移は上記のような感じです。
私の今使っているパソコンはIvyBridgeくらいだったと思うのでそろそろ買い替えたいです。(10年選手か。。)
AMD EPYC 7451(2.3GHz/24core)
AMDのEPYCもAVX2拡張命令セットですので演算数は16です。
したがって計算式は以下となります。
AMD ロードマップ
EPYC | ZEN | 製造プロセス | 発売年 | |
Ryzen 2000 | Naples | Zen1 | 14nm | 2018 |
Ryzen 3000 | Rome | Zen2 | 7nm | 2019 |
Ryzen 4000 | Milan | Zen3 | 7nm+ | 2020 |
Ryzen 5000 | Genoa | Zen4 | 5nm | 2021 |
NVIDIA GPU Tesla V100(1.53GHz/2560core)

最近流行りのNVIDIA GPUは、AVXといったベクトル拡張命令セットはありません。
そのかわりにコア数が沢山あります。
Tesla V100の場合には、浮動少数演算コア数が2560あります。
クロックは1.53GHz(※ターボクロック)とのことなので以下になります。
NVIDIA GPU A100(1.41GHz/3456core)
V100の後継機のA100はFP64コアが3456コア、クロックは1.41GHz(ブーストクロック)とのことなので以下になります。
京(K computer)(SPARC64TM VIIIfx)(2GHz/8core)
国のプロジェクトで開発された京のプロセッサは、SPARCアーキテクチャで2GHz/8core。
SIMD拡張(積和演算器2個 x 2セット)とのことなので以下となる。
富岳A64FX、Armv8.2-A SVE(1.8GHz/48core)
富岳のA64FX、PRIMEHPCは富岳の商用機ですね。
国が開発費を一企業に提供しているという香ばしいマシンですがその分期待できますね。
Armv8.2-A SVE (2x 512-bit wide SIMD FMA)
SX-Aurora TSUBASA 10A (1.6GHz/8core)

SX-Aurora TSUBASAは、NEC独自の日本発の商用プロセッサです。
- ベクトル命令セット/cycle⇒32要素(64bitが32個)
- FMA (Fused Multiply-Add) ⇒2
- FMA演算器の数⇒3
- コア数⇒8コア
コアもクロックもそれほど高くないのに理論演算性能が高いですね。
これがベクトルスーパーコンピュータの技術というわけですね。
VE 20Aが発表されて10coreモデルも選択可能になりました。
これなら1.6x32x2x3x10=3TFLOPSですね。
ゲーム機:PlayStation4、PS5、Xbox X
GPUのコアはGCN (Graphics Core Next) 系アーキテクチャで、搭載する18個のCU (コンピュートユニット) はそれぞれ16レーンのSIMD演算ユニットを4個持つ。動作クロックは800MHzであり、計1,152個の積和算ユニットを持つことから単精度浮動小数点の演算性能は1.84TFLOPSとなる。- Wikipedia
おまけですが、ゲーム機(プレイステーション4)のFLOPS値もありました。
上から読み取ると以下のような式になりますね。
PS5やXbox Xの情報も出てきましたね。
CPUの性能というよりもGPUの性能になるのでなんとも言えない感じですが。。
・PS5:2.23GHz × 2 × 36CU x 64core = 10.28TFLOPS
・Xbox X:1.825GHz × 2 × 52CU x 64core = 12.14TFLOP
※RDNA2ベースのGPUはCU(Compute Unit)あたり64コア(ストリームプロセッサ)?
実際に自分のパソコン(Windows)でLINPACKを測ってみた。
実際にどんなものか理論性能だけじゃなくて測ってみたいですよね!←
最近はLINPACKがwindowsパソコンでも測れるみたいので早速試してみました。
LINPACKとは
LINPACK ベンチマークは LINPACK に基づいたベンチマークプログラムで、システムの浮動小数点演算性能を評価する。ジャック・ドンガラが考案したもので、理学・工学で一般的な n×n の線型方程式系[3] Ax = b を解く速度を測定する。このベンチマークの最新版はTOP500で世界の高速なコンピュータの性能値としてランキングに使用されている[4]。-wikipedia
LINPACKは、世界ランキングにも使われているベンチマークプログラムです。
早速、マイPCの性能をベンチマークしてみましょう。
Intel LINPACK Benchmarkをダウンロード
まずはIntel LINPACK Benchmarkのダウンロードページに行きます。

すると、 License Agreementが表示されますので、読んで問題なければ「Accept」をクリックしましょう。

次に進むと、Intel Math Kernel Library(MKL) Benchmarksのダウンロードページに行きますのでwindows版をダウンロードしましょう。
Intel LINPACK Benchmarkを実行する
ダウンロードしたZIPファイルを回答すると、以下フォルダの中に「runme_xeon64.bat」というファイルがあるのでダブルクリックします。
\w_mklb_p_2018.2.010\w_mklb_p_2018.2.010\benchmarks_2018\windows\mkl\benchmarks\linpack

This is a SAMPLE run script for running a shared-memory version of
Intel(R) Distribution for LINPACK* Benchmark. Change it to refect
the correct number of CPUs/threads, problem input files, etc..
*Other names and brands may be claimed as the property of others.
2018/04/21
13:08
Running linpack_xeon64.exe. Output could be found in win_xeon64.txt.
すると、コマンドプロンプトが立ち上がってLINPACKが実行されます。
「Output could be found in win_xeon64.txt」ということで先程のフォルダを見るとテキストファイルができてました。
結果を見てみる。
少し長いですが、テキストファイルの中身を貼り付けます。
Sample data file lininput_xeon64.
Current date/time: Sat Apr 21 13:08:03 2018
CPU frequency: 3.810 GHz
Number of CPUs: 1
Number of cores: 4
Number of threads: 4
Parameters are set to:
Number of tests: 15
Number of equations to solve (problem size) : 1000 2000 5000 10000 15000 18000 20000 22000 25000 26000 27000 30000 35000 40000 45000
Leading dimension of array : 1000 2000 5008 10000 15000 18008 20016 22008 25000 26000 27000 30000 35000 40000 45000
Number of trials to run : 4 2 2 2 2 2 2 2 2 2 1 1 1 1 1
Data alignment value (in Kbytes) : 4 4 4 4 4 4 4 4 4 4 4 1 1 1 1
Maximum memory requested that can be used=16200901024, at the size=45000
=================== Timing linear equation system solver ===================
Size LDA Align. Time(s) GFlops Residual Residual(norm) Check
1000 1000 4 0.021 32.4567 1.029343e-12 3.510325e-02 pass
1000 1000 4 0.010 69.4419 1.029343e-12 3.510325e-02 pass
1000 1000 4 0.010 69.5091 1.029343e-12 3.510325e-02 pass
1000 1000 4 0.010 70.2038 1.029343e-12 3.510325e-02 pass
2000 2000 4 0.107 50.0789 4.298950e-12 3.739560e-02 pass
2000 2000 4 0.073 72.6778 4.298950e-12 3.739560e-02 pass
5000 5008 4 1.070 77.9594 2.581643e-11 3.599893e-02 pass
5000 5008 4 1.009 82.6635 2.581643e-11 3.599893e-02 pass
10000 10000 4 8.320 80.1505 9.603002e-11 3.386116e-02 pass
10000 10000 4 8.244 80.8936 9.603002e-11 3.386116e-02 pass
15000 15000 4 25.579 87.9789 2.042799e-10 3.217442e-02 pass
15000 15000 4 26.477 84.9964 2.042799e-10 3.217442e-02 pass
18000 18008 4 43.557 89.2769 2.894987e-10 3.170367e-02 pass
GFlopsとちゃんと出ていますね。
どうやら私のパソコン(Core i5 3570K)は80GFlopsくらいみたいです。
Sizeが大きいほうが性能が良くなるんですね。
3.810 GHzで4coreなので理論性能は121GFlopsですね。
65%くらいの性能が出ているといった感じでしょうか。
非常に簡単なので良かったら試してみてください。
まとめ:FLOPSの理論値計算は簡単。でも大事なのは実効性能

さてさて、色々なマシンを例にコンピュータの理論性能値の指標であるFLOPSを計算してみました。
カラクリさえ分かってしまえば、計算自体は簡単なものだったのではないでしょうか?
ただ、あくまで理論値は理論値です。
実際のアプリケーション・ソフトウェアを動かした時に、高速かどうかが重要です。
理論性能ばかりに気をとられていて、思ったより実効性能が出ないという場面に出くわすというのは結構アルアル話のようです。
理論性能はあくまで指標の一つとして有効に活用してみてください。
余談:2位じゃだめなんですか?
スパコン事業仕分けで蓮舫議員の「2位じゃだめなんですか?」という発言が問題になりましたね。
これはほんの一部のセリフを切り出しただけなんですけどね。
https://twitter.com/sasaru_fuushiga/status/629846192852054016※事業仕分の時の全文リンクを張っておきますので興味のある方はどうぞ⇒行政刷新会議ワーキングチーム「事業仕分け」第3WG(pdf)
確かに言い方は良くなかったかも知れませんが、議員も知識のない国民もマスコミに踊らされて少しかわいそうだったように思います。
比較的単純で理論性能に近い値のでるLINPACKというアプリケーションで一位をとることが、日本の発展にどう繋がるのかがピンと来なかったから質問しただけではないでしょうかね。
例えば、
ある球団が世界最速のストレートを投げられる投手を100億円で一位指名で契約しました。
その投手は確かにストレートは世界最速ですが、変化球は投げられないし、コントロールも悪く、精神も不安定です。
もちろん、実際の試合では、パフォーマンスがあまり良くありませんでした。
これに対して「世界最速じゃないとダメなんですか?」と採用担当に質問するのと似たようなもんだと思うんですけどね。#まあ、少し違いますが。
さて、今日はここまで!
おわりっ!