【发布时间】:2013-02-12 01:18:03
【问题描述】:
我开发了一个简单的函数,用于使用 CUDA C++ 水平或垂直镜像图像。
后来我才知道,NVIDIA Performance Primitives Library 也提供了镜像的功能。
为了比较,我将我的函数与 NPP 进行了计时。令人惊讶的是,我的功能表现出色(虽然差距很小,但仍然......)。
我使用 Windows 计时器和 CUDA 计时器多次确认结果。
我的问题是:NPP 功能是否已针对 NVIDIA GPU 进行了完全优化?
我正在使用 CUDA 5.0、GeForce GTX460M(Compute 2.1)和 Windows 8 进行开发。
【问题讨论】:
-
有什么区别,以百分比表示?镜像操作将受内存限制,并且较新的设备可以灵活地处理它们将有效处理的内存访问模式类型。在较新的设备上,幼稚的实现可能接近最佳。也许 NPP 版本更适合旧设备。您可以从分析器获取内核的内存带宽统计信息,并将它们与您设备的最大值进行比较。
-
我测试了 4 种类型的图像和 2 种不同的尺寸。 8 位、16 位、1 通道、3 通道、(1280 x 720)、(1920 x 1080)。我在大小为 (1280 x 720) 的 16 位单通道图像中获得了最大加速,比 NPP 快 18.75%。
-
您说得对,NPP 的性能不足。我找到了更好的库来进行 CUDA 图像处理。我个人喜欢 ArrayFire 的图像处理选择并且发现它很快,accelereyes.com/arrayfire/c/group__image__mat.htm 其他人报告使用 OpenCV 的 GPU 功能,尽管我没有听说过很好的事情。巴基斯坦的 Tunacode 也有一些东西。
-
我认为 NPP 是我的 NVIDIA 本身,所以它应该是最快的。
-
硬件公司产生的许多软件包也存在同样的问题。