目前我们在我们的应用程序中使用IPP 5.2,我尝试将其替换为带有Nuget包的IPP 2019。我不理解IPP 5.2和IPP 2019之间的resize和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的性能优于IPP 2019。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调整大小的图像更好吗?
感谢您的帮助,任何建议都将不胜感激!
致以亲切的问候,
宁宁
发布于 2019-10-21 11:33:03
实际上,这个问题已经在最新的IPP 2019 u5中得到了确认,并针对IPP团队进行了升级。由于重新设计了IPP大小调整函数,所谓的小图像尺寸(< 120 )会发生性能回归。由于输入图像尺寸更大,最新版本的IPP的性能明显优于IPP 5.2和6.0。这个话题已经在here上讨论过了。
https://stackoverflow.com/questions/57817717
复制相似问题