В моем цикле каждый поток имеет свой собственный файл для записи, и после завершения цикла мастер-процесс собирает все фрагменты в один большой файл, поэтому это не проблема.
#openmp parallel
{
FILE *foutput;
foutput = fopen(...)
i_min = ... //I manually and equally share index 'i' between OpenMP threads
i_max = ...
for (i = i_min; i < i_max; ++i)
for (j = 0; j < 255; ++j)
for (k = 0; k < 255; ++k) {
double value = some_function(i, j, k, var1, var2, var3);
fprintf(foutput, "%lf\n", value);
}
fclose(foutput);
}
'some_function' использует переменные 'var1, var2, var3', которые имеют размер (10 МБ) и которые были определены ранее в мастер-процессе.Дело в том, что «some_function» только читает переменных, но ничего не меняет!
Так что этот код работает очень медленно, и я не понимаю, почему.Чтение общих переменных для потоков openmp вполне нормально и не дает ложного совместного использования;может быть, это fprintf, который делает все так медленно, и я должен использовать двоичные файлы для записи по блокам?