Open KingCZE opened 1 week ago
Hi, yes the -ipo flag will make the link phase take some time, in the order of minutes. It should give a speedup of 5 to 10% depending on the case and system.
How are you trying to compile the code? Are you using mpiifort -fc=ifx or mpiifx (ifx compiled mpi library)? This might be related to the windows version of OneAPI.
Using OneAPI 2024.1 in linux I was able to compile FDS with these two options:
1. mpiifort -m64 -fc=ifx -O2 -ipo -no-wrap-margin -fpp ... 2. mpiifx -m64 -fc=ifx -O2 -ipo -no-wrap-margin -fpp ...
We are working on getting FDS to compile with ifx. There are still issues with ifx that need to be fixed upstream to be able to get our continuous integration migrated to it. Some of them are related to runtime checking debug flags, see below:
https://community.intel.com/t5/Intel-Fortran-Compiler/Errors-using-mpiifx-and-check-all-with-OneAPI-2024-1/td-p/1600662 Errors using mpiifx and -check all with OneAPI 2024.1https://community.intel.com/t5/Intel-Fortran-Compiler/Errors-using-mpiifx-and-check-all-with-OneAPI-2024-1/td-p/1600662 Hi, we've come across two errors compiling with mpiifx and -check all using the latest OneAPI 2024.1 Base and HPC toolkits. To reproduce these I have made a snippet code that essentially does a "Hello World" test with MPI calling some MPI routines. - First issue : comes trying to link the source to... community.intel.com
https://community.intel.com/t5/Intel-Fortran-Compiler/IFX-issue-when-building-check-all-or-check-uninit/td-p/1545825 [https://community.intel.com/t5/image/serverpage/image-id/49525i9D89CDCB7D371B64?v=v2&whitelist-exif-data=Orientation%2CResolution%2COriginalDefaultFinalSize%2CCopyright]https://community.intel.com/t5/Intel-Fortran-Compiler/IFX-issue-when-building-check-all-or-check-uninit/td-p/1545825 IFX issue when building -check all or -check uninithttps://community.intel.com/t5/Intel-Fortran-Compiler/IFX-issue-when-building-check-all-or-check-uninit/td-p/1545825 With the linux* version of ifx in the 2024.0.x release there is a known bug with the new LLVM Memory Sanitizer feature. This does not affect Windows users. A fix is coming in the 2024.1 Update Release. There are several workaround until that Update 1 release fixes the issue: Workaround: For now... community.intel.com
From: Patrik Král @.> Sent: Sunday, July 7, 2024 04:59 PM To: firemodels/fds @.> Cc: Subscribed @.***> Subject: [firemodels/fds] Intel Fortran Compiler Classic (ifort) deprecation by the end of 2024 and flag issue in ifx (Issue #13132)
Hello, As Intel Fortran Compiler Classic (ifort) is going to be deprecated by the end of 2024 (https://community.intel.com/t5/Blogs/Tech-Innovation/Tools/Deprecation-of-The-Intel-Fortran-Compiler-Classic-ifort/post/1541699), are you planning a transition to Intel Fortran Compiler (ifx)?
I managed to compile FDS in ifx; however, I encountered an issue with one of the compiler flags. /Qipo, calling -flto and -fuse-ld=lld, did not work in my case. It opened "lld-link.exe"; however, it ended up with the followng error message:
PLEASE submit a bug report to https://software.intel.com/en-us/support/priority-support and include the crash backtrace. Stack dump:
ifx: error #10401: error running 'link for host dependence gathering' make: *** [impi_intel_win_openmp] Error 1 Press any key to continue . . .
Somewhere, I found that I should use -fuse-ld=llvm-bin. This does not seem to be supported by ifx. When I compile FDS without -flto (or /Qipo), what performance impact does it have? Would you have a solution to this?
Overall, I find FDS compiled in ifx way faster, but this may be caused by the additional flags I used during compilation.
— Reply to this email directly, view it on GitHubhttps://github.com/firemodels/fds/issues/13132, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ABY23VMECSO6YLJZ4JGSGJDZLGT23AVCNFSM6AAAAABKPVGMAGVHI2DSMVQWIX3LMV43ASLTON2WKOZSGM4TIMRRHE2TCOI. You are receiving this because you are subscribed to this thread.Message ID: @.***>
I find it a bit easier to compile it for Linux (will do it too), but I did this for Windows. Just changed the compiler from ifort to ifx. (As far as I know, you don't specify mpiifx for windows in the FDS build? I know oneAPI has mpiifx.bat though.)
There were a few more issues I needed to solve for the compilation with ifx to run:
I needed to change this:
GITINFO=-fpp $(GITINFO_BASE) -DBUILDDATE_PP=\""$(BUILD_DATE)\""
to this (the quotes and it cannot start with a digit):
GITINFO=-fpp $(GITINFO_BASE) -DBUILDDATE_PP="\"d$(BUILD_DATE)\""
same for some other comment starting with a digit (I don't have my makefile with me now).
I needed to set rigid links in the following line code (I don't know why ifx had a problem with these links)
LFLAGSMKL_INTEL_OPENMP = "$(MKLLIBDIR)"\mkl_intel_lp64.lib "$(MKLLIBDIR)"\mkl_intel_thread.lib "$(MKLLIBDIR)"\mkl_core.lib "$(MKLLIBDIR)"\mkl_blacs_intelmpi_lp64.lib
Thanks for the information. To add to what Marcos said, we have been transitioning to ifx from ifort, but there have been several issues which have been reported to Intel. Not all have been resolved. A few are
All this being said, we will look at what you have done to see if these issues can be resolved.
I just compiled FDS successfully on our new linux cluster with oneAPI 2024.1. I did not modify the makefile at all. I am now testing on Windows.
My compilation on Windows with ifx failed with the same errors posted at the top of this thread. Now I recall that this is the bug that I reported to Intel, and they acknowledged it as a bug.
@KingCZE can you explain what you mean here
I needed to set rigid links in the following line code (I don't know why ifx had a problem with these links)
LFLAGSMKL_INTEL_OPENMP = "$(MKLLIBDIR)"\mkl_intel_lp64.lib "$(MKLLIBDIR)"\mkl_intel_thread.lib "$(MKLLIBDIR)"\mkl_core.lib "$(MKLLIBDIR)"\mkl_blacs_intelmpi_lp64.lib
Hello, As Intel Fortran Compiler Classic (ifort) is going to be deprecated by the end of 2024 (https://community.intel.com/t5/Blogs/Tech-Innovation/Tools/Deprecation-of-The-Intel-Fortran-Compiler-Classic-ifort/post/1541699), are you planning a transition to Intel Fortran Compiler (ifx)?
I managed to compile FDS in ifx; however, I encountered an issue with one of the compiler flags.
/Qipo
, calling-flto
and-fuse-ld=lld
, did not work in my case. It opened "lld-link.exe"; however, it ended up with the followng error message:Somewhere, I found that I should use
-fuse-ld=llvm-bin
. This does not seem to be supported by ifx. When I compile FDS without-flto
(or/Qipo
), what performance impact does it have? Would you have a solution to this?Overall, I find FDS compiled in ifx (even without
/Qipo
) way faster, but this may be caused by the additional flags I used during compilation.