We are in the process of upgrading our builds to use the oneAPI classic C++ compiler in Visual Studio 2019.
Some of our projects have a large number of source files so we have in the past used the /MP option to compile multiple source files in parallel.
This option seems to have disappeared in VS2019 if we select the "Intel C++ Compiler 2021". If I manually added the option to the command line then I get an error about an unrecognised option.
If I start a "Intel oneAPI command prompt for VS2019" session and run the command
then I see
Intel(R) C++ Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.2.0 Build 20210228_000000
Copyright (C) 1985-2021 Intel Corporation. All rights reserved.
and eventually in the list of options under "Miscellaneous" I see
/MP[<n>] create multiple processes that can be used to compile large numbers
of source files at the same time
Use with /MP<n> to force the given <n> processes to be created
so it looks like the options exist but are not accessible when building using VS2019.
As you have mentioned that you have selected "Intel C++ Compiler 2021" in Visual Studio 2019.
Could you please confirm whether you are referring to icl or icx compiler?
Please let us know which compiler is being used to compile your project from the output window.
You can increase MSBuild project build output verbosity following the below path and check the compiler used in output from the build window.
Tools-->options-->Projects and Solutions-->Build and Run
icl is a classic Intel C/C++ Compiler, whereas icx is Intel nextgen compiler based on Clang /LLVM technology plus Intel proprietary optimizations and code generation.
If you are using icx compiler then/MP option is not available for windows. Please refer to the below link for more details
Thanks & Regards
it hasn't been my post, but I've got the same problem using icx (2021.4) on Windows.
Clang brings the following warning:
clang-cl: : warning : argument unused during compilation: '-MP'
and just one process is being used during compilation.
This is quite annoying because it makes my compilations about 20 times slower compared to icc.
For my projects currrently it is a no go to switch to icx due to that.
Do you have any plans to implement the /MP or multiple-processes switch within the next future?
Thanks and best regards
I think there is some confusion here when using Intel OneAPI compilers in Visual Studio 2019
- When using the "Classic" Intel Compilers ( showing as Intel C++ Compiler 19.2) /MP is available and visible in the options
- When using the "new" Intel LLVM (Clang) icx/icpx compiler ( showing as Intel C++ Compiler 2021) /MP is NOT available
- The reason /MP is not available is that the LLVM compiler is given all the files on the command line in one single call to icx/icpx. The compiler itself is expected to do whatever multi threading is needed.
- The problem with the above is that it's unexpected and , for example, also breaks Incredibuild which expects separate compiler invocation for each source file so it can distribute the build.
- I think there should be an option to call the compiler separately for each source file.
I don't mind which way Intel chooses, but the current situation prohibits using the new clang compiler with Visual Studio on Windows due to the exorbitant build times compared to the classic compiler - at least for our projects.
I have a solution for you. Use Incredibuild. They provided a simple solution for me ( a custom ib_profile file).
Immediately the build using Intel LLVM was accelerated as if I was using /MP and of course distributed over our grid of machines. Honestly, if build times are an issue then using Incredibuild is a huge ROI.
If you do not want to pay for Incredibuild , then I think the "free" edition of Incredibuild (which will only use your local machine) would work for you.
I am attaching a sample IB profile you can use. The file should be named <projectname>.ib_profile.xml and needs to be placed in the same folder as <projectname>.sln
>>>Do you have any plans to implement the /MP or multiple-processes switch within the next future?
Sorry for the inconvenience. Unfortunately, Intel LLVM (Clang) icx/icpx compiler does not support /MP or multiple-processes switch within the next future release.
Thanks & Regards
The Compiler development team acknowledges that this is a feature which will make a big difference in terms of productivity on the customer side. Supporting this feature in the compiler demands significant design/engineering effort and rigorous testing/validation. Our engineers have already started the high level analysis on which compiler infrastructural components will be impacted. Our initial rough estimate is 6 – 8 months from concept to readiness for public consumption (subject to change).