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

IPP .so libraries naming logic and how to pick them

Julien_B_
Beginner
1,037 Views

Hello,

I'm currently using IPP (2017) on Linux, so far it behaves relatively well, but there is something that remains cryptic to me:

How do I determine which library to link based on the current configuration?

Right now I have this installed:

libippcc.a       libippchy8.so    libippdcmx.so    libippsl9.so
libippcce9.so    libippcore.a     libippdcn0.so    libippsm7.so
libippcck0.so    libippcore.so    libippdcn8.so    libippsmx.so
libippccl9.so    libippcore_tl.a  libippdc.so      libippsn0.so
libippccm7.so    libippcv.a       libippdcy8.so    libippsn8.so
libippccmx.so    libippcve9.so    libippi.a        libipps.so
libippccn0.so    libippcvk0.so    libippie9.so     libippsy8.so
libippccn8.so    libippcvl9.so    libippik0.so     libippvm.a
libippcc.so      libippcvm7.so    libippil9.so     libippvme9.so
libippccy8.so    libippcvmx.so    libippim7.so     libippvmk0.so
libippch.a       libippcvn0.so    libippimx.so     libippvml9.so
libippche9.so    libippcvn8.so    libippin0.so     libippvmm7.so
libippchk0.so    libippcv.so      libippin8.so     libippvmmx.so
libippchl9.so    libippcvy8.so    libippi.so       libippvmn0.so
libippchm7.so    libippdc.a       libippi_tl.a     libippvmn8.so
libippchmx.so    libippdce9.so    libippiy8.so     libippvm.so
libippchn0.so    libippdck0.so    libipps.a        libippvmy8.so
libippchn8.so    libippdcl9.so    libippse9.so    
libippch.so      libippdcm7.so    libippsk0.so

Naively, I first linked all of them, using a bunch of flags in that vein:

-lippcce9 -lippchn8 -lippchmx -lippcc -lippvml9 -lippsy8 -lippcvk0 -lippie9 -lippchm7 -lippimx -lippvme9 -lippchl9 -lippcvk0 -lippcve9 -lippvmk0 -lippdcmx -lippchk0 -lippsmx -lippin8 -lippdc -lippiy8 -lippin0 -lippil9 -lippccy8 -lippik0 -lippse9 -lippcore -lippcvn8 -lippdcl9 -lippcc -lipps -lippsm7 -lippccl9 -lippdce9 -lippchn0 -lippcv -lippdck0 -lippcvm7 -lippdcm7 -lippim7 -lippsn0 -lippvmn8 -lippdcn0 -lippcck0 -lippccn8 -lippccm7 -lippvmn0 -lippvmm7 -lippvmy8 -lippcvmx -lippvm -lippcvn0 -lippcvl9 -lippche9 -lippvmmx -lippch -lippsl9 -lippccn0 -lippi -lippcvy8 -lippsk0 -lippchy8 -lippsn8 -lippdcn8 -lippdcy8

Things were going well, until I got an "Illegal Instruction" error at runtime terminating the program.

I tried compiling it in debug mode and running it using gdb, this led me to locate the error in libippcvk0.so, it happened when I tried to use some Gaussian Filter init function.

Worried, I tried running the same program compiled with the same flags on another machine (still an Intel processor), I still got an Illegal Instruction error but only upon calling another ipp function further during the execution, the init function went apparently well but effectively applying this gaussian filter on an image made the whole thing crash.

At this stage, I made some hypothesis: not every library in the bunch is always required and the choice of which one to pick depends on what processor you have (or at least what instruction set) which makes sense since it's all about low-level performance.

I removed the -lippcvk0 flag in the hope those functions would be implemented elsewhere and it worked on my computer, no illegal instruction, I can successfully filter images.

Knowing all that, I still cannot tell why libippcvk0.so was not the chosen one (and some other .so was), what is the meaning behind each library name anyway ?

In the case of libippcvk0.so, "ipp" is self explanatory, "cv" may stands for "computer vision" (I guess), but what about the "k0" ?

Also, what about libippcve9.so, libippcvl9.so, libippcvm7.so, libippcvmx.so, libippcvn0.so, libippcvn8.so, libippcv.so or libippcvy8.so ?

Thank you for your time.

0 Kudos
1 Solution
2 Replies
Julien_B_
Beginner
1,037 Views

Wow, that's the exact kind of information I was looking for, the keyword there was "dispatcher".

Thanks :)

0 Kudos
Reply