I am using the latest Fortran Parallel Studio XE 2016 Update 1, and the only MKL functions I'm using are Pardiso and Feast (compiling for 32-bit and 64-bit). Is there any way to find out which MKL files to ship if I want to support all Windows platforms?
I know this question has been asked before, but I have never seen a definitive answer other than "ship them all". I don't really want to ship them all because they are making the build file unnecessarily large, and I'm pretty sure most of them aren't being used seeing as I'm only using two MKL functions.
Intel provides "redistributables" bundles at https://software.intel.com/en-us/articles/intelr-composer-redistributable-libraries-by-version . Those of your customers who do not have the Intel compiler installed may choose the appropriate redistributable package based on your recommendations, and you would not need to bundle any MKL DLLs with your own software.
Assuming you're using the MKL DLLs, you can use Dependency Walker to see which DLLs are being used. The libraries aren't split much by function so you may not have a choice but to provide several of them. There may be some you don't need - Dependency Walker will tell you.
Generally I'd agree with mecej4 here, but MKL doesn't provide a redistributable installer (and the MKL DLLs are not part of the compiler redistributables), so you don't have a lot of choice here.
But if I want to distribute one set of MKL DLLs that will suit all Windows platforms and CPUs (seeing as I don't know what each client is using) then the dependency walker wouldn't really help would it? I assume that it needs to know the Windows platform and CPU before it can come up with a list of MKL dependencies. Is that correct?
I'm really just looking for the list of MKL DLLs that are used by Pardiso and Feast regardless of the platform or CPU.
if you don't want distribute all dll from redist folder, then there is only one way - create custom.dll with all functions from MKL you need for your application and redist this custom dll only. It would have much smaller sizes. Please refer to the UG how to create custom dll.
hope that helps.
I just figured out that I can compile with Runtime Library = "Multithreaded" instead of the default "Multithread DLL" to have all the required MKL functions statically linked into my application. This causes my application to grow by 90Mb but saves me having to ship 375Mb of MKL DLLs, many of which aren't used seeing as I'm only using Pardiso and Feast.
My application gets shipped to clients with many different types of computers, processors and versions of Windows. Will my statically linked application work for all of them or has it just statically linked the MKL functions that apply to the computer I compiled it on?
Well, I use a statically linked application (Really two: one for 32 bits SO and one for 64 bits), and then I only need to ship 'libiomp5md.dll' (again, two versions: 32 and 64 bits). Our customers hasn't problems to run them, regardles the SO or CPU used.