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

Is it possible to disable OpenMP for qwin multithread application?

Sergiy_Y_
Beginner
1,315 Views

Hi, I'm using Intel Parallel Studio 2017 and VS2012. I have a quickwin multithread application that does not use openMP explicitly.  This application worked well with Intel Fortran Composer XE 2013. But now it requires openMP dll, when I try to start it on PC without PS and VS installed.

Is it possible to avoid this problem and to compile&link my application in a such way that it will not require openMP dll?

Thank you beforehand.

0 Kudos
1 Solution
Steve_Lionel
Honored Contributor III
1,315 Views

Do this - in the project properties, select Linker > General. Set "Show Progress" to "Show all progress messages". Do a full rebuild of the project. Zip the buildlog.htm and attach the ZIP here so we can look at it. 

View solution in original post

0 Kudos
17 Replies
Steve_Lionel
Honored Contributor III
1,315 Views

No - Intel no longer provides the statically-linked OpenMP library. But you can install the "compiler redistributables", including the OpenMP DLL, on any computer.

0 Kudos
andrew_4619
Honored Contributor II
1,315 Views

what did you mean by "that does not use openMP explicitly."?  Do you have some third party libs that use openMP?

0 Kudos
Sergiy_Y_
Beginner
1,315 Views

Thank you, Steve and Andrew!

Steve, I understood.

Andrew, I  don't use openMP at all, but before I asked the question I suspected that new Intel-multithreading could use it, because my code previous version (that is without MT) works well.

0 Kudos
Steve_Lionel
Honored Contributor III
1,315 Views

Note that all QuickWin apps are at least two threads by default (not using OpenMP.) Your app runs in one thread and the GUI runs in another.

0 Kudos
Sergiy_Y_
Beginner
1,315 Views

Thank you, Steve!

The previous version of my code was a console application, therefore it works well in this sense.

0 Kudos
andrew_4619
Honored Contributor II
1,315 Views

I would check what parallel options you have set and remove them.  You should be able to make a static  quickwin build.

0 Kudos
Sergiy_Y_
Beginner
1,315 Views

Thank you, Andrew!
All compiler and linker options are default. I have migrated my old project. As I understand, I don't use any parallel options.
In my code I use only CreateThread and CloseHandle functions in IFMT module. In my old project I used them in DFMT module.

Please find below my options list.

Fortran:
/nologo /O2 /fpscomp:ioformat /fpscomp:general /assume:byterecl /fpe:0 /module:"x64\Release\\" /object:"x64\Release\\" /Fd"x64\Release\vc110.pdb" /libs:qwin /c

Linker:
/OUT:"bin\F64.exe" /NOLOGO /MANIFEST:NO /SUBSYSTEM:WINDOWS /LARGEADDRESSAWARE /IMPLIB:"E:\Dropbox\F-projects-XE2017-VS2012\F\x64\Release\F.lib"

Resources:
/fo "x64\Release/F.res"

MIDL:
/nologo /char signed /env x64 /h "F_h.h" /tlb "x64\Release/F.tlb"

Manifest tool:
/nologo /outputresource:"E:\Dropbox\F-projects-XE2017-VS2012\F\x64\Release\F.exe;#1"

Thank you beforehand for any advices.

 

0 Kudos
andrew_4619
Honored Contributor II
1,315 Views

on the compile you do not have /libs:static 

0 Kudos
Sergiy_Y_
Beginner
1,315 Views

Thank you, Andrew!

Just now I've did it. With this option my code anyway requires libiomp5md.dll, when I tried to start the code on other PC.  

0 Kudos
Steve_Lionel
Honored Contributor III
1,315 Views

Don't use /libs:static with QuickWin - use /libs:qwin.  You must have some other part of the code that is built with /Qopenmp for there to be a reference to libiomp5md.  But if that is still needed, just install the redistributables on the other computer.

0 Kudos
Sergiy_Y_
Beginner
1,315 Views

Thank you, Steve!
1. I make a free code, so I don't want to do something that complicates using the code by potential users. Therefore, an installation of redistributables for other PCs is not entirely desirable for me.
2. Now I have put the libiomp5md file in the folder from which the program is launched. My problem is that I have two versions of the code: 32x and 64x, and they run from the same folder. Therefore, I had to create a batch file, which copies the corresponding dll in this folder.
3. As for your comment. As I understood from it,
for all that it is possible to remove a reference to libiomp5md and to avoid an error when I'm starting my code on other PC without an installation of redistributables. Unfortunately, my code is big enough, and I do not know at the moment, which part of it refers to libiomp5md. To learn this issue may take considerable time.
4. If you can tell which parts of my code I need to pay attention to, below I will list the features that I use in my code.
- quickwin dialogs with controls;
- menu;
- windows API functions to implement features that are not implemented in quickwin (for example, tree control);
-
graphics functions;
- launching threads;
- launching processes;
- windows socket functions for interacting with the launched processes;
- standard windows dialogs to open and save files;
- interaction with the printer.

Thank you beforehand for any advices.

0 Kudos
Steve_Lionel
Honored Contributor III
1,315 Views

Distribution of the run-time DLLs is free.

None of the program aspects you mention would necessarily use OpenMP. Could it be that your program has the OpenMP option enabled even though you don't use OpenMP? Look under Fortran > Language and make sure that OpenMP is disabled. If you do that and build without errors, then you won't need libiomp5md.dll. It is not possible to use OpenMP but not use the DLL.

0 Kudos
Sergiy_Y_
Beginner
1,315 Views

Thank you, Steve!

Yes, in my project "Process OpenMP Directives" is disable. But it requires libiomp5md.dll when I try to start it on other PC.

But "OpenMP Conditional Compilation" (Fortran/Preprocessor) is "Yes" and "Enable OpenMP Offloading Compilation" (Fortran/Code Generation) is "Default". Can it somehow influence?

0 Kudos
andrew_4619
Honored Contributor II
1,315 Views

I suggest making a new qwin project in a new solution and adding your existing source files to this and see what happens.

0 Kudos
Steve_Lionel
Honored Contributor III
1,316 Views

Do this - in the project properties, select Linker > General. Set "Show Progress" to "Show all progress messages". Do a full rebuild of the project. Zip the buildlog.htm and attach the ZIP here so we can look at it. 

0 Kudos
Sergiy_Y_
Beginner
1,315 Views

Thank you, Steve and Andrew!

Steve, I did what you advised, looked through the buildlog.htm file and found that one of the source files in its properties has Fortran/Optimization/Parallelization - Yes (/Qparallel). (I don't know why this happened)
I removed this option, and the program works on another PC without a library libiomp5md.dll.
Once again many thanks for your help!

0 Kudos
Steve_Lionel
Honored Contributor III
1,315 Views

Yes - /Qparallel creates a dependency on OpenMP. Glad to hear you solved it.

0 Kudos
Reply