2015-02-08 93 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