OpenMP в тесной петле - PullRequest
       26

OpenMP в тесной петле

0 голосов
/ 09 октября 2018

В моем цикле каждый поток имеет свой собственный файл для записи, и после завершения цикла мастер-процесс собирает все фрагменты в один большой файл, поэтому это не проблема.

#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, который делает все так медленно, и я должен использовать двоичные файлы для записи по блокам?

...