[問題] openmp初心者問題

看板C_and_CPP作者 (DaYo)時間13年前 (2012/12/20 16:52), 編輯推噓4(409)
留言13則, 5人參與, 最新討論串1/3 (看更多)
我想請問一下 實在試了很久,只好上來問.. int test=0; #pragma omp parallel num_threads(2) { while(test <10){ printf("%d test:%d\n",omp_get_thread_num(),test); test++; } } 預期輸出 是兩個thread會輪流印出test的值 但結果卻是: 0 test:0 0 test:1 0 test:2 0 test:3 0 test:4 0 test:5 0 test:6 0 test:7 0 test:8 0 test:9 1 test:0 不曉得是缺了什麼設定呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.122.147 ※ 編輯: scott20144 來自: 140.118.122.147 (12/20 17:03)

12/20 17:08, , 1F
推~
12/20 17:08, 1F

12/20 20:32, , 2F
如果是openmpi我到曾經寫過,目前再老師上課的部份當助教XD
12/20 20:32, 2F

12/20 20:52, , 3F
本來就不會乖乖地輪流不是嗎@@
12/20 20:52, 3F

12/20 21:07, , 4F
對,敘述不夠好 不會輪流~但現在很明顯沒有並行的效果
12/20 21:07, 4F

12/20 21:27, , 5F
你是用VC嗎??若是的話記得在專案內容中->C/C++-內將/openmp
12/20 21:27, 5F

12/20 21:27, , 6F
選項由no改為yes
12/20 21:27, 6F

12/20 21:29, , 7F
現在的情況是你程式只有用一個cpu但是執行續有兩個
12/20 21:29, 7F

12/20 21:30, , 8F
你的目標應該是兩個cpu分別各自使用程式的執行序吧
12/20 21:30, 8F

12/20 21:49, , 9F
剛剛看過那個選項有選yes,目標跟c大說的一樣
12/20 21:49, 9F

12/20 21:59, , 10F
加入一行sleep(1)後兩個thread搶到修改test頻率變高了
12/20 21:59, 10F

12/20 22:04, , 11F
我覺得你這樣子寫會有mutex還是rasing的問題, 把int test
12/20 22:04, 11F

12/20 22:05, , 12F
放到pragma程式區塊中應該會快起來
12/20 22:05, 12F

12/20 22:05, , 13F
確保變數為兩個副本
12/20 22:05, 13F
文章代碼(AID): #1Gqj71WB (C_and_CPP)
文章代碼(AID): #1Gqj71WB (C_and_CPP)