富豪的アプローチ

id:suikan:20060505の続き
さて、「リソースをケチるな。よいプログラムにしろ」という富豪的プログラミング、あるいは富豪的アプローチですが、私の感覚ではこれは古典的DSPプログラミングの対極に位置します。
いにしえのDSPプログラミングではすべてを決定論的にするために、ありとあらゆる方策が取られました。

  • キャッシュはよくない。SRAMがよい。
  • 外部RAMが遅いなら、SRAMにオーバーレイしろ。
  • Cコンパイラはよくない。遅いし、そもそもバージョンによって速度がかわる。
  • オブジェクトごとに配置を制御しろ

うんざりですね。一部結構楽しいのは認めますが(笑)。これに対してTIが大きく舵を切ったのはC6000系からです。C6000系ではCコンパイラによってすべてがうまく行くので任せたほうがよいと盛んに喧伝されました。インターロック無しのアーキテクチャアセンブラじゃ手に負えないという面もあったと思いますが*1
一方、Analog DevicesはBlackfinで楽々プログラミングに舵を切ります。C++対応をTIより先に行い*2、VDKを218xを除くすべてのアーキテクチャにリリースし、コンポーネントアーキテクチャVCSEを発表しました*3
間違いなく、今後はいろいろなことが富豪的に処理されて、一番の要だけがカリカリにチューニングされるでしょう。しかし、ADIが本当にそれを完全に理解できているかと言うと…。
先日読んだblackfin.orgの投稿を紹介しましょう。

For instance, in order to create a device manager, you have to know how much memory is used by all the devices. You can't add device manager memory as you go, as you add devices. It seems that no matter how you slice it, the code which initializes the device manager has to be aware of all the devices that will be opened

これはSystem Services Libraryに対する愚痴です。わかりますわかります。何でいちいちAPIを呼ぶたびにメモリの塊を与えてあげないといけないんでしょうか。
「そんなもの、mallocで勝手に取れよ」
といいたくなるのが人情です。そして、ここまで読んでくださった方はお分かりのように、多分ADI内部でこれを設計した人はこういうのです。
「だって、そうしておけば細かいコントロールが効くだろう」
DSPプログラミングと富豪的アプローチ。手を組めば、いつかはすばらしい成果が出るだろうと私は信じています。

*1:アセンブリ言語による最適化済みサンプルを見ると、多くはインド風の名前が記されています。さすが哲学の国

*2:多分そうだと思う

*3:その後引っ込めました。残念。