Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Newer Fortran runs slower

blischke
Beginner
649 Views

I'm evaluating the MKL fortran library, to see if I get faster execution using the Lapack matrix routines in the library than Linpack routines compiled from source. I'm using the MKL evaluation license, and an evaluation version of the Intel Visual Fortran Compile. The Lapack routines do run faster than the Linpack routines when both are compiled using the new Fortran compiler. My previous compiler is version 9.0, and that actually runs faster using Linpack than using either Lapack or Linpack with the evaluation compiler.

I've tried both /o2 and /o3, I've tried setting Global Optimizations to Yes, I have Favor Fast Code, and I've tried specifying the processor. Are there any other settings I should be looking at? I don't know what the settings were on the 9.0 compiler.

The matrix sizes are about 3000 X 3000. For all cases I'm compiling on 32 bit windows XP, but compiling for (and running on) 64 bit windows XP.

It's not quite an apples to apples comparison, there have been some modifications to the code. The matrix factoring and matrix solution times are broken out separately, however, and those shouldn't have been affected by the changes. Unfortunately, I recently received an upgraded computer, and we can't find the Fortran 9.0 disk yet (still looking), so I can't recompile the code on the old compiler. I might be able to get the older source code version, and recompile that code on the new compiler for a more direct comparison.

0 Kudos
7 Replies
Steven_L_Intel1
Employee
649 Views

As I'm sure you'll understand, there is not enough information here to give a helpful answer. Have you tried analyzing the program with Intel VTune (you can get a trial of that) to see where it is spending its time? Might you have memory access issues such as cache misses? Have you tried the /Qx switch appropriate for your processor?

0 Kudos
blischke
Beginner
649 Views

I had been evaluating version 10, and one of my coworkers found http://www.intel.com/support/performancetools/sb/CS-009787.htm which told me which letter to use in the /Qx flag. Eventually we got a combination that worked well.

So we bought the latest version of Fortran, which is now version 11, and I just got it installed this morning, and the options for the compiler flags are all different. Is there a similar page that tells me which option to use for which processors for version 11? I know how to find out what processors the computers I'm targetting have, but I don't know how to translate that into what the "Use Intel Processor Extensions" description lines say.

I know two of the compilers were the Intel Xeon 5060 and the Xeon 5110, which had different suggested /Qx flags under version 10. We have other processors as well, so it would be nice to have an online source that listed the appropriate settings.

0 Kudos
Steven_L_Intel1
Employee
649 Views

Try /QxHost. That will optimize for the processor you compile on. This article lists the old-style switches but is still valid.

0 Kudos
blischke
Beginner
649 Views

Try /QxHost. That will optimize for the processor you compile on. This article lists the old-style switches but is still valid.

Well, that's the article I mentioned above. Also, I mistyped in my message. I should have wrote

"I know two of the computers being compiled for were the Intel Xeon 5060 and the Xeon 5110, ..."

My development computer is 32 bit, so I can't just use /QxHost. Will there eventually be an updated version of that article with the Version 11 flags listed?

0 Kudos
Steven_L_Intel1
Employee
649 Views

Yes, we will be updating the article. But you can use the options listed in that article in version 11.

0 Kudos
TimP
Honored Contributor III
649 Views

Try /QxHost. That will optimize for the processor you compile on. This article lists the old-style switches but is still valid.

/QxP is still available, both under the old name, and the new one (/QxSSE3), and would be the same as /QxHost on the older processor. There is so little difference in /QxSSSE3 that people have run the code for quite a while before noticing that it fails eventually on the older processor.

0 Kudos
blischke
Beginner
649 Views

OK, I think I get how to translate that page from the old flag style to the new one. Thanks.

0 Kudos
Reply