MIPSとMCPS(?)、100MIPSは100MHzで動くか?
信号処理とMISP(前編・後編)では、ソフトウェアのベンチマークとしてMIPS【Million Instructions Per Second 】が使われることについて書いてきました。
前編(信号処理とMIPS - Smile Engineering Blog)
後編(信号処理とMIPS・後編 - Smile Engineering Blog)
もう少し突っ込んだ話をしますと、実は開発の現場ではMIPSでちょっと困る話があります。
命令数を指標としても1命令にどれくらいの時間*1がかかるのかによって実際の処理量(演算量)が変わるからです。そこで、あまり馴染みのない言葉かも知れませんが、MCPS【Million Cycles Per Second 】という表現をご存知でしょうか・・・
ここで「MCPS」という略語がスタンダードなものとして定着しているか?には賛否あると思いますが、本記事に関しては【Million Cycles Per Second 】の略として使用したいと思います。
MCPS【Million Cycles Per Second 】とは?
まずMIPSですが、
MIPS計算
そのソフトウェアが何命令か、Million Instructions Per Second なので1秒間に何百万命令か?ということですが、デジタル信号処理のソフトウェアを考えたとき、MIPS計算は次の式になります。この時のフレームサイズとはサンプル数です。
MIPS = 命令数 × サンプリング周波数 / フレームサイズ ×
MCPS計算
命令数をサイクル数に置き換えただけです。
MCPS = サイクル数 × サンプリング周波数 / フレームサイズ ×
ソフトウェアの演算量を表す時にMIPSという言葉を使う場合が多いですが、実際のところは命令数ではなくサイクル数による計測が多いです。命令数を測定した場合(または算出した場合)MIPSになりますが、実際のところは1命令に何サイクルかかるかによってMIPSの意味が変わります。
ソフトウェアに求められるMIPSとは、100MIPSは100MHzで動くか?
前回(信号処理とMIPS・後編 - Smile Engineering Blog)例にあげた地上波デジタル放送の放送局側のAAC-LCエンコーダでは、サンプリング周波数48kHzの場合21.33ms*2以内に処理しなければならないので、仮にCPUの動作クロックが100MHzだった場合、リソースを100%使えたとして*3、ソフトウェアに求められる演算量は2,133,333サイクル以内になります(200MHzなら4,266,666サイクル)。
AAC-LC 48kHzの1フレーム(ロングフレーム)のMCPSとMIPS
あるCPUに実装するソフトウェアに求められる要件として、その演算量を示す指標がMIPSだった場合、要件としては曖昧なところが出てきます。
CPU 動作クロック | フレーム 21.33msのサイクル数 |
MCPS | MIPS 2サイクルで1命令の場合 |
MIPS 1サイクルで1命令の場合 |
MIPS 1サイクルで2命令の場合 |
---|---|---|---|---|---|
100MHzの場合 | 2,133,333 | 100 MCPS | 50 MIPS | 100 MIPS | 200 MIPS |
200MHzの場合 | 4,266,666 | 200 MCPS | 100 MIPS | 200 MIPS | 400 MIPS |
あるCPUで、この表のフレーム時間以内に収まるソフトウェア開発を依頼され、その要件が100MIPS以内だった時、出来上がったソフトウェアが99MIPSならば要件は満たしたことになります。ただし、動作クロックで100MHzで、2サイクルで1命令の場合は動かない事になります。
要件が100MCPS以内だった場合はどうでしょう。1命令に何サイクルかかるかに関わらず動作することになります。「CPUのリソース以内に収めろ!」という明確な要件だと思います。
メモリのレイテンシー
現代のCPUでは、1命令に2サイクル以上かかるインストラクションアーキテクチャはほぼないでしょう。MCPSとMIPSの差はメモリアクセスにかかるウェイトが発生する場合、MCPS > MIPSの関係になり次のようなイメージです。
具体的には、キャッシュメモリで、例えばL1とかL2とかを耳にしたことはないでしょうか。CPUのコアの内部メモリをL1メモリ(L1キャッシュ)と呼び、コアの外にあるメモリをL2メモリ(L2キャッシュ)と呼ぶ場合が多いです。さらにL3があったり外部に拡張メモリという構成もあります。一般的には、L1は高速にアクセスでき、L2はコアの外のクロックを使用するためL1より時間がかかります。1サイクルで1命令のCPUの場合メモリがL1に収まっていればMCPS = MIPSとなりますが、L1に収まらずL2メモリを使用する場合ロード/ストア命令を実行する時にウェイトが入ります。L1キャッシュ構成の場合もキャッシュミスが発生しL2アクセスで待たされます。
100MIPSとオーダーされたら?
動作クロック100MHz(メモリ構成L1, L2)のCPUに搭載するソフトウェア*5の要件で、「100MIPS以内」という依頼があったらどうしましょうか?
仮に100MIPSのファームウェアを作った場合はどうなるのでしょうか。
メモリが全てL1に収まっていないと動かないことになります。L1キャッシュミスが発生しても動きませんので、要件としては「100MCPS以内」というのが適切かなと思います(個人的には)。
ただ、私の経験ではMIPS(ミップス)が定着していて、MCPS(エムシーピーエス)と言う人は少ないです(ちょっと言いにくい?)。
要件が100MIPS以内とされた場合、技術者としてどのようなソフトウェアを提供するか。。。
組み込みの技術者ならば、きっと動作クロック100MHzで動くもの(100MCPS)を提供しますね。