[問題] 如何在OpenMP的迴圈之下,呼叫函數

看板C_and_CPP作者 (純情小處男)時間11年前 (2013/06/10 17:27), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/1
開發平台(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
parallel for?
06/10 18:16, 1F
什麼意思? 要加在哪裡呢? ※ 編輯: fball 來自: 140.116.202.71 (06/10 19:18)

06/12 01:12, , 2F
#pragma omp parallel for private(k)
06/12 01:12, 2F
文章代碼(AID): #1HjPlpVk (C_and_CPP)