アカウント名:
パスワード:
今, 多くのプログラムがマルチ/メニーコアに対応していないのって, 問題をアルゴリズムに落とし込む際にシングルスレッドを前提とした形式にしてしまっていることがかなり多いと思うんですよ.
例えば, 離散したデータの個別処理, パイプライン的なデータ駆動型流れ作業, 結合則が適応可能な集計型の処理. そういった本質的に分散しやすい処理までひっくるめてループで表現しちゃっているところに問題があるのでしょう. スパコンのコンパイラなんかはコードから類推して並列化可能な部分を見つけ出しているわけですが, マルチ(問題)→シングル(アルゴリズム)→マルチ(実処理)の変換をしているわけですから, うまくいかないのもある意味当たり前. 丁度, プログラムの流れ制御をgotoだけで行っていたために流れ制御が破綻しかけ, それがgoto害悪論となったのと同様に, 複数対象への処理をループだけで行っているがために性能が生かせない, いわばループ害悪論ともいえるものが提唱できるのでしょう.
そういう意味では, FORTRAN90等での行列演算などはループを使わない言語機能の例だと思います. ただ, 汎用的な複数対象処理記述としてどんな物が必要になるのかは分かりません. そう考えると, 文法的には単なるリスト処理でadhocに機能を追加できるLISPなんかの方が, マルチ/メニーコア環境では効率的な環境になるのかもしれません.
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
最初のバージョンは常に打ち捨てられる。
発想が多分間違っている (スコア:1)
今, 多くのプログラムがマルチ/メニーコアに対応していないのって, 問題をアルゴリズムに落とし込む際にシングルスレッドを前提とした形式にしてしまっていることがかなり多いと思うんですよ.
例えば, 離散したデータの個別処理, パイプライン的なデータ駆動型流れ作業, 結合則が適応可能な集計型の処理. そういった本質的に分散しやすい処理までひっくるめてループで表現しちゃっているところに問題があるのでしょう. スパコンのコンパイラなんかはコードから類推して並列化可能な部分を見つけ出しているわけですが, マルチ(問題)→シングル(アルゴリズム)→マルチ(実処理)の変換をしているわけですから, うまくいかないのもある意味当たり前. 丁度, プログラムの流れ制御をgotoだけで行っていたために流れ制御が破綻しかけ, それがgoto害悪論となったのと同様に, 複数対象への処理をループだけで行っているがために性能が生かせない, いわばループ害悪論ともいえるものが提唱できるのでしょう.
そういう意味では, FORTRAN90等での行列演算などはループを使わない言語機能の例だと思います. ただ, 汎用的な複数対象処理記述としてどんな物が必要になるのかは分かりません. そう考えると, 文法的には単なるリスト処理でadhocに機能を追加できるLISPなんかの方が, マルチ/メニーコア環境では効率的な環境になるのかもしれません.