3

コードは数千行あるので貼り付けられませんが、関数フローは次のようになります。

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と、ランタイムで返されるのはまったくナンセンスであり、threadID16113312のような非常に大きなint値になります...それをはるかに超えていますNUM_THREADS.

Open MP (Intel ICC 13.0) で同様の問題を経験した人はいますか?

ところで、考えられるヒントは、しかし、私はとを別の DLL ライブラリでビルドし、これらの関数を と一緒にビルドする代わりに DLL から呼び出すように依頼するFunc_1と、すべて正常に動作します。Func_2main()main()

4

1 に答える 1

0

エクスポートに必要な数とは異なる数のスレッドを設定しようとしたときに、このエラーが発生しました。つまり、アプリケーションを開始する前に、

export OMP_NUM_THREADS  4

この場所のスレッド数が、omp_set_num_threads() で使用するものと異なるかどうかを確認してください。

お役に立てれば。

于 2013-03-13T23:01:16.307 に答える