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

Problem with the IPP Data Compression running on a Quad Core processor

Rafael_de_Medeiros
471 Views

I developed an applicationwhich use IPP Data Compression. The first code (which load the IPPDC library) is based on Delphi sample IPP Image Processing, available on IPP samples.

In this code, the ippdcGetLibVersion (ippiGetLibVersion on the sample)returns name = ippdcp8-6.0.dll+ if running at a Quad Core processor. Thisfile doesn t exist. I copy the ippdcp8-6.0.dll to ippdcp8-6.0.dll+ and it worked, but I need to know if this iscorrect.

Can you help me?

Rafael de Medeiros

0 Kudos
10 Replies
Thomas_Jensen1
Beginner
471 Views

Are you sure you used stdcall on all IPP functions in Delphi?

0 Kudos
Rafael_de_Medeiros
471 Views

Yes. Iam sure.

function ippGetLibVersion: PIppLibraryVersion; stdcall;

The configuration is 2 Intel Xeon E5506 2,13GHz Quad Core and the function IPPGetCPUType returns decimal 37 (hex 25 - ippCpuNehalem)

0 Kudos
Ying_H_Intel
Employee
471 Views

Hello,

I noticed you are calling IPP 6.0 dlls. How about try the latest IPP vesion: IPP 6.1 update 3?

You can downloadthe install package and sampleby following the instructionon http://software.intel.com/en-us/articles/ipp-downloads-registration-and-licensing/

Pleaselet us know if anyresult.

Thanks

Yign

0 Kudos
Rafael_de_Medeiros
471 Views

Hello,

Same problem with version 6.1. I emphasize that this problemoccurs only in this case.

This code is running in other 1000 clients without problem.

This is the sample of my code

result := LoadLibrary('ippdc-6.1.dll');
if (result <> 0) then begin
@tmpGetLibVersion := GetProcAddress(result,'ippdcGetLibVersion');
if (tmpGetLibVersion <> nil) then begin
version := tmpGetLibVersion;
loadedFullName := version.Name;

// In this point, the version.name = ippdcp8-6.1.dll+

FreeLibrary(Result);
Result := LoadLibrary(PChar(path + loadedFullName));
if (result <> 0) then begin
// Success
end else begin
loadedFullName := ComposeFullDllName(name, ipp_version);
// erro, load the old libray
result := LoadLibrary('ippdc-6.1.dll');
end;
end;
end;
end;

Thanks

Rafael

0 Kudos
matthieu_darbois
New Contributor III
471 Views

Hi,

you don't have to unload ippdc-6.1.dll and try load ippdcp8-6.1.dll. Just go on with ippdc-6.1.dll

When you call functions in ippdc-6.1.dll, they are automatically mapped to the functions in the most suited DLL (in this case ippdcp8-6.1.dll)

You never have to worry about loading optimized DLL with IPP. You just load the dispatch DLL (the one with no xx extension). The rest of the work is already handled by Intel.

Regards,

Matthieu

0 Kudos
Rafael_de_Medeiros
471 Views

Hi Matthieu, Thanks foryou reply.

I understand this, but why the Delphi sample at the IPPSamples (w_ipp-samples_p_6.0.0.117\ipp-samples\language-interface\delphi\src) do this?

Thanks,

Rafael

0 Kudos
Vladimir_Dudnik
Employee
471 Views

Hello,

you do notneed to rename IPP files. The symbols '+' in string returned by ippdcGetLibVersion does not refer to file name. It is a notion that library may have tick-tock dispatcher in addition to traditional IPP dispatching mechanism.

Regards,
Vladimir

0 Kudos
matthieu_darbois
New Contributor III
471 Views

Hi,

As I don't use Delphi, I didn't see these samples. Why Intel is providing this like that ? Just loading the dispatch should be sufficient. Someone from Intel could clarify this point ?

Matthieu

0 Kudos
Albert_Stepanov
New Contributor I
471 Views

Hi,

When this sample was created there was only one dispatching mechanism. So '+' symbols in string were absent. And loading and unloading of libraries were developed in this sample to specify explicitly which processor-specific library should be loaded (Menu|Tools|Options...) and compare them performance.

Rafael, you can add following strings inyour code to remove symbols not relating to file name:

loadedFullName := version.Name;

indx := Pos('+', loadedFullName);

Delete(loadedFullName, indx, Length(loadedFullName)+1-indx);

If anything you think I can help you, please feel free to tell me.

Regards,

Albert

0 Kudos
Chao_Y_Intel
Moderator
471 Views
For those who are using the sample, the fixed is includedin IPP 6.1 update 5 release.

Thanks,
Chao

0 Kudos
Reply