Chương trình này bị treo với Illegal instruction: 4
trên MacOSX Lion và ifort (IFORT) 12.1.0 20111011sụp đổ Chương trình cho mảng sao chép với 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
Chương trình cùng làm việc với gfortran. Tôi không thấy vấn đề gì cả. Bất kỳ ý tưởng? Việc hủy bỏ bản sao và thực hiện vòng lặp rõ ràng trên các cột hoạt động trong cả hai trình biên dịch.
Lưu ý rằng với phân bổ thay vì con trỏ, tôi không có vấn đề gì.
Hành vi là như nhau nếu tuyên bố nằm trong mô-đun hay không. tôi khẳng định hành vi tương tự trên ifort (IFORT) 12.1.3 20120130.
Rõ ràng, không có vấn đề xảy ra với Linux và ifort 12.1.5
tôi đã cố gắng để tăng kích thước ngăn xếp với các tùy chọn liên kết sau
ifort -Wl,-stack_size,0x40000000,-stack_addr,0xf0000000 test.f90
nhưng tôi vẫn gặp lỗi tương tự. Tăng ulimit -s lên cùng một vấn đề.
Chỉnh sửa 2: Tôi đã làm một số sửa lỗi hơn và rõ ràng các vấn đề xảy ra khi hoạt động mảng nối
b(:, 1:3600) = a(:, 1:3600)
liên quan đến một giá trị đáng ngờ gần 16 M của dữ liệu.
Tôi đang so sánh các mã được sản xuất, nhưng nếu có cách để xem biểu mẫu mã trung gian có tính giao tiếp cao hơn, tôi sẵn sàng đánh giá cao nó.
Tôi cũng nhận được "hướng dẫn bất hợp pháp" với ifort 12.1.1.246 trên Mac Snow Leopard. Tôi đề nghị báo cáo trên Diễn đàn Intel Fortran hoặc gửi báo cáo lỗi. Có lẽ nó được cố định trong 12.1.5? –
Và tôi nhận được nó với ifort 12.0.3 trên Mac Snow Leopard. Có lẽ lỗi này đã ở đó một chút ... – EMiller
Rõ ràng, vấn đề tồn tại trên (một số) hộp linux là tốt: mã segfaults trên CentOS 5.5 và ifort 12.1. –