コードは数千行あるので貼り付けられませんが、関数フローは次のようになります。
void Func_1(double * x, int nx, NUM_THREADS)
{
omp_set_num_threads(NUM_THREADS);
//...
};
void Func_2(double *y, int ny, NUM_THREADS)
{
omp_set_num_threads(NUM_THREADS);
//...
#pragma omp parallel for
for (int i=0; i<N; ++i)
{
int threadID=omp_get_thread_num();
//...
};
};
int main (void)
{
//...
Func_1(x, nx, NUM_THREADS);
Func_2(y, ny, NUM_THREADS);
//...
};
したがって、基本的には2つの関数を取得し、それぞれが関数内でomp_set_num_threadsを呼び出します。問題は、プログラムをビルドするthreadID
と、ランタイムで返されるのはまったくナンセンスであり、threadID
16113312のような非常に大きなint値になります...それをはるかに超えていますNUM_THREADS
.
Open MP (Intel ICC 13.0) で同様の問題を経験した人はいますか?
ところで、考えられるヒントは、しかし、私はとを別の DLL ライブラリでビルドし、これらの関数を と一緒にビルドする代わりに DLL から呼び出すように依頼するFunc_1
と、すべて正常に動作します。Func_2
main()
main()