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

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

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

11 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

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

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)

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

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

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

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

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

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

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

For those who are using the sample, the fixed is includedin IPP 6.1 update 5 release.

Thanks,
Chao

Leave a Comment

Please sign in to add a comment. Not a member? Join today