当前,我们在应用程序中使用IPP 5.2,我尝试使用Nuget软件包将其替换为IPP 2019。我不理解IPP 5.2和IPP 2019之间使用CUBIC调整大小的性能比较。
我的CPU是Intel Core i7-8700k。在我的项目中。对于IPP 5.2,版本信息为0x3BBBF280“ 6.0 Update 2 build 167.41”,名称为0x3BBBF2A8“ ippip8-6.0.dll +”。
对于IPP 2019,版本为x3b834230“ 2019.0.4(r62443)”,名称为0x3b834220“ ippIP AVX2(h9)”。三次参数B设置为0.15,C设置为0.5。
使用三次调整大小的比较测试,源图像的大小保持不变,并且调整大小因子不同。使用了三次方法ippiResizeCubic_16u_C1R。重复次数设置为1000。
当源图像的大小为(30,27)小图像时,IPP 5的性能将优于IPP2019。Comparison Test result with size (30,27)
当源图像的大小为(150,136)时,IPP 5的性能几乎与IPP 2019相同。Comparison Test result with size (150,136)
当源映像的大小大于(150,136)时(如第三张大小为(480,517)的映像),IPP 2019的速度比IPP 5快。Comparison Test result with size (480,517)
IPL项目中的旧IPP调整大小功能
ippiResize_16u_C1R((Ipp16u*)pSrc, srcSize, src->widthStep, srcRoi,
(Ipp16u*)pDst, dst->widthStep, dstRoiSize, xFactor, yFactor, interpolation);
三次插值类型的新实现
ippiResizeGetSize_16u(srcSize, dstRoiSize, ippCubic, 0, &specSize, &initSize);
pInitBuf = ippsMalloc_8u(initSize);
pSpec = (IppiResizeSpec_32f*)ippsMalloc_8u(specSize);
ippiResizeCubicInit_16u(srcSize, dstRoiSize, CubicParameterB, CubicParameterC, pSpec, pInitBuf);
ippiResizeGetBufferSize_8u(pSpec, dstRoiSize,1, &bufSize);
pBuffer = ippsMalloc_8u(bufSize);
ippiResizeCubic_16u_C1R((Ipp16u*)pSrc, src->widthStep, (Ipp16u*)pDst, dst->widthStep, dstOffset, dstRoiSize, ippBorderRepl, borderValue, pSpec, pBuffer);
iplFree(pInitBuf);
iplFree(pSpec);
iplFree(pBuffer);
从我得到的测试结果来看,IPP 2019在处理较大图像时速度更快,但是在调整较小图像大小时速度较慢。这是因为IPP 2019中使用了不同的三次算法。
若要调整较小图像的大小(30,27),使用IPP 2019调整大小的图像的质量是否优于使用IPP 5调整大小的图像?
感谢您的帮助,任何建议都将受到赞赏!
亲切的问候,
宁
最佳答案
实际上,此问题已在最新的IPP 2019 u5中得到确认,并已针对IPP团队升级。由于重新设计了IPP调整大小功能,所谓的小图像尺寸(here已讨论了该主题。
关于c++ - 在IPP 2019中使用Cubic调整大小的速度比IPP 5.2慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57817717/