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

Error at loading IppSP libraies

Manjula_Reddy
Beginner
1,058 Views
Hi,

I am running an application which is using header files as below:
#include
#include "vadg729fp.h"
#include "owng729fp.h"
#include "aux_fnxs.h"

#include
#include "scratchmem.h"
#include "ippdefs.h"
#include
#include
#include "g729fpapi.h"
#include "scratchmem.h"

And I am linking the following libs statically:

ippcore.lib,
ipps.lib
ippsc.lib

And I am using the following dlls at run time:

ippcore-7.0.dll,
ipps-7.0.dll,
ippsc-7.0.dll
libiomp5md.dll

The applications works fine on my machine where 7.0 IPP is installed.
But when I copy the exe and dlls on to the other machine and start it. It throws an error saying "Error at loading of IppSP library" No DLLs were found in the waterfall procedure"

Please let me if Iam missing any libs to include or dlls at run time for the above header files.

Thanks
Manjula Reddy
0 Kudos
9 Replies
Gennady_F_Intel
Moderator
1,058 Views
Please check first if these dlls are available in the your system paths.
--Gennady
0 Kudos
Manjula_Reddy
Beginner
1,058 Views

Please check first if these dlls are available in the your system paths.
--Gennady

Hi Gennady,

I have installed Intel IPP 7.0. All dlls are available on my machine.
The problem is not in my machine. My application compiles and runs fine on my machine.
But it fails and throw the above given error on other machines where 7.0 Intel IPP is not installed.
I think the exe contains the static link libraries and Iam copying the dlls mnetioned above to the application folder.

I want to know whether any other dll or lib is needed to run this app successfully on others machine.
By the way my app is a service.

Thanks,
Manjula Reddy
0 Kudos
Vladimir_Dudnik
Employee
1,058 Views
Hello,


DLLs you listed are IPP cpu-specific libraries dispatchers. In order to run application you also need to provide those cpu-specific IPP DLLs (like ippsw7-7.0.dll, ippsv8-7.0.dll and so on)

Regards,
Vladimir
0 Kudos
Manjula_Reddy
Beginner
1,058 Views
Hi Vladimir,

When I was using Intel IPP6.1 version I was using the following dlls:
ippcore-6.1.dll
ipps-6.1.dll
ippsc-6.1.dll
ippscpx-6.1.dll
ippspx-6.1.dll
ippsr-6.1.dll
ippsrpx-6.1.dll
libguide40.dll
There was no issue with these dlls on other machines also.

Please let me know the exact dlls equivalent to the above 6.1 dlls.
FYI: Iam not using ippsr.lib in my new app(7.0 version). I was using ippsr.lib in my old app(6.1 version).

Thanks
Manjula Reddy
0 Kudos
Vladimir_Dudnik
Employee
1,058 Views
IPP is libraries of processor-specific optimized code. You need to provide approporiate cpu-specific libraries on your target system. As I can see you only used PX (generic C code) libraries from IPP, meaining you did not utilize SSE vector instructions at all. Do you have any specific reason for that approach? What is your target system? Please check capabilities of your target system and choose appropriate cpu-specific library from distribution. You may need to review IPP KB article Understanding SIMD Optimization Layers and Dispatching in the Intel IPP 7.0 Library for more details. Note, IPP 7.0 does not include PX libraries by default, they are available as a separate download package.

Regards,
Vladimir
0 Kudos
Manjula_Reddy
Beginner
1,058 Views
Hi Vladimir,

I am using Windows XP Professional.Service Pack2.
Acer Incorporated Intel. Pentium4 CPU.2.66GHZ.

My question is why am able to run my app with the 7.0 dlls on my machine and why not on other XP machines with same configuration. Is it because I installed Intel 7.0 on my machine and the required dlls are linked automatically.

I used dependency walker to know which dlls are missed on the other machine. But am not able to make it out.
The other testing machine is also Windows XP.SP2. Please let me know exact list of dlls to be used. Please Help me out in this regard.

Thanks,
Manjula Reddy
0 Kudos
Vladimir_Dudnik
Employee
1,058 Views
That would be much easier if you spend some time to review documentation I was reffering to.

The following table lists the SIMD architecture codes supported by version 7.0 of the Intel IPP library.

PlatformArchitectureSIMD RequirementsProcessor / architectureNotes
IA-32w7SSE2P4, Xeon, CentrinoSSE2 default
v8Supplemental SSE3Core 2, Xeon 5100, Atom
s8Supplemental SSE3 (compiled for Atom)Atom
p8SSE4.1, SSE4.2 and AES-NIPenryn, Nehalem, Westmeresee next section
g9AVXSandy Bridge architecture
Intel 64 (EM64T)m7SSE3PrescottSSE3 default
u8Supplemental SSE3Core 2, Xeon 5100, Atom
n8Supplemental SSE3 (compiled for Atom)Atom
y8SSE4.1, SSE4.2, AES-NIPenryn, Nehalem, Westmeresee next section
e9AVXSandy Bridge architecture


For non-Intel based processors support, pleaseread Use Intel IPP on Intel or Compatible AMD* Processors.

In your particular case, for Pentium4 based systems, you need to provide dispatcher DLL and Pentium4 specific DLL.
That is you need ippcore-7.0.dll (this library does not have cpu-specific counterpart libs), ipps-7.0.dll and ippsw7-7.0.dll (dispatcher and Pentium4 specific library),ippsc-7.0.dll and ippscw7-7.0.dll. If you want to take additional performance benefits from the latest processor generations you may also want toadd appropriate cpu-specific libraries (according the table). The IPP dispatcher will automatically detect your target processor at run time and load appropriate cpu specific library. If you do not provide appropriate library with your application dispatcher will look for compatible libraryfrom previous generations. For example, you can run application on Sandy Bridge systemand provide only w7 libraries (SSE2) by whatever reason you have. That will work but you will not use the latest architectural improvements.

Regards,
Vladimir
0 Kudos
PaulF_IntelCorp
Employee
1,058 Views

Hello Manjula,

What Vladimir is trying to say is that the short list of DLL files you distributed with the old version of your application worked, but did not take advantage of the SSE acceleration that IPP provides. In your list above, quoted below,

When I was using Intel IPP6.1 version I was using the following dlls:
ippcore-6.1.dll
ipps-6.1.dll
ippsc-6.1.dll
ippscpx-6.1.dll
ippspx-6.1.dll
ippsr-6.1.dll
ippsrpx-6.1.dll
libguide40.dll
There was no issue with these dlls on other machines also.

You are providing just enough to run the IPP library an any processor, but without any of the optimizations needed to get the best performance from your processor. You need to distribute all of the processor-specific variants of the library to insure you get maximum performance on any given machine.

What you should have been distributing with your old application that is using the 6.1 version of the library follows:

ippcore-6.1.dll
libiomp5md.dll

ipps-6.1.dll
ippspx-6.1.dll
ippsp8-6.1.dll
ippss8-6.1.dll
ippst7-6.1.dll
ippsv8-6.1.dll
ippsw7-6.1.dll

ippsc-6.1.dll
ippscpx-6.1.dll
ippscp8-6.1.dll
ippscs8-6.1.dll
ippsct7-6.1.dll
ippscv8-6.1.dll
ippscw7-6.1.dll

ippsr-6.1.dll
ippsrpx-6.1.dll
ippsrp8-6.1.dll
ippsrs8-6.1.dll
ippsrt7-6.1.dll
ippsrv8-6.1.dll
ippsrw7-6.1.dll

I've grouped them so they make more sense. The first group are some "overhead" or "core" components. The other three groups represent the SP library domain, the SC library domain and the SR library domain. Within each of the last three groups (domains) are the PX, P8, S8, T7, V8, and W7 library optimizations. Each optimization component within a library domain give optimimum performance for a specific processor architecture (see Vladimir's table from a prior post). If you exclude the optimizations within each library domain your application requires you are not allowing your application to take full advantage of the IPP library.

In version 7.0 of the IPP library, the optimization levels were changed and the SR domain was removed. Therefore, based on your list above, you should be distributing the following DLL files with your 7.0 based application:

ippcore-7.0.dll
libiomp5md.dll

ipps-7.0.dll
ippsg9-7.0.dll
ippsp8-7.0.dll
ippss8-7.0.dll
ippsv8-7.0.dll
ippsw7-7.0.dll

ippsc-7.0.dll
ippscg9-7.0.dll
ippscp8-7.0.dll
ippscs8-7.0.dll
ippscv8-7.0.dll
ippscw7-7.0.dll


Same reasoning as abovefor the 6.1 library, just a slightly different list of processor optimizations due to changes from 6.1 to 7.0.

Paul
0 Kudos
Manjula_Reddy
Beginner
1,058 Views
Hi Paul and Vladimir,

Thanks a lot for all your help and explanation.
Actually I have no knowledge regarding processor specific variants and how to indentify their respective dlls from the list, So I could not take a deceison on choosing the dlls.Now I got some idea reading your postand I have followed your suggestion and my issue got resolved.


Thanks once again for all your help,
Manjula Reddy
0 Kudos
Reply