Pergunta

Ok, estou desesperado.Sou relativamente novo no OMP e estou tendo muitos problemas com uma paralelização aparentemente simples em Fortran.O código abaixo é a menor parte de um código muito maior que produz esse tipo de erro.Tudo o que esse trecho pretende fazer é ler as linhas de uma matriz complexa bidimensional compartilhada (que aqui preenchi com números arbitrários) em instâncias paralelas de uma matriz unidimensional privada (para processamento paralelo adicional no código finalizado).

Usando ifort, uma vez que o loop foi executado para aproximadamente 3.000 valores do iterador j, o programa trava com o erro:

*glibc detectado* ./run.sh:munmap_chunk():ponteiro inválido:0x00002ac9b47ffde0***

O gfortran, por outro lado, não produz erros, mas produz resultados sem sentido no programa concluído, o que me leva a acreditar que há um erro que o gfortran não está detectando.Tudo funciona como deveria em série.

PROGRAM partest
    implicit none

    INTERFACE
            INTEGER FUNCTION OMP_GET_THREAD_NUM()
            END FUNCTION
    END INTERFACE

    INTEGER :: i,j,npot,N,nproc
    COMPLEX *16, ALLOCATABLE :: temp_wv(:,:),tv(:)

    N=4096
    npot=140

    ALLOCATE(temp_wv(N,npot),tv(npot))
    print *, "assign random values to array"
    DO i=1,N
            DO j=1,npot
                    temp_wv(i,j)=exp(dcmplx(0,i+j))
            ENDDO
    ENDDO

    print *,"parallel region"

!$OMP PARALLEL DO &
!$OMP DEFAULT(NONE) &
!$OMP PRIVATE(tv,nproc) &
!$OMP SHARED(temp_wv,N,npot)
    DO j=1,N
            nproc=OMP_GET_THREAD_NUM()
            print*, "THREAD", nproc, "ITERATOR", j,N
            tv=temp_wv(j,:)
    ENDDO
!$OMP END PARALLEL DO
    print *, "DONE"
END PROGRAM partest
Foi útil?

Solução

Ok, então para quem estiver interessado:o problema parece ser que com a minha versão do ifort você não pode alocar o tamanho de uma variável privada fora da região paralela.Dividindo o

$OMP PARALLEL DO 

em

$OMP PARALLEL 

e

$OMP DO 

e alocar o array privado entre essas instruções resolveu o problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top