<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: A bug of ifort (IFORT) 2021.7.1 20221019 in Intel® Fortran Compiler</title>
    <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1435443#M163893</link>
    <description>&lt;P&gt;Intel Forum Admin: is this thread better suited for the Fortran forum since it appears a matter with IFORT product in HPC toolkit?&amp;nbsp; If so, can you please move it to&lt;/P&gt;
&lt;P&gt;&lt;A href="https://community.intel.com/t5/Intel-Fortran-Compiler/bd-p/fortran-compiler" target="_blank"&gt;https://community.intel.com/t5/Intel-Fortran-Compiler/bd-p/fortran-compiler&lt;/A&gt;&lt;/P&gt;</description>
    <pubDate>Sat, 03 Dec 2022 18:14:59 GMT</pubDate>
    <dc:creator>FortranFan</dc:creator>
    <dc:date>2022-12-03T18:14:59Z</dc:date>
    <item>
      <title>A bug of ifort (IFORT) 2021.7.1 20221019</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1435194#M163891</link>
      <description>&lt;P&gt;(Update: There is an &lt;A href="https://fortran-lang.discourse.group/t/strange-behavior-of-ifort/4846/18" target="_self"&gt;informative discussion on Fortran Discourse about this bug&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;Consider the following code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="fortran"&gt;! test.f90                                                                                                                           
program test                                                                                                                         
                                                                                                                                     
implicit none                                                                                                                                                                                                        
                                                                                                                                     
! Why these strange numbers? Because they come from a real project.                                                                  
real, parameter :: A(25) = &amp;amp;                                                                                                         
    &amp;amp; [1.2409463E+22, 2.8192031E+20, -4.4971432E+21, 1.1558917E+22, -4.7725394E+21, &amp;amp;                                                
    &amp;amp; 2.8192031E+20, 2.8192031E+20, -3.2276437E+21, -3.3936284E+21, 4.1412172E+21, &amp;amp;                                                 
    &amp;amp; -4.4971432E+21, -3.2276437E+21, -7.6997325E+20, -4.1627641E+21, -3.4729614E+20,&amp;amp;                                               
    &amp;amp; 1.1558917E+22, -3.3936284E+21, -4.1627641E+21, 2.5757004E+21, -2.4898961E+21, &amp;amp;                                                
    &amp;amp; -4.7725394E+21, 4.1412172E+21, -3.4729614E+20, -2.4898961E+21, 3.5042103E+21]                                                  
                                                                                                                                     
real :: S(5, 5)                                                                                                                      
                                                                                                                                     
S = reshape(A, [5, 5])                                                                                                               
                                                                                                                                     
! Is S symmetric?                                                                                                                    
write (*, *) all(abs(S - transpose(S)) &amp;lt;= 0)                                                                                         
                                                                                                                                     
! The numbers in S are horrible. Let's scale it.                                                                                     
S = S / maxval(abs(S))                                                                                                               
                                                                                                                                     
write (*, *) S                                                                                                                       
                                                                                                                                     
! Is S symmetric?                                                                                                                    
write (*, *) all(abs(S - transpose(S)) &amp;lt;= 0)                                                                                         
                                                                                                                                     
end program test&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is what happens on my computer.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="none"&gt;$ uname -a &amp;amp;&amp;amp; ifort --version 

Linux 5.15.0-53-generic #59-Ubuntu SMP Mon Oct 17 18:53:30 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

ifort (IFORT) 2021.7.1 20221019
Copyright (C) 1985-2022 Intel Corporation.  All rights reserved.

$ ifort test.f90 &amp;amp;&amp;amp; ./a.out 
 
T

  0.9999999      2.2718171E-02 -0.3623963      0.9314599     -0.3845887    
  2.2718171E-02  2.2718171E-02 -0.2600954     -0.2734710      0.3337145    
 -0.3623963     -0.2600954     -6.2047265E-02 -0.3354508     -2.7986396E-02
  0.9314599     -0.2734710     -0.3354508      0.2075594     -0.2006450    
 -0.3845887      0.3337145     -2.7986394E-02 -0.2006450      0.2823821    

 F&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note that S(3,5) /= S(5,3) after the scaling. This happens when ifort is invoked with -O, -O2, -O3, -O4, or -O5, but not -g, -O0, -O1, or -Ofast.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Is this expected? It seems like a bug to me.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 03 Dec 2022 10:13:35 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1435194#M163891</guid>
      <dc:creator>Zaikun</dc:creator>
      <dc:date>2022-12-03T10:13:35Z</dc:date>
    </item>
    <item>
      <title>Re: A bug of ifort (IFORT) 2021.7.1 20221019</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1435440#M163892</link>
      <description>&lt;P&gt;Dear Intel Team members,&lt;/P&gt;
&lt;P&gt;Here is a &lt;STRONG&gt;&lt;A href="https://fortran-lang.discourse.group/t/strange-behavior-of-ifort/4846/23?u=fortranfan" target="_self"&gt;comment&lt;/A&gt; &lt;/STRONG&gt;re: -fp:fast compiler option with IFORT versus other options at the Fortran DIscourse site that may be of interest here.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 03 Dec 2022 17:59:22 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1435440#M163892</guid>
      <dc:creator>FortranFan</dc:creator>
      <dc:date>2022-12-03T17:59:22Z</dc:date>
    </item>
    <item>
      <title>Re: A bug of ifort (IFORT) 2021.7.1 20221019</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1435443#M163893</link>
      <description>&lt;P&gt;Intel Forum Admin: is this thread better suited for the Fortran forum since it appears a matter with IFORT product in HPC toolkit?&amp;nbsp; If so, can you please move it to&lt;/P&gt;
&lt;P&gt;&lt;A href="https://community.intel.com/t5/Intel-Fortran-Compiler/bd-p/fortran-compiler" target="_blank"&gt;https://community.intel.com/t5/Intel-Fortran-Compiler/bd-p/fortran-compiler&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 03 Dec 2022 18:14:59 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1435443#M163893</guid>
      <dc:creator>FortranFan</dc:creator>
      <dc:date>2022-12-03T18:14:59Z</dc:date>
    </item>
    <item>
      <title>Re: A bug of ifort (IFORT) 2021.7.1 20221019</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1435871#M163898</link>
      <description>&lt;P&gt;I'm reading the discussion on Fortran Discourse.&amp;nbsp; &amp;nbsp;I will investigate.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ron&lt;/P&gt;</description>
      <pubDate>Mon, 05 Dec 2022 17:52:46 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1435871#M163898</guid>
      <dc:creator>Ron_Green</dc:creator>
      <dc:date>2022-12-05T17:52:46Z</dc:date>
    </item>
    <item>
      <title>Re:A bug of ifort (IFORT) 2021.7.1 20221019</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1435912#M163900</link>
      <description>&lt;P&gt;This is an interesting little example for many reasons.&amp;nbsp;Where to begin.&amp;nbsp;Let's start with some simple things&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;1. Intel compilers when invoked without an explicit -O option defaults to O2.&amp;nbsp;And Intel's O2 is aggressive.&lt;/P&gt;&lt;P&gt;2. Optimizations on most compilers come at the expense of precision.&amp;nbsp;You have to balance your needs for highest FP precision and performance.&lt;/P&gt;&lt;P&gt;3. Division, amongst other mathematical expressions and intrinsics, may be done differently depending on optimization level.&lt;/P&gt;&lt;P&gt;4. Every compiler does optimization differently.&amp;nbsp;Does not mean one is 'right' and the other 'wrong'.&amp;nbsp;Just different choices in balancing precision and speed.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Skip to the solution: For IFORT use&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;-prec-div&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;option to force precise divisions even under optimzation.&amp;nbsp;Read up on this option [HERE](&lt;A href="https://www.intel.com/content/www/us/en/develop/documentation/fortran-compiler-oneapi-dev-guide-and-reference/top/compiler-reference/compiler-options/floating-point-options/prec-div-qprec-div.html" target="_blank"&gt;https://www.intel.com/content/www/us/en/develop/documentation/fortran-compiler-oneapi-dev-guide-and-reference/top/compiler-reference/compiler-options/floating-point-options/prec-div-qprec-div.html&lt;/A&gt;).&amp;nbsp;-fp-model is a macro option that sets a number of different FP behaviors.&amp;nbsp;PRECISE triggers -prec-div amongst other behaviors.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;You can read on if you want more details.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;I'll start with #4.&amp;nbsp;As noted, IFX and IFORT behave differently with this example.&amp;nbsp;Our LLVM-based IFX&amp;nbsp;optimization is radically different than that employed with our legacy proprietary IFORT compiler.&amp;nbsp;You SHOULD expect possible FP differences between these 2 compilers under optimizations. Note in the documentation on -prec-div that this is only an option for IFORT.&amp;nbsp;Why?&amp;nbsp;LLVM FP behavior is different than on our Classic proprietary compiler.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;On point #1 above: When you encounter questions about 'what is the compiler doing?' there are easier ways than dumping assembly and reading that.&amp;nbsp;First, use&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;-dryrun&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;option.&amp;nbsp;This will show you all internal defines and options passed to the compiler.&amp;nbsp;It's quite helpful.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Next, with IFORT use the&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;-qopt-report=5&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;option and examine the .optrpt output.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;On Point # 3: Now doing this, and comparing the differences between -prec-div and not at O2 you can see the "Code gen" or code generator is different - difference in number of temporary values ("Locals").&amp;nbsp;This was a clear indicator that strategy used by the code generator for the division is quite different.&amp;nbsp;Again, read the -O2 and -prec-div options in the [Developer Guide](&lt;A href="https://www.intel.com/content/www/us/en/develop/documentation/fortran-compiler-oneapi-dev-guide-and-reference/top/compiler-reference/compiler-options/alphabetical-option-list.html" target="_blank"&gt;https://www.intel.com/content/www/us/en/develop/documentation/fortran-compiler-oneapi-dev-guide-and-reference/top/compiler-reference/compiler-options/alphabetical-option-list.html&lt;/A&gt;)&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;On point #1, O2 default.&amp;nbsp;Intel prioritizes performance by default "out of box", favoring that over numerical precision when you do not bother to add additional compiler options (if you don't give the compiler any -O options). This philosophy can and has been argued in the community.&amp;nbsp;Some ASSUME that without -O that you would get O0.&amp;nbsp;IFORT has been around for a lot of years and is widely adopted.&amp;nbsp;Where possible, we try to make IFX "out of the box" as close to behavior of IFORT as possible.&amp;nbsp;So no surprises for existing customers, O2 is default.&amp;nbsp;But if you are coming from FLang or gfortran then this default of O2&amp;nbsp;may be a surprise to you.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Thanks for showing us this example.&amp;nbsp;It was quite interesting.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;ron&lt;/P&gt;&lt;P&gt;#IAmIntel&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;BR /&gt;</description>
      <pubDate>Mon, 05 Dec 2022 19:48:07 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1435912#M163900</guid>
      <dc:creator>Ron_Green</dc:creator>
      <dc:date>2022-12-05T19:48:07Z</dc:date>
    </item>
    <item>
      <title>Re: A bug of ifort (IFORT) 2021.7.1 20221019</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1436109#M163908</link>
      <description>&lt;P&gt;&amp;gt;&amp;gt;&lt;SPAN&gt;Note in the documentation on -prec-div that this is only an option for IFORT.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Does this imply ifx uses the equivalent&amp;nbsp;precision as ifort with -prec-div? .OR. not?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;If not, is there a similar functioning option for ifx as -prec-div for ifort?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Jim Dempsey&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 06 Dec 2022 14:16:19 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1436109#M163908</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2022-12-06T14:16:19Z</dc:date>
    </item>
    <item>
      <title>Re:A bug of ifort (IFORT) 2021.7.1 20221019</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1436211#M163912</link>
      <description>&lt;P&gt;Posted this to Fortran Discourse &lt;A href="https://fortran-lang.discourse.group/t/strange-behavior-of-ifort/4846/47" target="_blank"&gt;https://fortran-lang.discourse.group/t/strange-behavior-of-ifort/4846/47&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;I have some insight into this issue.&amp;nbsp;The mathematics is actually reproducible.&amp;nbsp;The insight came from changing the data in the 5x5, and simplifying the scaling to a simple division.&amp;nbsp;Then using -qopt-report=5 and -S and examining the data in both hex and default float format&lt;/P&gt;&lt;P&gt;Here is my modified test&lt;/P&gt;&lt;P&gt;```&lt;/P&gt;&lt;P&gt;program test&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;implicit none&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;integer :: row , col&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;! Why these strange numbers? Because they come from a real project.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;real, parameter :: A(25) = &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;amp; [-3.4729614E+20, -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;amp; -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;amp; -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, -3.4729614E+20,&amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;amp; -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;amp; -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, -3.4729614E+20, -3.4729614E+20]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;real :: S(5, 5)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;S = reshape(A, [5, 5])&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;! The numbers in S are horrible. Let's scale it.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;!S = S / maxval(abs(S))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;do col=1,5&lt;/P&gt;&lt;P&gt;&amp;nbsp;do row=1,5&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;S(row,col) = S(row,col) / 1.2409463E+22&lt;/P&gt;&lt;P&gt;&amp;nbsp;end do&lt;/P&gt;&lt;P&gt;end do&lt;/P&gt;&lt;P&gt;write (*,*) "S after"&lt;/P&gt;&lt;P&gt;do row=1,5&lt;/P&gt;&lt;P&gt;&amp;nbsp;write(*,'(5(Z8,3x))') S(row,:)&lt;/P&gt;&lt;P&gt;end do&lt;/P&gt;&lt;P&gt;print *, ""&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;write (*, *) S&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;! Is S symmetric?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;write (*, *)'Is S symmetric?', all(abs(S - transpose(S)) &amp;lt;= 0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;end program test&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;```&lt;/P&gt;&lt;P&gt;Now just run a simple compilation&lt;/P&gt;&lt;P&gt;```&lt;/P&gt;&lt;P&gt;]$ ifort test3.f90&lt;/P&gt;&lt;P&gt;$ ./a.out&lt;/P&gt;&lt;P&gt;&amp;nbsp;S after&lt;/P&gt;&lt;P&gt;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&lt;/P&gt;&lt;P&gt;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&lt;/P&gt;&lt;P&gt;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&lt;/P&gt;&lt;P&gt;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&amp;nbsp;&amp;nbsp;BCE543B9&lt;/P&gt;&lt;P&gt;BCE543BA&amp;nbsp;&amp;nbsp;BCE543BA&amp;nbsp;&amp;nbsp;BCE543BA&amp;nbsp;&amp;nbsp;BCE543BA&amp;nbsp;&amp;nbsp;BCE543BA&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;-2.7986394E-02 -2.7986394E-02 -2.7986394E-02 -2.7986394E-02 -2.7986396E-02&lt;/P&gt;&lt;P&gt;&amp;nbsp;-2.7986394E-02 -2.7986394E-02 -2.7986394E-02 -2.7986394E-02 -2.7986396E-02&lt;/P&gt;&lt;P&gt;&amp;nbsp;-2.7986394E-02 -2.7986394E-02 -2.7986394E-02 -2.7986394E-02 -2.7986396E-02&lt;/P&gt;&lt;P&gt;&amp;nbsp;-2.7986394E-02 -2.7986394E-02 -2.7986394E-02 -2.7986394E-02 -2.7986396E-02&lt;/P&gt;&lt;P&gt;&amp;nbsp;-2.7986394E-02 -2.7986394E-02 -2.7986394E-02 -2.7986394E-02 -2.7986396E-02&lt;/P&gt;&lt;P&gt;&amp;nbsp;Is S symmetric? F&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;```&lt;/P&gt;&lt;P&gt;Do you see the pattern?&amp;nbsp;It is stochastic.&amp;nbsp;Not random.&lt;/P&gt;&lt;P&gt;Now, with inside knowledge I know that default, no -O option, gives us -O2 which vectorizes with SSE2, 128 bit registers. You can also verify this by using -dryrun:&lt;/P&gt;&lt;P&gt;```&lt;/P&gt;&lt;P&gt;$ ifort test3.f90 -dryrun |&amp;amp; grep -i sse&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;-D__SSE__ \&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;-D__SSE_MATH__ \&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;-D__SSE2__ \&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;-D__SSE2_MATH__ \&lt;/P&gt;&lt;P&gt;```&lt;/P&gt;&lt;P&gt;Here we are telling the backend it MAY use SSE2.&amp;nbsp;Not demanding, but suggesting to the backend.&amp;nbsp;You'll see the same define in the -prec-div case - but remember, it's a suggestion not a directive. It may use SSE2, that is all the define is doing.&amp;nbsp;the backend will see -prec-div and decide how to process the loop nest.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;How many 32bit data items in the XMM registers?&amp;nbsp;4.&amp;nbsp;&amp;nbsp;Go down the row, in memory order - see the pattern?&amp;nbsp;at optimization, we're packing 4 elements into an XMM register and doing vectorized math.&amp;nbsp;For the 5th element in each row we have a remainder that is not done in a packed vector register with vector instructions.&amp;nbsp;Repeat this for each column.&amp;nbsp;You can see this in the OPT REPORT.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here's our loop of interest:&lt;/P&gt;&lt;P&gt;```&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19 !S = S / maxval(abs(S))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20 do col=1,5&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&amp;nbsp;&amp;nbsp;do row=1,5&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&amp;nbsp;&amp;nbsp;S(row,col) = S(row,col) / 1.2409463E+22&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&amp;nbsp;&amp;nbsp;end do&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24 end do&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;```&lt;/P&gt;&lt;P&gt;and the opt-report on that loop&lt;/P&gt;&lt;P&gt;```&lt;/P&gt;&lt;P&gt;LOOP BEGIN at test3.f90(20,1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;remark #15542: loop was not vectorized: inner loop was already vectorized&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;LOOP BEGIN at test3.f90(21,3)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15389: vectorization support: reference s(row,col) has unaligned access&amp;nbsp;&amp;nbsp;[ test3.f90(22,4) ]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15389: vectorization support: reference s(row,col) has unaligned access&amp;nbsp;&amp;nbsp;[ test3.f90(22,4) ]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15381: vectorization support: unaligned access used inside loop body&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15305: vectorization support: vector length 4&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15309: vectorization support: normalized vectorization overhead 0.158&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15300: LOOP WAS VECTORIZED&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15450: unmasked unaligned unit stride loads: 1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15451: unmasked unaligned unit stride stores: 1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15475: --- begin vector cost summary ---&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15476: scalar cost: 30&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15477: vector cost: 9.500&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15478: estimated potential speedup: 2.020&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15486: divides: 1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #15488: --- end vector cost summary ---&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #25015: Estimate of max trip count of loop=1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;LOOP END&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;LOOP BEGIN at test3.f90(21,3)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;lt;Remainder loop for vectorization&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;remark #25436: completely unrolled by 1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;LOOP END&lt;/P&gt;&lt;P&gt;LOOP END&lt;/P&gt;&lt;P&gt;```&lt;/P&gt;&lt;P&gt;Reading this, lots of good stuff. It's vectorizing the inner loop, the 5 elements in a column. But of course the XMM registers process 128 bits or 4 elements.&amp;nbsp;So there is a leftover, which is done in differently that the other 4.&amp;nbsp;Note also that we didn't use -align array32byte and tag the loop as aligned, which might help efficiency here. but that is just an additional optimization we could do manually, not necessary for this discussion.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In the original example, element (3,5) is in a vector mode.&amp;nbsp;Element (5,3) is a remainder, not in a vector mode.&amp;nbsp;Examining the assembly with both cases with and without -prec-div you can see the vector mode, specifically this:&lt;/P&gt;&lt;P&gt;&amp;lt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rcpps&amp;nbsp;&amp;nbsp;&amp;nbsp;%xmm2, %xmm0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#22.4&lt;/P&gt;&lt;P&gt;which is a reciprocal vector instruction of lesser precision.&amp;nbsp;This is done for the first 4 elements.&amp;nbsp;The remainder is done with a div.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;lt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divss&amp;nbsp;&amp;nbsp;&amp;nbsp;%xmm1, %xmm3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#22.4&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;whereas the code with -prec-div uses div everywhere&lt;/P&gt;&lt;P&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;divps&amp;nbsp;&amp;nbsp;&amp;nbsp;%xmm1, %xmm2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#22.4&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;So - predictable, reproducible results.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Turning on prec-div OR you can also use -no-vec, same effect.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;BR /&gt;</description>
      <pubDate>Tue, 06 Dec 2022 20:01:01 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1436211#M163912</guid>
      <dc:creator>Ron_Green</dc:creator>
      <dc:date>2022-12-06T20:01:01Z</dc:date>
    </item>
    <item>
      <title>Re: Re:A bug of ifort (IFORT) 2021.7.1 20221019</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1436307#M163913</link>
      <description>&lt;P&gt;&lt;SPAN&gt;Thank you very much&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;for this wonderful explanation. Everything makes sense now. So the behavior is a side effect of optimization, not a bug.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 07 Dec 2022 01:39:31 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1436307#M163913</guid>
      <dc:creator>Zaikun</dc:creator>
      <dc:date>2022-12-07T01:39:31Z</dc:date>
    </item>
    <item>
      <title>Re: A bug of ifort (IFORT) 2021.7.1 20221019</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1436456#M163915</link>
      <description>&lt;P&gt;The combined FP operation and remainder FP operation was my expectation of what was happening, it is good to see that is confirmed now.&amp;nbsp; I guess the main point of note is that comparisons of real numbers to zero is not a robust way of coding and can bite back!&lt;/P&gt;</description>
      <pubDate>Wed, 07 Dec 2022 12:46:26 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/A-bug-of-ifort-IFORT-2021-7-1-20221019/m-p/1436456#M163915</guid>
      <dc:creator>andrew_4619</dc:creator>
      <dc:date>2022-12-07T12:46:26Z</dc:date>
    </item>
  </channel>
</rss>

