Island Life

< 性能へのアプローチ | 少し前から右手親指の付け根が痛んでて、 >

2010/06/28

アセンブラをぶっとばせ

http://twitter.com/vitroid/status/17262472219

開発者の生産性を上げるために新しい言語が創られる。速けりゃいいならアセンブラで書けばいい。 RT @osiire: これは私の周りの狭い世界では逆。 > "むしろ大部分のコードは今以上の性能を求められてると言えるんじゃなかろうか。" http://bit.ly/bDlkJS

「速さが欲しいならアセンブリで書けばいいじゃない」っていうのは、 ひとつ重要な条件を見落としてるよ。仕事で開発してるなら、 開発期間っていうのはコストだから、上限がある。 従って求められているのは、「所定の時間内で速いコードを書く」っていうこと。

最適化は時間内にどれだけ色々なアプローチで「実装→計測」のサイクルを 回せるかっていうのが決め手だが、アセンブリや低レベル言語で書いてる場合、 アプローチを切り替えるコストがばか高い。別のアルゴリズムを試したい 場合や、コードに影響を与えるパラメータを変えて実験したい場合 (簡単な例では、ループのunrollingをいくつ単位でやるか、とか) に手間がかかるからね。

だから、「開発者の生産性を上げる」ことを性能低下の免罪符にする 必要は無いんだ。むしろ、 性能を上げるためには開発者の生産性を上げることが必要なんだ。

言語/処理系設計上のトレードオフとして、開発者の自由度を上げると 処理系の負担が増えて性能が低下する、ということはある。例えばいつでも 動的にコードをすげ替えられる方が開発は楽だけれど、処理系は 静的に解析できる部分が減って最適化しにくくなる。 でもそここそが処理系作成者が頑張るべきところであって、 処理系作成者が開発者の生産性を上げることを性能低下の言い訳にするのはまずい。

あ、でも勘違いしないでね。「速ければ速いほどいい」って言ってるんじゃないよ。 「要求性能を満たしたい」って言ってるだけなんで、 言語/処理系のターゲットとしている領域で必要な性能が出てるなら それ以上頑張る必要はない。

ていうかさ。必要な性能を出せなかったらどんな言語を使おうが 意味無いよね。最初からそういう話をしているんだけどなあ。

★ ★ ★

あと、今でもとりたてて頑張らなくたって性能が出てるソフトウェアは たくさんあるだろう。それはそれで全然構わない。 けれどもちょっと考えてみて欲しい。今、使えているソフトウェアっていうのは、 今ある技術で「使える」性能に達しているものだ。だから 今あるソフトウェアの世界だけを見てたら、「性能は足りてるじゃん」と思えるだろう。 でもそれが世界の全てなのか? その世界の外側にも、書かれるべきソフトウェアがあるんじゃない?

Tag: Programming

Post a comment

Name: