Este programa se bloquea con Illegal instruction: 4
en MacOSX León y ifort (ifort) 12.1.0 20111011accidente Programa para la gama copiar con ifort
program foo
real, pointer :: a(:,:), b(:,:)
allocate(a(5400, 5400))
allocate(b(5400, 3600))
a=1.0
b(:, 1:3600) = a(:, 1:3600)
print *, a
print *, b
deallocate(a)
deallocate(b)
end program
El mismo programa trabaja con gfortran. No veo ningún problema Algunas ideas ? Desenrollar la copia y realizar el ciclo explícito sobre las columnas funciona en ambos compiladores.
Tenga en cuenta que con asignable en lugar de puntero no tengo ningún problema.
El comportamiento es el mismo si la declaración está dentro de un módulo o no. confirmo el mismo comportamiento en ifort (ifort) 12.1.3 20120130.
Al parecer, no se presentan problemas con Linux y ifort 12.1.5
traté de aumentar el tamaño de la pila con las opciones siguientes que unen
ifort -Wl,-stack_size,0x40000000,-stack_addr,0xf0000000 test.f90
pero sigo recibiendo el mismo error. Aumentando ulimit -s al duro mismo problema.
Editar 2: Hice algunos más depuración y, aparentemente, el problema ocurre cuando la operación de matriz de corte y empalme
b(:, 1:3600) = a(:, 1:3600)
implica un valor sospechosamente cerca de 16 M de los datos.
Estoy comparando los códigos de operación producidos, pero si hay una forma de ver un código intermedio que sea más comunicativo, con mucho gusto lo agradecería.
También recibo "instrucciones ilegales" con ifort 12.1.1.246 en Mac Snow Leopard. Sugiero informar sobre el Fortran Forum de Intel o enviar un informe de error. Tal vez está arreglado en 12.1.5? –
Y lo consigo con ifort 12.0.3 en Mac Snow Leopard. Tal vez este error ha estado allí por un tiempo ... – EMiller
Aparentemente, el problema existe también en (algunos) cuadros de Linux: el código segfaults en CentOS 5.5 y ifort 12.1. –