[問題] 如何在OpenMP的迴圈之下,呼叫函數
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
c++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
如何在OpenMP的迴圈之下,呼叫函數
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <iostream>
#include <omp.h>
void vecadd(float *a, float *b, float *c, int n)
{
for(int k = 0; k < n; k++)
c[k] = a[k] + b[k];
}
int main()
{
int m, n;
m = 50; // 總回圈數
n = 500000; // 每一次傳進去函數的大小
float *a = new float[m*n];
float *b = new float[m*n];
float *c = new float[m*n];
int k;
#pragma omp parallel private(k)
for(k = 0; k < m; k++)
vecadd(&a[k*n], &b[k*n], &c[k*n], n);
delete [] a;
delete [] b;
delete [] c;
return 0;
補充說明(Supplement):
在上面這段程式中,我發現在紅色的部分,這樣的語法會導致每一個
thread都是在做同樣的事請,並沒有把vecadd這個函式分別分散給
其他threads來使用,請問是否在#pragma omp parallela之後要再加
上什麼?麻煩幫我看看了,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.202.71
※ 編輯: fball 來自: 140.116.202.71 (06/10 17:27)
※ 編輯: fball 來自: 140.116.202.71 (06/10 17:29)
※ 編輯: fball 來自: 140.116.202.71 (06/10 17:30)
※ 編輯: fball 來自: 140.116.202.71 (06/10 17:32)
※ 編輯: fball 來自: 140.116.202.71 (06/10 17:32)
※ 編輯: fball 來自: 140.116.202.71 (06/10 17:33)
※ 編輯: fball 來自: 140.116.202.71 (06/10 17:39)
※ 編輯: fball 來自: 140.116.202.71 (06/10 17:40)
→
06/10 18:16, , 1F
06/10 18:16, 1F
什麼意思?
要加在哪裡呢?
※ 編輯: fball 來自: 140.116.202.71 (06/10 19:18)
→
06/12 01:12, , 2F
06/12 01:12, 2F