質問: 古いマルチスレッドプログラムはマルチコアに対応しているのか windows上での話という事でお願いいたします。 htが出始めた頃の高級言語c++やdelphi等で作成した、マルチスレッドプログラムは、そのままでマルチコアに対応しているのでしょうか? 多くの記事やネット上の情報およびインテルのquad coreのプロモーションを見る限り、プログラムがマルチスレッドならば、そのままマルチコアを有効に利用できるような事が書いてありますが、プログラミングにおいて、特別にマルチコアに対応するようなコードは必要ないのでしょうか? c#用のquad core対応といったようなライブラリもあり、特別な処理が必要なのではという雰囲気がただよっているのですが・・・。 (ライブラリのソースまで見れたわけではないので、実態がよくわからない) quad core対応のライブラリというのは、いったい何をしていると予想されますでしょうか。 4スレッドで動く事を前提に最適化されているだけなのでしょうか。 といった疑問なのですが、お暇がありましたら ご回答いただければ幸いです。
回答: ★アドバイス >そのままでマルチコアに対応しているのでしょうか? ↑ 対応しているが最適に対応しているかはソフトによります。 >特別にマルチコアに対応するようなコードは必要ないのでしょうか? ↑ 処理によりマルチコアに見合うコードを書くことも必要でしょう。 >quad core対応のライブラリというのは、いったい何をしていると予想されますでしょうか。 >4スレッドで動く事を前提に最適化されているだけなのでしょうか。 ↑ こちらの推測ですが、最適化というよりは次の api 関数に対応したライブラリを 用意しましたよ。という意味ではないでしょうか。 getprocessaffinitymask setprocessaffinitymask getthreadaffinitymask setthreadaffinitymask >特別にマルチコアに対応するようなコードは必要ないのでしょうか? ↑ 必要な場合もある。 例えばある計算をした場合にマルチコア(4個)の場合、4つに均等に処理が割り振られます。 しかしプロセッサが切り替わるときにいろいろなデータなどの退避、復元などが起こります。 このプロセッサの切り替わりは os が勝手に行いますが、1つのプロセッサにずっと処理を 任せたい場合は setprocessaffinitymask、または setthreadaffinitymask を使います。 これによりプロセッサが切り替わるときの無駄な処理を減らせる分だけ高速化します。 これがマルチコアに最適に対応したい場合です。 ・単純なマルチスレッド・プログラムでは、マルチコアでも動きますが上記のような事を 考えていない分だけ最適化されていません。 上記の api 関数が windows nt4.0 以降でサポートされているため、 windows 95/98/me のマルチスレッド・プログラムではマルチコアで動きますが、 最適に対応しているかは処理によって分かりません。 でもマルチコアを有効に利用してくれるでしょう。 参考url:http://msdn.microsoft.com/ja-jp/library/cc429021.aspx