« ベジータ戦闘服 | トップページ | リダイレクト »

ポインタがなくなる日

最近のプロセッサユニットとゆーもんは並列化するのがかなり一般的になっているんだが(参考),アーキテクチャの特性が変わるとソフトウェアの特性も変わる.

DSP向けのプログラムを書いた事があるひとは知っていると思うけど,実は並列に演算を行うプロセッサに対してC言語でポインタを使いまくると処理が極端に遅くなることがある.
なぜ遅くなるかと言うと,ポインタを使うと演算の依存解析が極端に難しくなり,コンパイラがコードをうまく並行化してマッピングできないからである.
依存解析による並行化というのはたとえばこういうやつ

例)
x=a+b
y=a-b

この二行の演算は互いに依存性がない,つまり入れ換えても問題がないから並列に実行可能であることがわかる.依存関係のない演算をひとつのブロックとした場合,それらの中では好きなようにヒマしてるプロセッサに演算を割り当てることができる.
この依存関係というのは変数のライフタイム(値を保持すべき時間)から知ることができるが,ポインタを使うとライフタイムの追跡が極端に難しくなる.そのためプログラムの完全性を保つため並行化できるブロックが細かくなり,無駄なCPUの空き時間が増え結果として処理効率が低下するのである.

ちょっと前だとポインタを使った方が速い場合というのはよくあったが,今後はC言語でもポインタを極力減らすプログラミング作法が普及するのだろう.

« ベジータ戦闘服 | トップページ | リダイレクト »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/163977/3907005

この記事へのトラックバック一覧です: ポインタがなくなる日:

« ベジータ戦闘服 | トップページ | リダイレクト »