[問題] OPENMP 寫入資料不同步
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
OpenMP
問題(Question):
使用OpenMP後資料寫入檔案有不同步的情形
程式碼(Code):(請善用置底文網頁, 記得排版)
因為程式碼有點長 大致上是如此
#pragma omp parallel for
for (int par=0;par<4;++par)
{
for (int ii=0;ii<1000;++ii)
{
ofstream REC
REC.open("file_(par)_(ii).txt.txt"); // par,ii 已轉成str
REC<<step_x<<" "<<step_y<<" "<<step_z<<" "<<step_time[0]<<" "<<trace<<"\n";
flush(REC);
while (n<10000)
{
很多計算
寫入檔案
REC<<xx<<" "<<yy<<" "<<zz<<" "<<step_time<<" "<<itrace[Reci]<<"\n";
flush(REC);
清理變數
}
REC.close();
}
}
使用的電腦是Due Core
所以每次寫入的檔案順序為
file_0_000.txt file_2_000.txt
.
.
.
file_0_999.txt file_2_999.txt
結果看起來很正常
但我發現在file_0_000的檔案尾端吃到了file_0_001的頭
(如此一來 若我要另外讀檔做處理時(matlab處理數據) 就會發生錯誤)
而且因為整個計算是在for loop 所以沒辦法用barrier
想請問該如何讓thread同步
雖然照理來說 OPENMP在for迴圈內應該都是有內建barrier在最後一行才是
感謝解答~
補充一下
這情形並沒有每次發生 感覺有點隨機
所以我才懷疑是不是有時候不同步
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 72.33.134.232
※ 編輯: xellosss 來自: 72.33.134.232 (02/16 01:39)
※ 編輯: xellosss 來自: 72.33.134.232 (02/16 01:39)
→
02/16 01:44, , 1F
02/16 01:44, 1F
→
02/16 01:49, , 2F
02/16 01:49, 2F
→
02/16 01:51, , 3F
02/16 01:51, 3F
→
02/16 01:52, , 4F
02/16 01:52, 4F
→
02/16 01:53, , 5F
02/16 01:53, 5F
→
02/16 01:53, , 6F
02/16 01:53, 6F
→
02/16 02:03, , 7F
02/16 02:03, 7F
※ 編輯: xellosss 來自: 72.33.134.232 (02/16 02:09)
→
02/16 02:10, , 8F
02/16 02:10, 8F
→
02/16 02:11, , 9F
02/16 02:11, 9F
※ 編輯: xellosss 來自: 72.33.134.232 (02/16 02:13)
※ 編輯: xellosss 來自: 72.33.134.232 (02/16 02:14)
※ 編輯: xellosss 來自: 72.33.134.232 (02/16 02:23)
→
02/16 02:33, , 10F
02/16 02:33, 10F
→
02/16 02:52, , 11F
02/16 02:52, 11F
→
02/16 11:05, , 12F
02/16 11:05, 12F
→
02/16 12:55, , 13F
02/16 12:55, 13F
→
02/16 12:57, , 14F
02/16 12:57, 14F
→
02/16 12:58, , 15F
02/16 12:58, 15F
※ 編輯: xellosss 來自: 204.15.26.236 (02/16 12:59)
→
02/16 23:03, , 16F
02/16 23:03, 16F
→
02/16 23:05, , 17F
02/16 23:05, 17F
→
02/16 23:05, , 18F
02/16 23:05, 18F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章