- ベストアンサー
古いマルチスレッドプログラムはマルチコアに対応しているのか
Windows上での話という事でお願いいたします。 HTが出始めた頃の高級言語C++やDelphi等で作成した、マルチスレッドプログラムは、そのままでマルチコアに対応しているのでしょうか? 多くの記事やネット上の情報およびインテルのQuad coreのプロモーションを見る限り、プログラムがマルチスレッドならば、そのままマルチコアを有効に利用できるような事が書いてありますが、プログラミングにおいて、特別にマルチコアに対応するようなコードは必要ないのでしょうか? C#用のQuad Core対応といったようなライブラリもあり、特別な処理が必要なのではという雰囲気がただよっているのですが・・・。 (ライブラリのソースまで見れたわけではないので、実態がよくわからない) Quad Core対応のライブラリというのは、いったい何をしていると予想されますでしょうか。 4スレッドで動く事を前提に最適化されているだけなのでしょうか。 といった疑問なのですが、お暇がありましたら ご回答いただければ幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス >そのままでマルチコアに対応しているのでしょうか? ↑ 対応しているが最適に対応しているかはソフトによります。 >特別にマルチコアに対応するようなコードは必要ないのでしょうか? ↑ 処理によりマルチコアに見合うコードを書くことも必要でしょう。 >Quad Core対応のライブラリというのは、いったい何をしていると予想されますでしょうか。 >4スレッドで動く事を前提に最適化されているだけなのでしょうか。 ↑ こちらの推測ですが、最適化というよりは次の API 関数に対応したライブラリを 用意しましたよ。という意味ではないでしょうか。 GetProcessAffinityMask SetProcessAffinityMask GetThreadAffinityMask SetThreadAffinityMask >特別にマルチコアに対応するようなコードは必要ないのでしょうか? ↑ 必要な場合もある。 例えばある計算をした場合にマルチコア(4個)の場合、4つに均等に処理が割り振られます。 しかしプロセッサが切り替わるときにいろいろなデータなどの退避、復元などが起こります。 このプロセッサの切り替わりは OS が勝手に行いますが、1つのプロセッサにずっと処理を 任せたい場合は SetProcessAffinityMask、または SetThreadAffinityMask を使います。 これによりプロセッサが切り替わるときの無駄な処理を減らせる分だけ高速化します。 これがマルチコアに最適に対応したい場合です。 ・単純なマルチスレッド・プログラムでは、マルチコアでも動きますが上記のような事を 考えていない分だけ最適化されていません。 上記の API 関数が Windows NT4.0 以降でサポートされているため、 Windows 95/98/Me のマルチスレッド・プログラムではマルチコアで動きますが、 最適に対応しているかは処理によって分かりません。 でもマルチコアを有効に利用してくれるでしょう。
その他の回答 (1)
- rinkun
- ベストアンサー率44% (706/1571)
HTはそれ以前のマルチプロセッサと違って演算器を共有していたので特別なチューニングをしないと使い物にならないほど性能が劣化する場合もありましたが、マルチコアは演算器も独立だし特別なチューニングは必須ではないと思います。 ただコア間でキャッシュを共有しているならキャッシュに気を使わないと性能が劣化しますし、4CPUともなるとバス競合が大きくなってくるのでチューニングするならバス利用率も考慮する必要がありますね。 Quad Core対応ライブラリが具体的に何をしているかは分かりませんが、チューニングするなら上記のような点を考慮することになるでしょう。
お礼
お忙しいところありがとうございます。 そういえば、キャッシュに関しては何かの記事で読んだ事があります。 なるほど。 聞いてみるといいものですね。 大変参考になりました。
お礼
お忙しいところありがとうございます。 なるほど。プロセッサが切り替わる場合もあるんですね。 ライブラリにも上記のAPIはありました。 大変参考になりました。 今後どのあたりに重点を置いて調べればよいのか 明確になってきました。ありがとうございました。