Quantcast
Channel: Intel® Fortran Compiler
Viewing all articles
Browse latest Browse all 3270

What does /Qvec do except vectorizing loops?

$
0
0

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?

 


Viewing all articles
Browse latest Browse all 3270

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>