Hello,
I'm trying to optimize some scientific code, where Fortran DLL is called from C#. When I compile my Fortran DLL in Release with /O1 option or below, it works fine, but when I compile the DLL with /O2 or higher, I have an error during the runtime, right at the line that calls Fortran DLL subroutine from C#:
"Attempted to read or write protected memory. This is often an indication that other memory is corrupt.".
So, following this thread, I found that the problem is in vectorization, i.e. when I disable it and build my DLL with /O2 and /Qvec-, it works fine.
Then I decided to find out, which loop is causing problems, so with vectorization enabled I used vectorization report (/Qvec-report1) that showed me, which loops were vectorized. So I started to put a directive !DEC$ NOVECTOR before each such loop, rebuild the code and see it if works or not. I expected that after disabling vectorization of some specific loop, the program will start to work without errors. However surprisingly I put NOVECTOR directive before each loop reported by Qvec-report, and the program still doesn't work!
So I have the situation where /Qvec-report1 shows nothing, i.e. no loops are vectorized, but the program is not in the same state as when disabling vectorization at all with /Qvec-. So I suspect that /Qvec do something else except vectorization of loops, can you please advice on that.
I'm using Intel(R) Visual Fortran Compiler XE 14.0.2.176 [IA-32] on Windows 7 x64.
Also, I have another question -what is the difference between /Qvec and /Qsimd options?