【问题标题】:Aren't NPP functions completely optimized?NPP功能不是完全优化了吗?
【发布时间】: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 本身,所以它应该是最快的。
  • 硬件公司产生的许多软件包也存在同样的问题。

标签: cuda npp


【解决方案1】:

发布此答案可能会导致没有选票。 :)

NVIDIA 不断努力改进我们所有的 CUDA 库。 NPP 是一个特别大的库,需要维护 4000 多个函数。我们有一个现实的目标,即为库提供比 CPU 等效的有用加速,在我们所有的 GPU 和支持的操作系统上进行测试,并积极改进和维护。有问题的功能(镜像)是一个已知的性能问题,我们将在未来的版本中改进。如果您需要优化特定功能,最好的方法是使用NVIDIA CUDA registered developers 提供的错误提交表单提交 RFE 错误(增强请求)。

顺便说一句,我不认为任何库都可以“完全优化”。有了一个大型库来支持庞大且不断增长的硬件基础,优化它的工作永远不会完成! :)

我们鼓励人们继续尝试并超越 NVIDIA 库,因为总体而言,它推进了最先进的技术并有利于计算生态系统。

【讨论】:

  • 顺便说一句……可以肯定地说,只要有足够的时间和精力,就原始性能而言,通常可以击败库函数。图书馆通常会做出更少的假设,以便更广泛地适用。当您自己滚动时,您可以使用所有特定于您的情况的假设来加快速度。想到的一个例子(不是 GPGPU,但可能适用相同的想法)是排序。如果您对自己的数据了解很多并且愿意将这些假设融入代码中,那么击败标准排序方法并不难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2016-04-26
相关资源
最近更新 更多