【发布时间】:2011-11-14 11:44:43
【问题描述】:
我使用 Intel Xeon x2(24 个内核)和 Windows Server 2008。
试图并行化我的 c++ 程序。模板代码在这里:
vector< string > files;
vector< vector< float > > data;
...
data.resize( files.size() );
#pragma omp parallel for
for (int i=0; i<files.size(); i++) { // Files count is about 3000
FILE *f = fopen(files[i].c_str(), "rb");
// every file is about 40 mb
data[i].resize(someSize);
fread(&data[i][0], sizeof(float), someSize, f);
fclose(f);
...
performCalculations();
}
CPU 使用率仅为 0 到 5%。
当我插入而不是 fread(&data[i][0], sizeof(float), someSize, f):
for (int j=0; j<data.size(); j++) {
data[i][j] = rand();
}
CPU 使用率增加到 100%。
我已经尝试过使用fstream和WinApi ReadFile,但效果不大。
我做错了什么?我不相信磁盘读取会这么慢...
【问题讨论】:
-
我的朋友给了我一个好建议:使用 ramdisk 存储文件。
-
3000 个 40 MB 的文件相当于 120 GB。即使不是特别大,这个数量的 RAM 也是相当大的。
标签: c++ performance file openmp