Сбой программы при копировании массива с помощью ifort
Эта программа вылетает сIllegal instruction: 4
на MacOSX Lion и ifort (IFORT) 12.1.0 20111011
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
Эта же программа работает с Gfortran. Я не вижу никаких проблем. Есть идеи ? Развертывание копии и выполнение явного цикла над столбцами работает в обоих компиляторах.
Обратите внимание, что с указателем вместо указателя у меня нет проблем.
Поведение такое же, если оператор находится внутри модуля или нет. Я подтверждаю то же поведение на ifort (IFORT) 12.1.3 20120130.
Видимо, с Linux и ifort 12.1.5 проблем не возникает
Я попытался увеличить размер стека с помощью следующих ссылок
ifort -Wl,-stack_size,0x40000000,-stack_addr,0xf0000000 test.f90
но я все еще получаю ту же ошибку. Увеличение ulimit-s к той же самой проблеме.
Редактировать 2: я сделал еще несколько отладок, и, по-видимому, проблема возникает, когда операция соединения массива
b(:, 1:3600) = a(:, 1:3600)
включает в себя значение, подозрительно близкое к 16 М данных.
Я сравниваю полученные коды операций, но если есть способ увидеть промежуточную кодовую форму, которая является более коммуникативной, я с радостью это оценил бы.