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

How to disable multi-core?

Briard__David
Novice
969 Views

Hi all,

I thought that intel IPP single threaded dlls was single core, but I just noticed that it wasn't. For example, if I create 8 threads, each function take 800ms, and if I am using only 1 thread, each function take 100ms, on my 8-core CPU. So IPP is creating threads internally.

I am managing threads myself in my program and I would like to force intel IPP to be single threaded only.

- I tried to call ippSetNumThreads but it returns status NoOperation, and ippGetNumThreads return NoOp and 1.

- I also tried to enable OpenMP support in the DLL where I am using Intel IPP because I read "For applications that use OpenMP threading, nested threading is disabled by default". My application is a C#/WPF and I am using Intel IPP using a C++/CLR wrapper assembly.

My dll link to ippcore.lib;ippvm.lib;ipps.lib;ippi.lib;ippcc.lib;ippcv.lib.

Any help is welcome.
Thank you.

0 Kudos
2 Replies
Gennady_F_Intel
Moderator
957 Views

You may explicitly link with the single-threaded version of IPP. Please check the IPP User Guide to refer more details:

https://software.intel.com/content/www/us/en/develop/documentation/ipp-dev-guide/top/linking-your-application-with-intel-integrated-performance-primitives/linking-options.html



Briard__David
Novice
942 Views

Hi,

Thanks for your answer and sorry for my late reply!

This is already what I am doing, I am linking to lib with mt suffix in a library name.

As you can see in the attached graph, I can see an improvement if I use 2 threads instead of 1, but after that, there is no more improvement for 3 to 8 threads on my Core i7 10th Gen (8 cores) CPU.

Graph is for processing a large RGB image (13000x10000) in tiles of 2048x2048. For each tile, I convert from 8-bit RGB to 32-bit float RGB and apply a serie IPP functions, then I convert back to 8-bit RGB.

If I replace IPP functions with a sleep(1000), I can see a x8 improvement with eight core.

But with IPP functions, the more I use threads, the more each tile take time to compute (from about 100ms for 1 thread, to about 800ms for 8 threads). I checked that I am not memory limited.

1) That's why I thought that IPP was using thread internally. But if not, that means that I am bandwish limited?

p.s. for others processing, I can see an improvement up to 3 threads instead of 2, but no more improvement for 4 to 8 threads.

2) How can I try enable multi-threading inside IPP? With dynamic linking, SetNumThreads() always return ippStsNoOperation. Should I use the deprecated multithread lib/dll?

Thank you.

 

 

0 Kudos
Reply