gpt4 book ai didi

c++ - fread 在 OpenMP 线程中性能低下

转载 作者:太空狗 更新时间:2023-10-29 23:41:47 24 4
gpt4 key购买 nike

我使用 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,但效果并不大。

我做错了什么?不信读盘能这么慢……

最佳答案

I don't believe that the disk reading can be so slowly...

然后你最好开始相信。与 CPU 相比,磁盘非常慢。并行 I/O 通常仅在您从多个来源(如单独的磁盘或网络连接)读取时才有用。它可以很好地解决延迟问题,但不能解决带宽问题。

尝试以串行方式一次读取所有数据,然后在并行循环中处理它。

关于c++ - fread 在 OpenMP 线程中性能低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8121077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com