dポイントプレゼントキャンペーン実施中!

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変数を宣言したいのですが、方法がわかりません。

どなたか、知っている方教えてください。

A 回答 (11件中11~11件)

普通のCの書き方で問題ないはずです。

配列や構造体に共有変数をまとめてfunc2に参照渡しにすればどうしょうか。

並列化区間のthreadの実行順序は不定ですので、共有変数に並列化区間で書き込む時は十分注意してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
その共有変数というのは複数の配列でして、かつfunc2内でしか使わない変数なのです。
なので、できればfunc2内でポインタを宣言し、
動的にメモリ確保して、func2内で解放したいのです。
もちろん、構造体にまとめればできるのは分かっていますが。。。すみません。

お礼日時:2012/02/19 10:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!