DSPになりきれなかった、アナログ・デジタル・プロセッサという異物「Intel 2920」(人知れず消えていったマイナーCPUを語ろう 第15回)
画像はFIR/IIRフィルタの基本的な考え方だが、例えば上側の5-TapのFIR Filterの場合でも常時5回の乗算と4回の加算が必要になる。 8bitモノラルで22.1kHzだとしても、加算が毎秒110K個、乗算が88K個必要になる。ここで加算は、精々110K個だから2~4MHzくらいの速度で動くCPUなら何とかなるのだが、問題は乗算の方である。 1978年に発表されたIntel 8086ですら、MUL(乗算)に要するCycle数は8bitで70~77cycleである(加算の方は8bitのReg→Regで3cycle)。だから仮に8086でこの5tapのFilter処理をやろうとすると、乗算と加算だけで毎秒7000Kcycle程必要になる。 つまり7MHz駆動で何とか間に合うかどうか。実際には入力を外部から受け取ったり、結果を外部に書き出す処理も入るから、10MHzでも間に合うかどうか、という辺りになる。 もっと言えば、加算にしても乗算にしても、整数演算だと不都合が多い。というのは特に掛け算のh(n)の方が、その係数というのが0.5とか0.03とか、小数になるのが普通なためだ。 もちろん方法はあって、例えば本来の数字の100倍(つまり係数は50とか3になる)で計算をして、最後に100で割るという方法は広く使われる(*)。 *:説明のために100倍とかにしたが、実際はこんな割り切りにくい数字ではなく、2のべき乗(例えば16とか)を使う。これだと乗除算がシフト演算で行えるので簡単かつ高速になる ただこの場合、今度は桁数が足りなくなりがちなので、データは8bitであっても内部演算は16bitとかにしないと精度が保てなくなり、そして16bit演算にするとさらに遅くなるという訳だ。 5 TapのFIRフィルタでこれである。もっとTap数を増やしたり、あるいはさらに複雑な処理(例:FFT)をやろうとしたら、絶対に処理性能が足りない。 そこで、こうした信号処理に向いたプロセッサを作ろう、という機運が1970年代後半から起こりはじめた。実を言えば、こうした処理を1970年代まではアナログ回路で実装している例が多かった。 今から思えばこれは一種のアナログコンピュータなのだが、これをデジタルに置き換えようとしたのがDSPという見方も出来るのではないかと思う。 さて、こういう用途に使うプロセッサとして最終的に出来上がったのは、 ・修正ハーバードアーキテクチャ:Program MemoryとData Memoryを分離し、異なるバスで接続することでデータアクセスの際のスループットを確保する ・命令そのものは加算と乗算を高速に行う事が主眼とされる。これをなるべく高いスループットで実行する事が求められる。また命令のLatencyそのものは大きくても許容されるが、Latencyが大きく変化することは許容されない。この結果、命令パイプラインはSuper ScalarやVLIW構成、あるいはSIMDエンジンを組み合わせたものとなる。Out-of-Orderは原則不可(Latencyが大きく変動する可能性があるため) ・継続して同じ処理が繰り返されることが想定される。逆に言えば、様々な処理に向けて分岐が入るような処理はそもそもDSP向けで無い。このため、繰り返し処理を切れ目なく行うための、Zero-overhead Loop機構が実装されることが多い ・バッファに利用するメモリアドレスが通常のリニアのままだと、それを繰り返し利用する場合に「アクセスするアドレスを元に戻す」作業が入る。これを避けるために、Circular Buffer、あるいはCircular Addressの仕組みが用意される ・Data Memoryの方は、外部からのデータ入力の書き込みを行いながら、そのデータを演算部で読み出すという形で同時にアクセスが発生することになる。その際にここがボトルネックにならないように、Dual Port RAMを実装するか、あるいは外部からのデータ書き込みと、演算部からの読み出しでバンクを分けるDouble Bufferingをハードウェアで実装するなどの工夫が施される といった、通常のCPUとはまるで異なる特徴を持つものになった。 ちなみにここの説明は非常にざっくりしたものであり、実際はもう少し細かい話も色々あるのだが、別に本稿はDSPの原理を説明したい訳ではないので割愛する。 興味ある方は、Analog DevicesのAnalog Dialogue「なぜDSPを使うのか」が判りやすいと思うので、こちらをお勧めする(ちなみにPart 4まである)。
【関連記事】
- DSPになりきれなかった、アナログ・デジタル・プロセッサという異物「Intel 2920」(人知れず消えていったマイナーCPUを語ろう 第15回)
- 人知れず消えていったマイナーCPUを語ろう(第8回):並列CGレンダリングの夢を抱かせたINMOS Transputer
- 知名度はないが最も高性能だった1bit MCU、Motorola MC14500(人知れず消えていったマイナーCPUを語ろう 第14回)
- DSP登場までは超高速を誇ったSMS300/8X300(人知れず消えていったマイナーCPUを語ろう 第13回)
- 3年間の開発凍結がなければIntelと勝負できたかもしれないSignetics 2650(人知れず消えていったマイナーCPUを語ろう 第12回)