MPI записывает переменную во вложенных циклах в один файл

В настоящее время я пытаюсь найти эффективный способ распараллелить следующую структуру. Объем файла огромен, около 50 ГБ, и мне интересно, как можно увеличить скорость вычислений с помощью MPI или для таких случаев параллелизм не является эффективным способом из-за времени связи или барьера для ядер, так как я хочу записать данные с заказом. Спасибо за помощь.

for m = 1,120
    for n = 1,120
       for k = 1,120

          for i = 1,100

              f= x[k]*y[n]*z[m]

              for j = 1, 30000

                  data[j]= A[i,j]*f

          fwrite(fp,data)
          free(data)

person spinoza86    schedule 30.06.2015    source источник
comment
Так как размер файла 50Gb и в файл записано 120x120x120x30000 элементов, похоже, что data[j] имеет тип char. Если f также относится к типу char, это означает, что для массива data существует только 256 возможных значений. Как насчет вычисления этих значений и сохранения их в массиве 256x30000 (например, datap[256][30000])? Затем просто fwrite(fp,datap[f]);. Это сократит время вычислений на 100 без использования распараллеливания. Обратите внимание, что файл также можно сдуть, так как одна и та же строка будет появляться снова и снова... Просто сохраните f[120][120][120] и datap[256][30000] !   -  person francis    schedule 03.07.2015


Ответы (1)


Почему писать по порядку сложно? Оба ответа на этот вопрос дают способ сделать именно это:

Запись в файлы с помощью MPI

person Rob Latham    schedule 07.07.2015