Можно ли ускорить мой код на Фортране путем распараллеливания?

# #fortran #intel-fortran

Вопрос:

У меня есть вопрос о параллельных вычислениях. Я мало что знаю о параллельных вычислениях, мне просто пришла в голову идея, и я хотел бы обсудить ее практичность.

Я работаю над кодом Фортрана, и у меня много циклов выполнения. Например:

 do i=1,1000  *some calculations end do   

Ключевой момент находится внутри цикла, я выполняю некоторые вычисления таким образом, чтобы результат текущего цикла не влиял на следующий цикл (т. Е. Вычисления внутри цикла независимы, я могу получить результат для i=100 , не имея результата от i=99 ).

Я бы хотел, чтобы вместо того, чтобы ждать, пока одно ядро пройдет весь цикл, распределите эту задачу (выполнение цикла do) между ядрами и сделайте ее быстрее.

Для такого сценария могу ли я использовать параллельные вычисления для увеличения скорости? Я знаю, что в intel Fortran есть некоторые опции для оптимизации и параллельных вычислений, но достаточно ли выбрать эти опции? Или мне нужен какой-либо дополнительный код или подпрограмма для включения параллельных вычислений?

Комментарии:

1. Пожалуйста, сделайте заголовки вопросов, чтобы как-то раскрыть актуальную тему. В противном случае у каждого могли бы быть заголовки типа «Вопрос о коде Фортрана», которые абсолютно ничего не говорят. Кроме того, вам, вероятно, следует показать более актуальный код.

2. Пожалуйста, предоставьте более подробную информацию. Ваше описание слишком широкое. Многие такие коды можно распараллелить, некоторые-нет. Дьявол часто кроется в деталях. Я предполагаю, что вас интересует распараллеливание общей памяти (например, OpenMP). Для начала попробуйте выполнить автоматическое распараллеливание ( -parallel ). Доложите, что произошло.

3. Спасибо @VladimirF. Я полный нуб, извиняюсь за это. Я уже открыл опцию параллельного в VS (Fortran-gt;Оптимизация-gt;gt;Распараллеливание-gt;gt;gt; Qparallel), но также видел некоторые коды со следующим утверждением в начале циклов do gt;gt;gt; !$OMP PARALLEL DO .

4. Да, эти директивы являются OpenMP. Сначала вам следует прочитать какой-нибудь учебник. Мы не можем научить вас этому в ответе здесь. Мы можем ответить на вопросы о ваших конкретных сампках кода и усилиях по распараллеливанию.

5. Сначала попробуйте использовать автономные программы. Перейдем к более продвинутому материалу позже. Имейте в виду, что при распараллеливании исходного программного обеспечения и вашей библиотеки могут возникнуть несовместимости. Вы должны знать, что делает оригинальное программное обеспечение.