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

V4.0 -> V4.1 performace degradation

Maciej_K_
Beginner
1,106 Views
My application links to static Ipp libraries ( merged.lib + emerged.lib + IppStaticInitBest()).When I upgraded libraryfrom V4.0 to V4.1 I noticed a huge performance degradation.Ippmpeg4 codecruns about 2x slower.I didn't change anything but simplychanged ipp*.lib and *h files to newer versions.Everything is ok whenI revert to the previous version.
What could be a reason ?
Processortype detected correctly as "Pentium4HT2 2800MHz". mpeg codec is put in separate static library, butIppStaticInitBest() is called from my main exe.
Thanks in advance,
Kamil
0 Kudos
7 Replies
Vladimir_Dudnik
Employee
1,106 Views
Hi Kamil,
Actually it looks very strange, because our own tests shows performance improvement for new IPP version, because there was additional optimization work done. Well, let us understand wherethe problem is. Could you describe your application in more details. What MPEG4 codec do you use? Is itIPP MPEG4 codec sample? Can you also insert output for IPP version? I mean simple piece of code (after call of ippStaticInit func) like this:
const IppLibraryVersion ver = ippvcGetLibVersion()
printf("name: %s, version: %s, build date: %s ",ver->Name,ver->Version, ver->BuildDate);
Regards,
Vladimir
0 Kudos
Maciej_K_
Beginner
1,106 Views
Thank you for the answer,
When I link to ipp4.0 I get the following message:
ippvct7l.lib, version v4.0, buld date: Oct 23 2003
but in ipp4.1 I get:
ippvca6l.lib version v4.1, build date: Jul 20 2004
This is my init code:
#pragma comment( lib, "ippiemerged.lib" )
#pragma comment( lib, "ippjemerged.lib" )
#pragma comment( lib, "ippsemerged.lib" )
#pragma comment( lib, "ippvcemerged.lib" )
#pragma comment( lib, "ippimerged.lib" )
#pragma comment( lib, "ippjmerged.lib" )
#pragma comment( lib, "ippsmerged.lib" )
#pragma comment( lib, "ippvcmerged.lib" )
#pragma comment( lib, "ippcorel.lib" )
void CIppLibrary::Init()
{
VERIFY( ::ippStaticInitBest() == ippStsNoErr ); // no error
nCpuType = ::ippCoderGetCpuType(); // returns ippCpuP4HT2
}
I noticed the ipp*i7l.lib files under ./lib subdirectory, so Iadded them to my source-tree andinsertedfollowing lines:
#pragma comment( lib, "ippii7l.lib" )
#pragma comment( lib, "ippji7l.lib" )
#pragma comment( lib, "ippsi7l.lib" )
#pragma comment( lib, "ippvci7l.lib" )
// and the rest of the file
#pragma comment( lib, "ippiemerged.lib" )
...
...
but I stillget "ippvca6l.lib". I use VC++7.1. The codec is derived IPP sample.
Kamil
0 Kudos
Maciej_K_
Beginner
1,106 Views
PS.
ippStaticInitCpu(ippCpuP4HT2) works with no problem under Ipp4.1, but I'd prefer to use auto-detection.
0 Kudos
Vladimir_Dudnik
Employee
1,106 Views
Hi,
We are verified your case, you are right. Unfortunately, there is bug in IPP static dispatcher mechanizm, which cause A6 code selection in caseyou haveT7 processor. Both variants of static dispatcher (ippStaticInit and ippStaticInitBest) have this bug. Dynamic dispatcher (DLLs) do not have this bug. So, you havethree choices to workaround this:
  1. You can link your application with IPP DLLs
  2. You can emulate static dispatcher in your code. Just replace call of ippStaticInitBest with
    ippStaticInitCpu(ippCoreGetCpuType());
  3. You can link your application with ippcorel.lib from IPP v4.0 which do not have this bug.

By the way, you need to remove ippxxi7l.lib libraries from your project if you developing for IA32 platform. The I7 code is for Intel Itaniumspecific libraries.

Regards,
Vladimir

0 Kudos
Maciej_K_
Beginner
1,106 Views
Thanks, I use:
ippStaticInitCpu(ippCoreGetCpuType());
it looks like it is exactly the same function.
0 Kudos
Vladimir_Dudnik
Employee
1,106 Views
What do you mean? No effect?
I tested this, it helps becauseafter thatI got T7code instead of A6 before.
Could you verify that after this call you do not callippStaticInit somewhere?
Vladimir
0 Kudos
Maciej_K_
Beginner
1,106 Views
Of course it is not the same function but works the same andyes, everything is ok now.
0 Kudos
Reply