OpenMPに詳しい方にお願い致します

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ミドリ

OpenMPに詳しい方にお願い致します

#1

投稿記事 by ミドリ » 15年前

こんにちは
早速ですが、
コンピューターに複数CPUとcoreがある場合、
Windows 7 (64bit)の環境で、Visual C++ と OpenMP を利用して

Q1. 某特定のthreadをある特定のCPU(または core)に指定することはできますか。

Q2. 特定のCPUまたはcoreがidle状態にあるかどうかを確認する方法は何ですか?

どうぞ宜しくお願い申し上げます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: OpenMPに詳しい方にお願い致します

#2

投稿記事 by softya(ソフト屋) » 15年前

すいません詳しくないのですが、コア数というか使用可能なプロセッサ数は下記関数で分かります。
「omp_get_num_procs (OpenMP)」
http://msdn.microsoft.com/ja-jp/library ... s.80).aspx

特定のコアにスレッドを割り当てる機能は無い様です。
同様に稼動しているスレッド数はわかりますが、
「omp_get_num_threads (OpenMP)」
http://msdn.microsoft.com/ja-jp/library ... S.80).aspx
どのコアが使われているかは分かりません。

ここら辺のローレベルの制御が出来ないのは、OpenMpの抽象化のコンセプトだからなのでは無いでしょうか?

OpenMPの関数の一覧。
http://msdn.microsoft.com/ja-jp/library ... 80%29.aspx
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

tosh

Re: OpenMPに詳しい方にお願い致します

#3

投稿記事 by tosh » 15年前

OpenMPは、その目的そのものが「独立性や競合などのチェックが要らないように」で作られたものなので
そういう用途には向かないんじゃないですかね。
せめてコア毎の論理IDが取れれば何とかなるんですけどなあ・・・

2.4 Processor Binding on Solaris
 http://download.oracle.com/docs/cd/E192 ... index.html
Control binding of threads to “processors”
 http://wikis.sun.com/download/attachmen ... zation.pdf

これらによれば「OpenMPでは」特定OS用に特定コンパイラでしかできません。
他のAPI、MPI等では何か方法があるかもしれません

インオーダーCPUなら、まさにそうした命令や仕様があるので
「まずは論理IDを取ってから」がセオリーなのですが、それにしても
どのIDがどこのコアであるか保証されていないこともあるため
例えば「ブロック図で見て左から二番目のコレ!」と明確に指定したい場合は
アセンブリ言語からのアプローチになると思いますね。

Poco
記事: 161
登録日時: 15年前

Re: OpenMPに詳しい方にお願い致します

#4

投稿記事 by Poco » 15年前

ミドリ さんが書きました:こんにちは

Q1. 某特定のthreadをある特定のCPU(または core)に指定することはできますか。

Q2. 特定のCPUまたはcoreがidle状態にあるかどうかを確認する方法は何ですか?
A1.SetThreadAffinityMask()が求めるWindows APIになると思います。

A2.分かりません。パフォーマンスモニタ系のWindows APIを調べてみてはどうでしょうか?

閉鎖

“C言語何でも質問掲示板” へ戻る