Проблем: Имам някакъв код, който аз и няколко други пишехме, взех кода и го накарах да използва mpi и openmp със страхотни резултати (помага, че го изпълнявам на Blue Gene/Q).
Едно нещо, на което не съм фен, е, че сега не мога да компилирам кода без директивата -openmp, защото, за да постигна необходимото ускоряване, използвах редуциращи променливи. Пример:
!$OMP parallel do schedule(DYNAMIC, 4) reduction(min:min_val)
....
min_val = some_expression(i)
....
!$OMP end parallel do
result = sqrt(min_val)
Търся нещо като:
!$OMP if OMP:
!$OMP min_val = some_expression(i)
!$OMP else:
if ( min_val .gt. some_expression(i) ) min_val = some_expression(i)
!$OMP end else
Някой знае ли нещо подобно? Забележете, че без -openmp редовете !$OMP се игнорират и кодът работи нормално с правилния, ъъъъъ щото, отговор.
Благодаря,
(Да, това е FORTRAN код, но е почти идентичен с C и C++)
_Pragma
. Не съм сигурен дали съществува подобно решение за Fortran. - person Konrad Rudolph   schedule 15.01.2014