2015-02-08 88 views
0

每次嘗試打印出threadID時,無論我在哪裏放置打印語句,它總是打印threadId = 0。它看起來像只有一個線程正在創建,但爲什麼?我不明白我做錯了什麼。另外,我檢查了並且num_t = 16。編譯時我也確保使用-fopenmp使用openmp創建多個線程

omp_set_num_threads(num_t); 
#pragma omp parallel shared(a,b,c) private(i,j,k) num_threads(num_t) 
{ 

    #pragma omp for schedule(static) 
    for (int i = 0; i < m; i++) 
    { 
     std::cout << omp_get_thread_num()<< "\n"; 
     for (int j = 0; (j < n); j++) 
     { 
      c[i + j*m] = 0.0; 
      for (int k = 0; k < q; k++) 
      { 
       c[i+j*m] += a[i*q + k]*b[j*q + k]; 
      } 
     } 
    } 
} 
+0

你看過編譯器的警告(例如'-Wall')嗎?你的編譯指示被忽略了嗎?爲什麼在編譯指示('\#pragma')之前有反斜槓? 'm'的大小是多少? – 2015-02-09 07:41:26

回答

0

先行先試,我推薦你使用這樣的:

#pragma omp parallel for private(...) shared(...) schedule(...) num_threads (X) 

其中「X」是要創建的線程數。從理論上講,前一行必須和你有相似的效果,但是C++有時候會很挑剔(特別是「parallel」子句)

順便說一句,也許不是你的情況,但要小心使用「文本鍵」 }。根據是否將OpenMP添加到代碼塊,OpenMP的功能可能會有所不同。

+0

你是什麼意思的「文本鍵」。額外的括號在那裏,因爲這是在一個函數內。所以在括號外還有一些其他的。 – user678392 2015-02-09 23:04:43