看板 Programming 關於我們 聯絡資訊
由於時間緊迫需用OpenMP平行運算的功能 剛接觸OpenMP大概兩天 對所有指令還不是很熟 建立兩個thread分別給兩個cpu運算 兩個thread分別算出a跟b 目前我只會用section做 第一個section是算出a 第二個section是算出b 然後停止平行的thread做c=a+b 然後結束main 大概如下 #include <omp.h> #include <stdio.h> double a=0,b=0,c,d; void cal_a(){ //to do code } void cal_b(){ //to do code } void cal_c(){ //to do code } using namespace std; int main(){ c=cal_c(); #pragma omp parallel sections { #pragma omp section{ cal_a(); } #pragma omp section{ cal_b(); } } d=a+b+c; } 做了一些程式測試後猜測 section應該是任意指定硬體中的兩個thread分別給cpu執行 目前的問題是 我不知道如何等兩個thread都執行過了才執行d=a+b+c; 導致有時候b還沒執行,就執行d=a+b+c 或a還沒執行,就執行d=a+b+c 懇請OpenMP方面的高手可以幫我解答一下 謝謝OTZ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.121.58
lucky17:把d=a+b+c;放在 omp parallel sections 外 218.168.1.13 12/19 22:03
lucky17:的話,應該就會等所有thread join後才做@@ 218.168.1.13 12/19 22:04
gilocustom:barrier?140.115.220.174 12/20 02:50
vul3u:lucky17說的沒錯 140.123.121.58 12/20 15:44
vul3u:原來是我之前不小心把d放在section裡 140.123.121.58 12/20 15:45