IPP改用静态链接后速度变慢的问题
有这么一段代码,在静态链接的时候速度是动态链接的4倍,比较奇怪。以前一直是动态链接,刚刚改成动态链接,想改成运行时自动分配CPU类型的方式,不知道是不是我用的方法不对。有一些代码
先说明一下环境
IDE:VC2008SP1
Compiler:Intel 11.0.061
IPP:6.0.0.062
CPU:Q6600
RAM:4G
SYS:WINXP32
#include "ipp.h"
// 动态链接
#pragma comment(lib,"ippi.lib")
#pragma comment(lib,"ippcv.lib")
// 静态链接
//#pragma comment(lib,"ippcorel.lib")
//#pragma comment(lib,"ippsemerged.lib")
//#pragma comment(lib,"ippsmerged.lib")
//#pragma comment(lib,"ippiemerged.lib")
//#pragma comment(lib,"ippimerged.lib")
//#pragma comment(lib,"ippcvemerged.lib")
//#pragma comment(lib,"ippcvmerged.lib")
//ippStaticInit();
Ipp32s pKernel[ 100 ] = {
-1, -1, -1,
-1, 12, -1,
-1, -1, -1 };
IppiSize kernelSize = { 3, 3 };
IppiPoint anchor = { 1, 1 };
int divisor = 4;
IppiSize RoiSize = { m_imgSize.width - 2, m_imgSize.height - 2 };
st = ippiFilter_16u_C1R(
pSrc + m_imgSize.width + 1, m_imgSize.width * sizeof( Ipp16u ),
pDst + m_imgSize.width + 1, m_imgSize.width * sizeof( Ipp16u ),
RoiSize,
pKernel, kernelSize, anchor,divisor );
if( ippStsNoErr != st )
return st;
/c /Ox /Og /Ob2 /Oi /Ot /Oy /GT /Qipo /GA /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "ALGORF_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /EHsc /MT /GS /Gy /fp:fast /Fo"Release/" /W4 /nologo /Zi /Qopenmp /Qftz /QxSSSE3 /Qparallel /Qwd174 /Qopenmp-lib:compat
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /OUT:"D:\Project\EComAlgo\Release/AlgoRF.dll" /INCREMENTAL:NO /nologo /MANIFEST /MANIFESTFILE:"Release\AlgoRF.dll.intermediate.manifest" /MANIFESTUAC:NO /DEF:"AlgoRF.def" /TLBID:1 /DEBUG /PDB:"D:\Project\EComAlgo\Release\AlgoRF.pdb" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:\Project\EComAlgo\Release\AlgoRF.lib" /MACHINE:X86 /DLL
同样条件下,下面这段代码就没什么问题。
IppiSize RoiSize = { m_imgSize.width - 2, m_imgSize.height - 2 };
st = ippiFilterMedianCross_16u_C1R(
pSrc + m_imgSize.width + 1, m_imgSize.width * sizeof( Ipp16u ),
pDst + m_imgSize.width + 1, m_imgSize.width * sizeof( Ipp16u ),
RoiSize,
ippMskSize3x3 );
if( ippStsNoErr != st )
return st;