「失敗談を書く場所」 や 「プログラム部品化の失敗例」 で失敗談を書いてきましたが,ここでは信号処理に関する失敗談を 2 つ書きます.
voiscape (ヴォイスケープ) という音声メディアの研究で,DSP (ディジタル信号処理) が必要になりました. 特殊なプロセッサが必要だった 10 年まえとはちがって,いまでは,デモをしているかぎりでは汎用のマイクロプロセッサで十分まにあうようになりました. しかし,おおぜいで会議ができるようにしようとおもうと,なにかしかけが必要になります. そのために 2 つの 「わるあがき」 をした失敗談です.
第 1 は DSP に関するものです. しかけとしてよくつかわれているのは DSP (ディジタル信号プロセッサ) です. 浮動小数点機能をもち,オーディオでよくつかわれている DSP として Analog Devices の SHARC シリーズがあります. これをつかってみようというので,SHARC のモデルのひとつである Hammerhead SHARC を搭載した安価なボードのためのプログラムを開発しました. ややふるいモデルの SHARC を搭載したボードを使用したため,よほどくふうしないと汎用 CPU より高速にはなりません. 結局,プログラミングがおもいのほかむずかしく,挫折してしまいました. 現在では,このような開発工数をかけるよりは,ブレードサーバをつかうほうがよいのではないかとかんがえています.
第 2 は MMX に関するものです. DSP のための汎用 CPU としては Pentium 4 をつかっているので,MMX もためしてみました. たぶん C からつかえばよかったのですが,C++ (gnu) からインラインでつかうと,いろいろやってみても,結局 MMX をつかわない最高速のプログラムよりはやくはなりませんでした. やはり高速化はそんなにかんたんにはできない,しかも MMX による高速化はたいしたことはない,というわけで,これも結局あきらめました. (とはいえ,ほんとうに必要になれば,DSP 用のプログラム開発よりはずっと容易なので,これはもう一度やる価値があるとかんがえています.)