[問題] 如何對多顆實體硬碟同時寫入?
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
minGW64 GCC 4.7.2
win 7 X64
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
OpenMP
問題(Question):
如何對多顆實體硬碟同時寫入?
/////////程式碼的想法///////////////
在程式碼(1)時程式碼是
資料計算完成-->寫第一筆資料-->寫第二筆資料-->寫第三筆資料-->結束main
在程式碼(2)時"希望"程式分別對三顆實體硬碟寫入
|--->寫第一筆資料--|
資料計算完成--+--->寫第二筆資料--+--->結束main
|--->寫第三筆資料--|
////////// 發現問題 ////////////////
但程式碼(2)實際跑的時間 "大於" 程式碼(1)實際跑的時間
很明顯在程式碼(2)沒有同時寫入
也是跟(1)一樣一筆一筆慢慢寫入
所以我想問:如何對多顆實體硬碟同時寫入?
程式碼(Code):
(1)原來的程式碼
/*寫入資料的函數*/
void WriteData(char*Path,double*buffer){
FILE *fPtr;
fPtr = fopen(d:\\1\\123.txt, "wb");
fwrite(buffer1,sizeof(double),FiM.n2,fPtr);
fclose(fPtr);
}
int main (void){
/*計算要寫入的東西*/
//開始寫入東西
WriteData(d:\\1\\123.txt,buffer1); // 對 d:\\1\\ 寫入第一筆資料
WriteData(d:\\2\\123.txt,buffer1); // 對 d:\\2\\ 寫入第二筆資料
WriteData(d:\\3\\123.txt,buffer1); // 對 d:\\3\\ 寫入第三筆資料
return 0;
}
(2)改成多顆同時寫入
d,e,f分別為不同顆的實體硬碟
int main (void){
/*計算要寫入的東西*/
//開始寫入東西
#pragma omp parallel sections{
#pragma omp section{
WriteData(d:\\1\\123.txt,buffer1); // 對 d:\\1\\ 寫入第一筆資料
}
#pragma omp section{
WriteData(e:\\2\\123.txt,buffer1); // 對 e:\\2\\ 寫入第二筆資料
}
#pragma omp section{
WriteData(f:\\3\\123.txt,buffer1); // 對 f:\\3\\ 寫入第三筆資料
}
}
return 0;
}
預期的正確結果(Expected Output):
程式碼(2)速度應快於程式碼(1)
錯誤結果(Wrong Output):
程式碼(1)較快
補充說明(Supplement):
執行緒有開出來
所以猜是 win7 system 寫檔的問題
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.63.132
→
10/30 10:10, , 1F
10/30 10:10, 1F
→
10/30 10:38, , 2F
10/30 10:38, 2F
→
10/30 10:50, , 3F
10/30 10:50, 3F
→
10/30 10:51, , 4F
10/30 10:51, 4F
→
10/30 10:53, , 5F
10/30 10:53, 5F
→
10/30 10:55, , 6F
10/30 10:55, 6F
→
10/30 10:57, , 7F
10/30 10:57, 7F
→
10/30 11:01, , 8F
10/30 11:01, 8F
→
10/30 11:01, , 9F
10/30 11:01, 9F
→
10/30 11:47, , 10F
10/30 11:47, 10F
→
10/30 11:49, , 11F
10/30 11:49, 11F
→
10/30 11:50, , 12F
10/30 11:50, 12F
→
10/30 11:52, , 13F
10/30 11:52, 13F
→
10/30 11:58, , 14F
10/30 11:58, 14F
→
10/30 11:59, , 15F
10/30 11:59, 15F
回Schottky: 程式2是多顆實體硬碟 程式1是單顆硬碟
多顆實體硬碟理論上是可以同時disk I/O的呀(還是我想錯了)
推
10/30 20:51, , 16F
10/30 20:51, 16F
→
10/30 20:52, , 17F
10/30 20:52, 17F
我是覺得沒有 平均30 IO/sec
所以我一直在想卡在哪裡
感覺會部卡在4k以下的小檔
(我程式中除三個1MB之外還有7個1KB的小檔寫入 本來想不是重點)
剛剛在網路上找到測試文
http://home.gamer.com.tw/creationDetail.php?sn=2037702
在4k時讀寫
一般硬碟約在 1.3~1.4 MB/sec (寫入平均)
我的程式約在 6MB/sec (4硬碟)
1 MB*3*17(每分鐘跑17組)/60 ~~ 0.85MB/sec
小檔處理速度:6-0.85=5.15 MB/sec
平均單硬碟: 5.15/4=1.2875 MB/sec (約在測試文的 95.37% 的效能)
所以是小檔處理的問題了嗎?
推
10/30 23:23, , 18F
10/30 23:23, 18F
→
10/30 23:24, , 19F
10/30 23:24, 19F
→
10/30 23:24, , 20F
10/30 23:24, 20F
→
10/30 23:54, , 21F
10/30 23:54, 21F
※ 編輯: wope 來自: 220.133.104.111 (10/31 08:46)
※ 編輯: wope 來自: 220.133.104.111 (10/31 10:09)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章