Dear all,
I got stuck with the following error,
forrtl: severe (174): SIGSEGV, segmentation fault occurred
Image PC Routine Line Source
a.out 00000000004A9F95 Unknown Unknown Unknown
a.out 00000000004A7BB7 Unknown Unknown Unknown
a.out 000000000045DF54 Unknown Unknown Unknown
a.out 000000000045DD66 Unknown Unknown Unknown
a.out 000000000041DB96 Unknown Unknown Unknown
a.out 0000000000421460 Unknown Unknown Unknown
libpthread.so.0 00002B5FF42A8100 Unknown Unknown Unknown
a.out 0000000000406D84 Unknown Unknown Unknown
a.out 000000000040FA83 Unknown Unknown Unknown
a.out 00000000004027FE Unknown Unknown Unknown
libc.so.6 00002B5FF44D6B15 Unknown Unknown Unknown
a.out 00000000004026E9 Unknown Unknown Unknown
I tried to follow the instruction here to solve it,
https://software.intel.com/en-us/articles/determining-root-cause-of-sigsegv-or-sigbus-errors
$ ifort -heap-arrays 256000000
$ ulimit -s unlimited
but none of the above methods worked.
Does anyone know how to deal with this?
Best regards,
Sean Lee
链接已复制
There is additional advice to still try in the cited article. As per Possible cause #3, add –g and –traceback compiler options and rerun. Those will help offer source file/line number information in the traceback you included in your post which should help identify the point of the failure and calling sequence in reaching that point. That information should offer insight about where in the program's source code you need to start investigating for out-of-bound references.
Review the details for the other Possible Causes #4 - #6 and try the –check bounds option mentioned #4. That may offer specific details about a particular array whose bounds were exceeded.
Hi,
Many thanks!
I checked the bounds and it seems to me that the bounds are OK.
$ ifort -O2 -check bounds -g
$ ifort -O2 -g -traceback
the same error occurred,
Image PC Routine Line Source
a.out 0000000000427DD9 Unknown Unknown Unknown
a.out 000000000043CA54 Unknown Unknown Unknown
a.out 000000000040305F Unknown Unknown Unknown
a.out 00000000004178A6 Unknown Unknown Unknown
a.out 00000000004027FE Unknown Unknown Unknown
libc.so.6 00007FCC85813B15 Unknown Unknown Unknown
a.out 00000000004026E9 Unknown Unknown Unknown
If I reduce the dimension of the largest array, it works. But I need the large array anyway.
The size of my array is 67000000*7
Kevin D (Intel) wrote:
There is additional advice to still try in the cited article. As per Possible cause #3, add –g and –traceback compiler options and rerun. Those will help offer source file/line number information in the traceback you included in your post which should help identify the point of the failure and calling sequence in reaching that point. That information should offer insight about where in the program's source code you need to start investigating for out-of-bound references.
Review the details for the other Possible Causes #4 - #6 and try the –check bounds option mentioned #4. That may offer specific details about a particular array whose bounds were exceeded.
There are no line numbers displayed in the traceback, which indicates that there are a number of source files that you need to recompile with -traceback and -g. In other words, delete the .o files from your previous compilations and rebuild. Even after you do that, you will not see line numbers in the traceback for routines that are in non-traceback-enabled libraries and for the Fortran RTL and MKL libraries.
Dear all,
Many thanks, the above issues are solved by
$ ifort -heap-arrays 256000000
$ ulimit -s unlimited
But I got stuck with another problem,
error #7983: The storage extent of the dummy argument exceeds that of the actual argument
I am using mpiifort to compile the code.
Best regards,
Xiangyu
You probably had some checking options turned on when you compiled one or more source files. Code such as
... real :: x(3),r, dummy ... call sub(x,3,r) ... call sub(dummy,-3,r) ... subroutine sub(x,n,r) dimension x(n) .. if(n > 0)then r=sum(x(1:n)) else r=x(-n) endif ...
may work fine without checking, but with checking turned on you may see error messages.
The dummy argument uses the size (array size) as specified within the subroutine (either fixed literal or by way of passed in integer).
The actual argument has the size as known by the caller.
Your caller is making a call using an array (actual argument) that is smaller than that used by the subroutine/function.
*** This may mean that the subroutine/function will be writing past the end of storage of the affected argument.
*** You have a bug that must be fixed
Do not assume everything is good should the program run with the error message suppressed. Errors tend to expose themselves at inopportune times.
Jim Dempsey
