Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

UMC, 64-bit Windows, OpenMP threading

pvonkaenel
New Contributor III
443 Views
Hi all,

I have been building the UMC samples that come with IPP 6.1 as static libraries using both ICL and VC9. In either case when I link the UMC libraries with a 64-bit application, depends does not list libiomp5md.dll as a dependency while 32-bit applications do. Is there something I'm missing to get threaded 64-bit static UMC libraries?

Thanks,
Peter
0 Kudos
7 Replies
pvonkaenel
New Contributor III
443 Views
Quoting - pvonkaenel
Hi all,

I have been building the UMC samples that come with IPP 6.1 as static libraries using both ICL and VC9. In either case when I link the UMC libraries with a 64-bit application, depends does not list libiomp5md.dll as a dependency while 32-bit applications do. Is there something I'm missing to get threaded 64-bit static UMC libraries?

Thanks,
Peter

Well it looks like it was specific to the cl compiler and not icl. There is a place in the UMC makefile that only puts /openmp in with the CFLAGS if it is a 32-bit build. Is there something wrong with using the libiomp5md version of OpenMP in the UMC samples when build with cl for 64-bit?

Peter
0 Kudos
Chao_Y_Intel
Moderator
443 Views

Hi Peter,

You can change the following to enable the openmp threading with cl:

!IF "$(CC)" == "cl.exe" && "$(ARCH)" == "win32"
->>!IF "$(CC)" == "cl.exe"


The OpenMP code will be threaded by MS compiler. The code will depends on MS OpenMP runtime library (vcomp.dll?), not Intel openmp library (libiomp5md).

thanks,
Chao


0 Kudos
pvonkaenel
New Contributor III
443 Views
Quoting - Chao Yu (Intel)

Hi Peter,

You can change the following to enable the openmp threading with cl:

!IF "$(CC)" == "cl.exe" && "$(ARCH)" == "win32"
->>!IF "$(CC)" == "cl.exe"


The OpenMP code will be threaded by MS compiler. The code will depends on MS OpenMP runtime library (vcomp.dll?), not Intel openmp library (libiomp5md).

thanks,
Chao



Thanks for the reply Chao. That is the makefile change I made, but I also link with libiomp5md.lib which gets me Intel's version of OpenMP.

Peter

0 Kudos
Chao_Y_Intel
Moderator
443 Views
Quoting - pvonkaenel

Thanks for the reply Chao. That is the makefile change I made, but I also link with libiomp5md.lib which gets me Intel's version of OpenMP.

Peter



Hi Peter,

'libiomp5md.lib' is not necessory. since the code is comipled by MS compiler. The compiler will choose the MS openmp runtime library. Adding libiomp5md.lib may not be helpful.

Thanks,
Chao
0 Kudos
pvonkaenel
New Contributor III
443 Views
Quoting - Chao Yu (Intel)


Hi Peter,

'libiomp5md.lib' is not necessory. since the code is comipled by MS compiler. The compiler will choose the MS openmp runtime library. Adding libiomp5md.lib may not be helpful.

Thanks,
Chao

Hi Chao,

I have two reasons for wanting to use libiomp5md.dll instead of vcomp9.dll, but please let me know if they are misplaced:

1) I use IPP, and while I do not currently use the threaded layer, if I start then I think I must use libiomp5md. Is that correct, or will IPP threaded calls use vcomp?

2) libiomp5md conforms to OpenMP 3 while vcomp9 is still OpenMP 2. I am assuning there have been advances in 3 over 2 that I should be able to seemlessly take advantage of. Is this correct, or are all the changes in omp_* calls that will only be available if I'm also using Intel's omp.h header file?

Thanks,
Peter
0 Kudos
Chao_Y_Intel
Moderator
443 Views


Hi Peter,

IPP static libraries are not threaded, and do not depend on libiomp5md. IPP dynamic libraries and threaded static libraries are threaded internally with 'libiomp5md' ( IPP functions are built with Intel Compiler).

The threading in UMC sample code is different. It is threaded in the UMC source code, not IPP functions. So if you build with UMC source with cl. it will use 'vcomp'. If you build the source code with Intel Compiler, it will choose 'libiomp5md'.

So in this case, if you want to use 'libiomp5md', you need to use Intel Compiler to compile the source code.

Thanks,
Chao

0 Kudos
pvonkaenel
New Contributor III
443 Views
Quoting - Chao Yu (Intel)


Hi Peter,

IPP static libraries are not threaded, and do not depend on libiomp5md. IPP dynamic libraries and threaded static libraries are threaded internally with 'libiomp5md' ( IPP functions are built with Intel Compiler).

The threading in UMC sample code is different. It is threaded in the UMC source code, not IPP functions. So if you build with UMC source with cl. it will use 'vcomp'. If you build the source code with Intel Compiler, it will choose 'libiomp5md'.

So in this case, if you want to use 'libiomp5md', you need to use Intel Compiler to compile the source code.

Thanks,
Chao


Good to know. I was not aware that the UMC libraries used the non-threaded IPP. However, I have build UMC and all of my code with VC9, specified libiomp5md in my link, and it worked fine. Looking at my binaries with depends shows a dependency on libiomp5md.dll and not on vcomp90.dll. I take it from your comments that since I want to use VC9, the safest way to use OpenMP is with the MS library even though linking with Intel's appears (on the surface) to work. Thanks for the input - I'll switch it over and start my testing.

Peter
0 Kudos
Reply