2013-11-20 3 views
0

У меня есть следующий типа OpenMP сделать петлю в Fortran:OpenMP барьер не пускал сделать петлю

!$OMP PARALLEL PRIVATE(i,j) DEFAULT(SHARED) 
!$OMP DO 
     do i=1,5 
     do j=1,5 
      A(i,j)=i+j 
     enddo 
!$OMP BARRIER 
     enddo 
!$OMP END DO 
!$OMP END PARALLEL 

Я получаю нелегальную контекст ошибки барьера ... Есть ли другой способ положить какое-то барьер в конце внутренней петли? Благодарю.

ответ

3

Что вы пытаетесь достичь? Помещение барьера там, если бы оно было разрешено, означало бы, что вы хотите, чтобы все потоки остановились и подождали друг друга на итерации. Что бы вы хотели, если у вас меньшее количество потоков, чем 5? Разве это не обязательно тупик?

Что вы можете сделать, так это распараллелить только внутренний цикл, тогда вы получите подразумеваемый барьер. Или вы можете использовать предложение ordered, чтобы заставить какую-то важную часть итерации выполнить в правильном порядке в соответствии с порядком индексации.

Возможно, ваш реальный случай более сложный и имеет другую структуру, но тогда вам нужно отправить реальную проблему. В вашем примере нет никакого смысла в барьере.

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