2015-04-09 2 views
0

Я новичок в OpenMP, и я пытаюсь парализовать уже существующий серийный код. Код имеет около 40000 строк, поэтому я не могу опубликовать его здесь.Реализация задач OpenMP в FORTRAN?

Я пытаюсь выполнить следующий код (в C) в FORTRAN:

my_pointer = listhead; 
#pragma omp parallel 
{ 
     #pragma omp single nowait 
     { 
     while(my_pointer) { 
     #pragma omp task firstprivate(my_pointer) 
     { 
     (void) do_independent_work (my_pointer); 
     } 
my_pointer = my_pointer->next ; 
} 
} // End of single - no implied barrier (nowait) 
} // End of parallel region - implied barrier 

В моем коде:

  • my_pointer = цзы;
  • listhead = z% first;
  • zi% kc (zi% np) представляет собой массив размера zi% np;
  • do_independent_work (my_pointer) = ALLOCATE (zi% kc (zi% np)) и инициализирует вектор 0;

Мой код выглядит следующим образом:

!$OMP PARALLEL 
     !$OMP SINGLE 
      DO WHILE(ASSOCIATED(zi)) 
       IF (zi%compt) THEN 
        !$OMP TASK 
         ALLOCATE(zi%kc(zi%np), STAT = AllocateStatus) 
         IF (AllocateStatus /= 0) STOP "*** zi%kc Allocate failed ***" 
         FORALL(i=1:zi%np) 
         zi%kc(i) = 0.0_SDP 
         END FORALL 
        !$OMP END TASK 
       ENDIF 
       zi => zi%next 
      ENDDO 
     !$OMP END SINGLE NOWAIT 
!$OMP END PARALLEL 

Проблема заключается в следующем: серийная версия этого кода работает без каких-либо проблем, в то время как параллельная версия я реализовал аварии по какой-то причине.

Я делаю что-то принципиально неправильно?

Кроме того, если я ставлю firstprivate (цзы) рядом с «$ OMP ЗАДАЧА!» Я получаю «Ошибка 1 ошибка # 7266:. Указатель F90 не допускается в OpenMP * FIRSTPRIVATE, LASTPRIVATE или п СОКРАЩЕНИЯ»

Я использую Parallel Studio XE 2011 с Visual Studio 2010.

+1

Не важно, но вместо 'FORALL (i = 1: zi% np) zi% kc (i) = 0.0_SDP END FORALL' вы можете сделать только 'zi% kc = 0'. –

+0

Вы правы, я его поменяю. Я по-прежнему аннулирую код, который мне дал. –

ответ

0

Fortran указатели были разрешены в OpenMP 3.1, вам необходимо обновить ваш компилятор (2011 стара).

+0

Хорошо, я позабочусь об этом. Вы рекомендуете какую-либо конкретную версию? –

+1

Последний. –

Смежные вопросы