
C言語でOpenMPを利用したとき、parallel構文内で、共有変数を宣言する方法はありますか?
OpenMPを利用して、スレッド並列にしたプログラムを書いています。
#pragma omp parallel
{
~~
~~
}
この、~~の部分で、大きく分けて二つの処理をしているので、関数に分けました。
#pragma omp parallel private( a, b, c, d, e, f, g, h, i, j )
{
func1( a, b, c, d, e, f, g, h );
func2( a, b, c, d, e, f, g, h, i, j );
}
このとき、2つ目の関数で共有変数を複数使う必要があります。
しかし、共有変数の数は多く、引数にするとかなりの数の引数になってしまいます。
そこで、できればfunc2()という関数の中で、スレッドで共有できるshared変数を宣言したいのですが、方法がわかりません。
どなたか、知っている方教えてください。
No.1
- 回答日時:
普通のCの書き方で問題ないはずです。
配列や構造体に共有変数をまとめてfunc2に参照渡しにすればどうしょうか。並列化区間のthreadの実行順序は不定ですので、共有変数に並列化区間で書き込む時は十分注意してください。
回答ありがとうございます。
その共有変数というのは複数の配列でして、かつfunc2内でしか使わない変数なのです。
なので、できればfunc2内でポインタを宣言し、
動的にメモリ確保して、func2内で解放したいのです。
もちろん、構造体にまとめればできるのは分かっていますが。。。すみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スタック破壊の上手な見つけ方...
-
入れ子になった構造体について
-
ピクチャボックス内の線を選択...
-
ヒープメモリの解放について
-
構造体配列の初期化について
-
DLLのマルチスレッドの動作につ...
-
ヒープ領域の限界値設定
-
LPWSTRのコピー
-
new と malloc によるメモリの...
-
配列の添え字の最大数とは?
-
C言語 mallocとfreeについて
-
mallocによる確保外の領域への参照
-
CStringからchar*への型変換に...
-
リッチテキストボックスの中身...
-
VBAのプログラムで、DIAG = 1# ...
-
NULLポインタが0でない処理系と...
-
C言語のintとcharの違いってな...
-
C言語 配列の長さの上限
-
C# Listを使わずに2次元配列の...
-
C言語のポインタに直接アドレス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
DLLのマルチスレッドの動作につ...
-
C++で、メンバもヒープに確保さ...
-
C++のnewで確保したメモリーの...
-
ヒープメモリの解放について
-
malloc呼び出し時のセグメンテ...
-
配列の添え字の最大数とは?
-
LoadLibraryでAccess Violation...
-
入れ子になった構造体について
-
Accessで、メモリを開放するタ...
-
VB.netでのwin32api呼び出し
-
DLLで同じメモリ領域を参照する...
-
デストラクタを呼びたい
-
win32APIのHeapAlloc()の使い方...
-
メモリ不足になってしまう。
-
C言語 mallocとfreeについて
-
ビットをローテートするプログ...
-
座標値を読み込んである領域に...
おすすめ情報