High Performance Fortran (HPF) без директив? - PullRequest
1 голос
/ 25 июля 2011

В High Performance Fortran (HPF) я мог бы указать распределение массивов, участвующих в параллельном вычислении, используя директиву DISTRIBUTE.Например, следующая минимальная подпрограмма будет суммировать два массива параллельно:

subroutine mysum(x,y,z)
  integer, intent(in)  :: y(10000), z(10000)
  integer, intent(out) :: x(10000), 
  !HPF$ DISTRIBUTE x(BLOCK), y(BLOCK), z(BLOCK)
  x = y + z
end subroutine mysum

Мой вопрос: необходима ли директива DISTRIBUTE ?Я знаю, что на практике это не представляет большого интереса, но мне любопытно, может ли неукрашенная, не директивная программа на Фортране быть действительной программой HPF?

1 Ответ

2 голосов
/ 25 июля 2011

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

Этого можно достичь неявным образом, используя операторы FORALL вместо циклов DO, где это применимо.Первоначально циклы DO давали бы явный порядок работы с элементами массива, тогда как FORALL позволял бы процессору определять оптимальный порядок во время выполнения.Я не думаю, что в настоящее время это имеет большое значение, потому что современные компиляторы могут оптимизировать / векторизовать / распараллелить циклы DO, где это возможно.Я не могу сказать наверняка о других компиляторах, но я помню, как использовал Intel Fortran Compiler для компиляции и запуска программы на 2 и 4 процессорах параллельно без использования DISTRIBUTE.

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

...