このプログラムはIllegal instruction: 4
MacOSXLionand ifort(IFORT)12.1.020111011でクラッシュします
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.320120130でも同じ動作を確認します。
どうやら、Linuxとifort12.1.5では問題は発生しません
次のリンクオプションを使用してスタックサイズを増やしてみました
ifort -Wl,-stack_size,0x40000000,-stack_addr,0xf0000000 test.f90
しかし、それでも同じエラーが発生します。ulimit-sを同じ問題に増やす。
編集2:もう少しデバッグを行いましたが、アレイのスプライシング操作時に問題が発生するようです
b(:, 1:3600) = a(:, 1:3600)
16Mのデータに疑わしいほど近い値が含まれます。
作成されたオペコードを比較していますが、よりコミュニケーションのとれた中間コード形式を見る方法があれば、喜んで感謝します。