昨日はCPUキャッシュについて取り上げましたが、今回はCPUの性能指標となる「CPI」「IPC」「MIPS」「TPC」「TPI」「TFLOPS」「TOPS」についてそれぞれ見ていきます。
先に今回紹介する中身を表で。
意味 | 求め方 | |
---|---|---|
TPI | 1命令実行あたりの時間 | TPC × CPI |
TPC | サイクルあたりの時間 (クロックサイクル) |
1 / 駆動周波数 |
CPI | 命令あたりのクロックサイクル | 1 / IPC |
IPC | クロックサイクルあたりの命令実行数 | 1 / CPI |
IPS | 1秒あたりの命令実行数 | |
MIPS | 100万単位のIPS | |
理論性能 | 1秒あたりの演算実行数 | 駆動周波数×クロックあたりの演算数×コア数 |
FLOPS | 浮動小数点数演算の理論性能 | |
OPS | 主に整数演算の理論性能 |
CPUの性能指標
CPUの性能指標と書きましたが、実際にはGPUやNPUなどのロジック半導体には大体適用されるような気がします。
性能指標には冒頭で述べた「CPI」「IPC」「MIPS」「TPC」「TPI」と理論性能(単位がTFLOPS・TOPS)があります。これに加えてベンチマークもありますが、ちょっと趣旨とずれるので省略。
ではそれぞれ見ていきます。
知っておくべきこと
今回の話をする前に理解しておくべきことをまとめておきます。
まずはサイクルという言葉。
サイクルとはパルス列(クロック)の1周期分、つまりONとOFFを繰り返すまでの周期となります。CPUは高速にON/OFFされるクロックごとに動作を行います。クロックサイクルはこの時間を意味しますが、クロックサイクルが短いほど高速に動作します。
クロックサイクルは実質的にCPUの駆動周波数の逆数となります。1 GHzで駆動するCPUがあれば、1クロックサイクル=1ns(10のマイナス9乗)となります。
そして命令。命令とは、CPUがどのような処理をするのかという情報です。例えばCPUが足し算をするときは「足し算」という命令を実行することになります。
とりあえず、これだけわかっていただければOKです。
TPIとTPC
先にTPIとTPCについて説明しておきます。
まず、TPIとは「Time per Instruction」の略です。これは、命令にかかる時間を意味しています。
TPCとは「Time per Cycle」あるいは「Time per Clock-cycle」の略となります。1サイクルあたりの時間を意味しています。TPCとクロックサイクルは同義です。
今回紹介する、CPIやIPCは、クロックサイクルを基準にした指標を意味しているため、TPCを用いて現実時間を求めるということにも便利です。
TPCは駆動周波数の逆数です。1 GHzで駆動するCPUがあれば、TPCは1nsとなります。
CPI
CPIは「Clock cycle per Instruction」、あるいは「Cycle Per Instruction」となります。今回登場するほとんどの略称のPは「Per」(あたりの)の省略です。 A Per Bとは、BあたりのAとなります。
それに合わせてCPIを説明すると「命令あたりのサイクル数」となります。CPIは1命令あたりに必要なサイクル数を示す指標となります。
もし、1命令の実行に2サイクル必要ならば2 CPI、1命令あたり5サイクル必要ならば5 CPIとなります。
そして、CPU駆動クロックがここに加われば命令の実行時間もわかるわけですね。前述の通り、クロックサイクルは駆動周波数の逆数です。
よって、CPIから命令実行時間を求めるには、
- TPC(クロックサイクル) ✕ CPI = TPI
となります。
もし5 CPIのCPUが1GHzで駆動していたとする場合、1ns ✕ 5サイクル=5nsで、1命令あたり5nsの時間がかかることになりますね。
CPIはこのようにTPIを求めるのに有用です。
IPC
IPCはCPIの逆です。「Instruction per Clock-cycle」あるいは「Instruction per Cycle」となります。
こちらはサイクルあたりの命令実行数となりますから、CPIの逆数であることがわかると思います。つまり、サイクルにおいて実行される命令の数。
IPCが高ければCPUが低周波数で動作しても性能を発揮できます。逆にIPCが低ければ高周波にしないと性能を発揮できません。CPUのアーキテクチャの改良では、IPCの向上を目指して行われており、前世代の製品と比較して同じくロックあるいはクロックが下がったとしても性能が向上した=IPCが向上していることを意味しています。
IPCは命令セットによっても異なります。例えば、単純なかつ短時間で実行できる命令だけで構成されるRISCと、高機能で実行に時間がかかる命令で構成されるCISCを比較した時、必然的にRISCのほうがIPCが高くなり、CPIは低くなります。一方で、CISCはIPCが低くなりCPIが高くなります。しかし、総じた処理時間で見るとCISCは高機能な命令の分、RISCよりも少ない命令で処理を終えることができるのでRISCと変わらなかったりします(時と場合による)。
そのため、IPCとCPI、それにこのあと登場する命令の実行数で測られる性能指標は、異なる命令セットで比較しても意味がないことには注意が必要ですね。
MIPS
MIPSは「Million Instruction Per Second」となります。MIPSということばの家、Mは接頭辞であり、どちらかというと「IPS」の部分のほうが重要ですね。
IPSは「1秒あたりの命令実行数」、MIPSは「1秒あたりの100万単位での命令実行数」になります。Millionは100万ですから、1 MIPS=100万 IPSです。
IPCと同様に命令あたりの時間を示す指標ですが、IPCがクロックサイクルというCPUの駆動周波数次第で変化するCPU内部での時間を表しているのに対して、IPSは現実時間に対する命令実行数を示しています。
あるCPUが、1秒間で400万の命令を実行できたとすると、そのCPUは4,000,000 IPS = 4 MIPSの性能があるといえます。
IPSもIPCと同様に命令セットを超えて比較することはできません。
なぜIPSではなくMIPSなのかと言われれば、これは単純にCPUが命令を実行する速度が速いので接頭辞をつけてまとめているだけのような気がしますね。
理論性能
最後に理論性能を解説します。
これまで紹介してきた指標は命令実行に対するものであったのに対して、理論性能は実際の演算性能を示しています。つまり、命令セットやそもそもCPU・GPU・NPU間でも比較する事ができるのです。
タイトルにはよく使われる「TFLOPS」と「TOPS」と書きましたが、このTとはTera(10の12乗)を意味するものです。1 TFLOPS = 1兆 FLOPSです。
つまり、実際の単位は「FLOPS」と「OPS」となります。それぞれの正式名称は「Floating-point Operations Per Second」、「Operations Per Second」です。ともに「1秒間に何回演算できるのか」を意味しています。
FLOPSとOPSの違いはその演算の種類の違いです。
FLOPSの「Floating-point」とは浮動小数点数のことです。浮動小数点数とは、コンピュータが小数点数を表す際に使用する一般的な表現方法です。
コンピュータにおいて数値は2進数で扱われますが、浮動小数点数はこの2進数の列を「符号部」「指数部」「仮数部」に分解して小数点を表す手法です(詳細は省略)。この3つの部分の桁数や、全体の桁数などで様々なフォーマットがあります。IEEE 754として規定されているもの(FP32など)がほとんどです。
基本的に多くの数値演算においてはこの浮動小数点数を用いるためCPU・GPUの指標にはFLOPSが使用されるわけです。
一方、最近見かける様になったのはOPSです。OPSは一応 1秒間に行える演算の数を意味しているのでFLOPSも包括しているものと考えられますが、基本的に整数演算について用いられています。そのため、整数演算が重要となるNPUやAI性能で用いられる事が多い指標です。
FLOPSとOPSは、ともに
1サイクルあたりの演算数 ✕ 駆動周波数 ✕ 論理コア数
という式で求めることができます。
例を挙げます。
GeForce RTX 4090では、1クロックあたり2個のFP32演算を行うことができるので 1サイクルあたりの演算数は2、駆動周波数は2.52 GHz、論理コア数(CUDAコア数)は16,384です。
2 ✕ 2.52 GHz ✕ 16,384コア = 82,575.36 GFLOPS ≒ 82.6 TFLOPS
となり、NVIDIAの公称値と一致します。
基本的に、1サイクルあたりの演算数・クロック・コア数さえわかれば、理論性能は定まります。理論性能は実質的にそのプロセッサの素の性能を表しています。
まとめ
今回は、性能指標についてまとめてみました。いかがでしたか。
この中で、IPC・CPI・MIPSは基本情報技術者と応用情報技術者の範囲だった気がするので、勉強に役立てられてれば幸いです。