信号処理とMIPS
MIPS 【 Million Instructions Per Second 】 とは
信号処理や組み込みの分野では、アルゴリズムを提供するソフトウェア(ファームウェア)が、どれくらいの処理量(演算量)が必要なのか問われます。例えば、信号処理の性能を示すものには、処理された結果の品質があると思います。良い品質が提供できるとした時、もう一つ重要な指標に演算量があります。高品質な結果を提供するソフトウェアでも、スーパーコンピューターが必要では非現実的になってしまいます。
信号処理のソフトウェアの演算量を示す指標として、MIPSが良く使われています。
MIPS
コンピューターの処理能力を表す単位。コンピューターが1秒間に何百万回命令を実行できるかを示す。
MIPSとは、このように説明されていることが多いです。確かにこの通りなのですが、ハードウェアの性能を示すものとして説明されている場合がほとんどです。
分かりやすいところでは、CPUのデータシートに、動作クロック100MHz, 100MIPS などと書かれていた場合は、CPUの処理性能を示しています。
動作クロック100MHzで100MIPSとは | 1サイクルで1命令実行できる |
---|---|
100,000,000命令 / 100,000,000Hz = 1命令 | 100MHz × 1命令 = 100MIPS |
一般的には、1サイクルで1命令の場合が多く、開発現場では動作クロック100MHzのCPUの処理能力を、おおざっぱに100MIPSと言ったりします。
また、別のCPU(シングルコア)で、動作クロック100MHz, 200MIPS などというハードウェアスペックがあったとします。
動作クロック100MHzで200MIPSとは | 1サイクルで2命令実行できる |
---|---|
200,000,000命令 / 100,000,000Hz = 2命令 | 100MHz × 2命令 = 200MIPS |
動作クロック100MHzで、200MIPSとは、1サイクルで1命令を実行できるCPUに比べて、2倍の処理性能を示しています。ソフトウェア開発者から見るとちょっと違和感がありますが・・・
演算処理を高速に行うDSP【Digital Signal Processor】
こうしたケース(動作クロックより大きいMIPS)は、DSPという信号処理に特化したプロセッサに多いです。
DSPでは信号処理特有の畳み込みや、高速フーリエ変換 (FFT)など、演算量が大きい処理を高速に行う命令があります。特に畳み込みは、積和演算 (MAC, Multiply-Accumulate)で行われ、DSPはこのMACが得意なプロセッサーです。また、ALU(算術論理演算)とMACを同時に行うなどの命令並列もあります。
DSPに多い命令
DSPに多い命令 | 説明 |
---|---|
Dual MAC 命令 | 積和を2並列に処理 |
ALU & MACの組み合わせ 命令 | ALUと積和を並列処理(命令並列) |
Dual MAC
1サイクルで1回の積和をSingle MACとすると、Dual MACは次のイメージです。
MAC | 演算(例) | 説明 |
---|---|---|
Single MAC | Z += A × B | 1サイクルで積和 を1回 |
Dual MAC 例1 | Z1 += A1 × B1, Z2 += A2 × B2 | 1サイクルで積和を並列処理 |
Dual MAC 例2 | Z = (A1 × B1) + (A2 × B2) | 1サイクルで積和を並列処理 |
AUL & MAC
ALU & MACの組み合わせ命令を、ALUが加算(ADD)の例で説明すると次のイメージです。
ALU & MACの組み合わせ | 演算(例) | 説明 |
---|---|---|
ADD | Z = A + B | 1サイクルで加算を1回 |
MAC | Z += C × D | 1サイクルで積和 を1回 |
ADD & MAC | Z1 =A + B, Z2 += C × D | 1サイクルで加算と積和を並列処理 |
この様に演算を並列にできる場合、CPUの最大MIPSが、動作クロックより大きいMIPSとして示される場合があります。
SIMD【Single Instruction Multiple Data】
データ並列処理では、SIMDも似たような性能表記があり、SIMDの場合はさらに4並列、8並列のデータ処理が可能なプロセッサもあります。代表的なものでは、ARM社の「NEON」ですね。
1ワードのデータ長にもよりますが、例えば、32bit × 32bitの乗算器を2個持つCPUのSIMDでは、16bit × 16bitで4並列が出来る場合が多いです(8bitなら8並列も)。
ワード長 | 演算(例) | 説明 |
---|---|---|
32bit | z[0] = A[0] × B[0], z[1] = A[1] × B[1] | 2並列 |
16bit | z[0] = A[0] × B[0], z[1] = A[1] × B[1], z[2] = A[2] × B[2], z[3] = A[3] × B[3] | 4並列 |
MIPSの説明としては・・・
ここで紹介した並列処理は、1サイクルで2演算以上を実行するので、並列する演算に依存関係がない事が条件になり、これらはコンパイラ任せではあまり最適化が期待できないことがあるので、ソフトウェア開発者から見ると、ちょっとオーバーなカタログスペックに見えます。このような性能表記では、条件分岐などを考えず、最大スペックの性能が書かれているようです。
MIPSの用語説明では、このようなハードウェアの性能を示すものが多い気がします。次回は、本題のソフトウェア開発の指標としてのMIPSについて書きたいと思います。