Lectura de la matriz en la variable privada usando OMP en Fortran (Iforte)
-
21-12-2019 - |
Pregunta
OK, estoy desesperado. Soy relativamente nuevo en OMP y estoy teniendo muchos problemas con una paralelización aparentemente simple en Fortran. El código a continuación es la parte más pequeña de un código mucho más grande que produce este tipo de error. Todo este fragmento de fragmento está destinado a hacerlo, se lee las filas de una matriz compleja bidimensional compartida (que aquí he llenado con números arbitrarios) en instancias paralelas de una matriz privada de una dimensión (para un procesamiento paralelo adicional en el código terminado).
Uso de IFORT, una vez que se ha ejecutado el bucle durante aproximadamente 3000 valores del iterador J, el programa se bloquea con el error:
* glibc detectado * ./run.sh: munmap_chunk (): Puntero no válido: 0x00002ac9b47ffde0 ***
GFORRAN Por otro lado no produce errores, sino que produce todas las salidas sin sentido en el programa completado, lo que me lleva a creer que hay un error que Gffforte no está recogiendo. Todo funciona como debería en serial.
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
Solución
De acuerdo, por lo que para cualquier persona que esté interesada: el problema parece haber sido que con mi versión de IFORT, los cannont asignan el tamaño de una variable privada fuera de la región paralela.Dividiendo el
$OMP PARALLEL DO
en
$OMP PARALLEL
y
$OMP DO
y asignando la matriz privada entre estas afirmaciones hice el truco.