マルチスレッドとマルチコア – プログラミング – Home

マルチスレッドとマルチコア
 
通知
すべてクリア

[解決済] マルチスレッドとマルチコア


AKIRA
 AKIRA
(@AKIRA)
ゲスト
結合: 23年前
投稿: 7
Topic starter  

お世話になっております。

現在、VS 2005 C++/MFCで開発を行っています。

Windowsでは「_beginthreadex()」などの関数を使用してマルチスレッド処理を
作成することができますが、この方法で作成した複数のスレッドは
マルチコアのCPUで実行した場合に自動的に別々のコアに振り分けられる
のでしょうか?
それとも同じコアで処理されているのでしょうか?

せっかく複数のスレッドを作成しても、それらが1つのコアで処理されている
としたら、マルチコアの真の性能を引き出せていないことになります。
マルチコアの性能を引き出すためには、OpenMPなどの専用のライブラリ(?)などを
使用する必要があるのでしょうか?

また、素朴な疑問なのですが、マルチコアCPUの場合には、
1つのコアでワープロソフトを使用中に、別のコアで円周率を永遠と
計算させていても、ワープロのパフォーマンスにはまったく影響を
与えない、と考えていいのでしょうか?


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

Win32SDKのSetThreadAffinityMask()などを使って明示的に割り当てない限り、
スレッドが実行されるコアを指定することはできません。CPUは開始された
スレッドを「何らかの理屈により」「どれかの論理コア」に割り当てるでしょう。

>1つのコアでワープロソフトを使用中に、別のコアで円周率を永遠と
>計算させていても、ワープロのパフォーマンスにはまったく影響を
>与えない、と考えていいのでしょうか?

当然影響があります。根拠としては、マルチコアCPUであっても

1.メモリー用のバスは1系統しかないので、全ての論理コアが
  これを使用する。

ですよね。円周率スレッドの全てがキャッシュに乗っている場合でも、

2.ワープロのどれかのスレッドが円周率スレッドの論理コアを使うの
  を禁止できない。

ので、必ず影響はあると考えるべきではないでしょうか。


返信引用
AKIRA
 AKIRA
(@AKIRA)
ゲスト
結合: 23年前
投稿: 7
Topic starter  

アドバイスありがとうございました。

なるほど、そういうことだったのですね。
ということは普通にマスチスレッドでプログラミングをしているのなら、
あえてOpenMPなどを利用するメリットは少ないようですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました