gpt4 book ai didi

c++ - 如何创建 IPP(英特尔性能原语)C++ 包装函数?

转载 作者:行者123 更新时间:2023-11-30 02:11:29 28 4
gpt4 key购买 nike

IPP 是一个 C 库,有数百个这样的函数:

IppStatus ippiTranspose_8u_C1R(const Ipp8u* pSrc, int srcStep,
Ipp8u* pDst, int dstStep,
IppiSize roiSize));

为了能够以更方便、安全和一致的方式调用这些函数,我们需要为每个 C 函数提供一个 C++ 包装函数。例如:

void ippiTranspose(const Image<Ipp8u> &src, Rect srcRect, Image<Ipp8u> &dst, Point dstPos)
{
if (!src.valid()) throw "Invalid src";
if (!dst.valid()) throw "Invalid dst";
Rect srcRoi = srcRect.isEmpty() ? src.rect() : srcRect;
if (!src.rect().contains(srcRoi)) throw "Invalid src rect";
Rect dstRoi = Rect(dstPos, srcRoi.size());
if (!dst.rect().contains(dstRoi)) throw "Invalid dst rect";
IppStatus st = ippiTranspose_8u_C1R(&src.at(srcRoi.topLeft()), src.step(), &dst.at(dstRoi.topLeft()), dst.step(), toIppiSize(srcRoi.size());
if (st < 0) throw "ippiTranspose_8u_C1R failed";
}

有逻辑模式,可以应用于IPP中的所有功能。

如何自动生成所有这些包装器?

最佳答案

有一些由 Intel 提供的包装器,它们很好地隐藏在仅适用于 Windows 的 ipp-samples 中。我使用的是最新的 7.0 测试版。它们提供由 perl 脚本生成的 C++ header ,这些 header 应该用作 C++ 包装器。问题中 ippiTranspose_8u_C1R 函数的“包装器”是这样的:

 static inline IppStatus ippiTranspose_C1R( const Ipp8u* pSrc, int srcStep, Ipp8u* pDst, int dstStep, IppiSize roiSize) {
return ippiTranspose_8u_C1R( pSrc, srcStep, pDst, dstStep, roiSize );
}

这只是函数调用的一个较短版本。

我对 C 函数的良好 C++ 包装器的期望:

  • 将类 C 的参数映射到 C++(对象,模板)
  • 检查输入参数是否有效
  • 检查结果是成功、错误还是警告
  • 使用异常处理错误

我们需要一个真正适用于 C++ 世界的解决方案,英特尔!

我目前正在开发一个程序,它会像问题中的示例一样自动生成包装器,而且看起来不错。

感谢 Ross 指出英特尔的解决方案。

关于c++ - 如何创建 IPP(英特尔性能原语)C++ 包装函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3482763/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com