スレッド内のOpenMP呼び出し – プログラミング – Home

スレッド内のOpenMP呼び出し
 
通知
すべてクリア

[解決済] スレッド内のOpenMP呼び出し


AR2
 AR2
(@ar2)
Estimable Member
結合: 5年前
投稿: 110
Topic starter  

 Visual Studio 2008 SP1を当てた状態で、C++よりOpenMPを使用した場合にトラブルに
遭遇しました。

 下記のコードで、ボタン1を押した場合、タスクマネージャのスレッド列で確認する
と数が増えてしまい、開放されていないのです。
 試しに、スレッド内部で呼び出さない形式のボタン2を用意してみましたが、こちら
はきちんと開放されていることが確認できました。

 スレッド内部でスレッドを生成するとは言え、OpenMPの処理は終了時の同期を取って
いるのでスレッドハンドルが開放されないと言うことが解せません。
 何かスレッドハンドルを開放する方法はあるでしょうか?
 宜しくお願いします。

UINT TestThread(LPVOID pParam)
{
int j = 0;
#pragma omp parallel for
for (int i = 0; i < 100000000; i++)
{
j = j*i;
}
return 0;
}

void OnBnClickedButton1()//ボタン1
{
AfxBeginThread(TestThread, NULL, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
}

void OnBnClickedButton2()//ボタン2
{
TestThread(NULL);
}


引用
トピックタグ
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

OpenMP使用時にスレッドが無尽蔵に増える問題
http://www.cycleof5th.com/tips/index.php?date=2008-07-29

これかな?


返信引用
AR2
 AR2
(@ar2)
Estimable Member
結合: 5年前
投稿: 110
Topic starter  

ありがとうございます。
原因と結果に納得が行きました。

今回はsectionsでタスク分けてしていましたので、スレッド数を決め打ちで対処しまし
た。
前述の例だと動的にコア数を検出するようにした方が良いようですね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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