Я использую 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();
}
Загрузка ЦП составляет всего от 0 до 5%.
Когда я вставляю вместо fread (& data [i] [0], sizeof (float), someSize, f) :
for (int j=0; j<data.size(); j++) {
data[i][j] = rand();
}
Загрузка ЦП увеличивается до 100%.
Я уже пытался использовать fstream и WinApi ReadFile, но это не дало большого эффекта.
Что я делаю не так? Я не верю, что чтение с диска может быть таким медленным ...