[Difx-users] New Intel IPP 2026.0.0 {External}
Adam Deller
adeller at astro.swin.edu.au
Wed Apr 29 22:21:35 EDT 2026
Hi Walter,
My vague understanding was that mult-threaded IPP had been disabled some
time ago because Intel figured out that it was a giant PITA. (Which was
certainly the case for us, since the multithreaded IPP calls were not
thread safe, so they didn't play nice with DiFX which uses pthreads. So in
2012 we added that call to set ippNumThreads to 1, which I think was the
only edit ever related to IPP threading.)
Gemini believes similarly (edited summary below) so I think it is perfectly
safe to remove that call; best of all would be to have it be conditional on
IPP version (e.g., only made for versions 2022.3 and earlier).
Cheers,
Adam
The Function of ippSetNumThreads()
Historically, Intel IPP maintained both single-threaded and multi-threaded
versions of its libraries. The multi-threaded versions utilized OpenMP
under the hood to automatically parallelize workloads across available CPU
cores.
The ippSetNumThreads(int numThr) function was used to manually configure
the number of OpenMP threads that IPP internal functions were allowed to
spawn.
-
By default, IPP would use a number of threads equal to the number of
processors in the system.
-
Developers typically used ippSetNumThreads(1) to explicitly disable
IPP's internal parallelization, which was crucial to prevent thread
oversubscription if the host application was already managing its own
threads.
IPP Threading Behavior Post-Deprecation
Starting around IPP 8.0/8.2, Intel officially deprecated IPP's internal
multi-threading libraries and functions, including ippSetNumThreads(). The
threading behavior of IPP shifted fundamentally:
*1. Shift from Internal to External Threading* Intel realized that having a
library handle threading internally often caused severe performance
bottlenecks and interoperability issues when mixed with the host
application's own threading model. Today, IPP relies entirely on *external
threading* (also known as application-level threading).
*2. Single-Threaded but Thread-Safe* Modern IPP functions are strictly
single-threaded by design. However, they are entirely *thread-safe*. The
expectation is that you, the developer, will handle the thread management
at the application level using modern concurrency frameworks like Intel
Threading Building Blocks (TBB), OpenMP, Cilk Plus, POSIX threads, or
Windows threads. You divide your data into chunks across your application's
threads, and then each thread calls the highly optimized, single-threaded
IPP primitives to process its respective chunk.
*3. The Current State of the API* In recent versions of Intel IPP, calling
ippSetNumThreads() or ippGetNumThreads() no longer actually does anything.
Because the underlying internal threading libraries have been removed,
these functions simply return the status code ippStsNoOperation. Intel has
kept them around as "dummy" functions solely to prevent compilation errors
in legacy codebases, but they are slated for complete removal from the API
in upcoming releases.
On Wed, 29 Apr 2026 at 04:31, Walter Brisken via Difx-users <
difx-users at listmgr.nrao.edu> wrote:
> Hi DiFX folks,
>
> A new Intel Integrated Performatives Primitives (IPP) version was
> released just last week. This is version 2026.0.0, superseding the
> previous version 2022.3.0.
>
>
> https://www.intel.com/content/www/us/en/developer/tools/oneapi/ipp-download.html?operatingsystem=linux&linux-install=offline
>
> Note that this web page is only partially updated and the "whats new"
> section of the IPP web page doesn't include any details on what has
> changed between the two versions.
>
>
> I have successfully compiled DiFX using this and will begin testing it
> soon. There is one build caveat: this version deprecates a call to
> ippSetNumThreads(). To allow building to continue, the call to this
> function in mpifxcorr.cpp can simply be commented out. Alternatively if
> you want to keep the source code for released versions of DiFX clean,
> you can append to the bottom of the ippcore.h file that comes with IPP
> the following line:
>
> #define ippSetNumThreads(n) 0
>
> That will simply cause nothing to happen when trying to make the
> function call.
>
> A question for those that may know IPP more than I do: without the
> ability to set number of threads, what is the behavior regarding
> "threadiness" now? I note that this function call was deprecated in
> 2022.3.0, and maybe also earlier versions, so it is possible that this
> call has been effectively a no-op for quite some time. Any clarity on
> this would be useful!
>
> Cheers,
>
> Walter
>
> _______________________________________________
> Difx-users mailing list
> Difx-users at listmgr.nrao.edu
> https://listmgr.nrao.edu/mailman/listinfo/difx-users
>
--
!=============================================================!
Prof. Adam Deller
Centre for Astrophysics & Supercomputing
Swinburne University of Technology
John St, Hawthorn VIC 3122 Australia
phone: +61 3 9214 5307
fax: +61 3 9214 8797
!=============================================================!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listmgr.nrao.edu/pipermail/difx-users/attachments/20260430/3f884b45/attachment.html>
More information about the Difx-users
mailing list