アカウント名:
パスワード:
C/C++は抽象度が低すぎるから勝手に並列化するのはかえって難しいんですよ。プログラマの「人間様である俺様がもっとも高速なプログラムを書けるんだ」信仰と、それを支えるC/C++にover optimizeされたハードウェアアーキテクチャのせいでいつまでたってもC/C++支配は終わりそうにありませんが。
手続き型言語は順次実行されるという概念が、並列化を妨げてる気がする。
例えば、C/C++っぽいものを使うにしても。・並列可能なブロックを二重波カッコで区切る・ブロック内で、上に記述されている処理が全て実行されるまで待機しなければならない場合、二重セミコロンをつけるとでもしたら、マシになったりしないかなぁ?
例えばint main(){ foo(); bar(); {{ hoge1();; hoge2();; hoge3(); }} ;; baz();}としたら、foo()とbar()と、{{hoge1(), hoge2(), hoge3()の順次実行}}を並列にして、その全てが終わるのを待ってからbaz()を実行する、といったように。
# スレッド分割、順序入れ替えを行うか行わないかはコンパイラ判断で。
手続き系言語で並列実行できるようにする場合のキモは「いかに確実かつ高パフォーマンスに処理をスレッドセーフにできるか」といった所じゃないかな。
簡単な記述で並列実行を指定できるようになっても、それだけじゃ美味しくないというか、その個々の処理間で並列処理のためのロックだとかそのあたりの問題の方がよっぽど大変というか。
スレッドセーフの自動化といっても安直にデータアクセス全部にロックが入るようではパフォーマンスの低下がひどいことになりそうだし。そのあたりをちゃんと解析して必要最小限なロックだけで済ませてくれるような処理をコンパイラがやってくれるならうれしいんですけどねぇ…
並列化をするかしないかはユーザに任せないつもりで書きましたが、自動ロックは考えていません。i++; i++; って書いたとき、iがどうなるかは未定義でいいと思います。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs
並列化 (スコア:1, すばらしい洞察)
効率的なのはもちろんだけど、あえて「ここは並列で!」なんて指示しなくても良きに計らってくれるくらいでないと、なかなか厳しいと思う。
#pragma omp parallelうねうね。
Re: (スコア:0)
C/C++は抽象度が低すぎるから勝手に並列化するのはかえって難しいんですよ。
プログラマの「人間様である俺様がもっとも高速なプログラムを書けるんだ」信仰と、それを支えるC/C++にover optimizeされたハードウェアアーキテクチャのせいでいつまでたってもC/C++支配は終わりそうにありませんが。
Re: (スコア:1)
手続き型言語は順次実行されるという概念が、並列化を妨げてる気がする。
例えば、C/C++っぽいものを使うにしても。
・並列可能なブロックを二重波カッコで区切る
・ブロック内で、上に記述されている処理が全て実行されるまで待機しなければならない場合、二重セミコロンをつける
とでもしたら、マシになったりしないかなぁ?
例えば
int main(){
foo();
bar();
{{
hoge1();;
hoge2();;
hoge3();
}}
;;
baz();
}
としたら、foo()とbar()と、{{hoge1(), hoge2(), hoge3()の順次実行}}を並列にして、その全てが終わるのを待ってからbaz()を実行する、といったように。
# スレッド分割、順序入れ替えを行うか行わないかはコンパイラ判断で。
1を聞いて0を知れ!
Re:並列化 (スコア:1)
手続き系言語で並列実行できるようにする場合のキモは「いかに確実かつ高パフォーマンスに処理をスレッドセーフにできるか」といった所じゃないかな。
簡単な記述で並列実行を指定できるようになっても、それだけじゃ美味しくないというか、
その個々の処理間で並列処理のためのロックだとかそのあたりの問題の方がよっぽど大変というか。
スレッドセーフの自動化といっても安直にデータアクセス全部にロックが入るようではパフォーマンスの低下がひどいことになりそうだし。
そのあたりをちゃんと解析して必要最小限なロックだけで済ませてくれるような処理をコンパイラがやってくれるならうれしいんですけどねぇ…
Re:並列化 (スコア:1)
並列化をするかしないかはユーザに任せないつもりで書きましたが、自動ロックは考えていません。
i++; i++; って書いたとき、iがどうなるかは未定義でいいと思います。
1を聞いて0を知れ!