不是';核电站功能完全优化? 我开发了一个天真的函数,用于使用CUDA C++对图像进行水平或垂直镜像。p>

不是';核电站功能完全优化? 我开发了一个天真的函数,用于使用CUDA C++对图像进行水平或垂直镜像。p>,cuda,npp,Cuda,Npp,然后我了解到NVIDIA Performance Primitives Library还提供了图像镜像功能 只是为了比较,我对NPP的功能进行了计时。令人惊讶的是,我的功能表现出色(虽然差距很小,但仍然…) 我使用Windows定时器和CUDA定时器多次确认结果 我的问题是:NPP功能是否针对NVIDIA GPU进行了全面优化 我正在使用CUDA 5.0、GeForce GTX460M(Compute 2.1)和Windows 8进行开发。我发布此答案可能会导致没有投票权。:) NVIDIA不断

然后我了解到NVIDIA Performance Primitives Library还提供了图像镜像功能

只是为了比较,我对NPP的功能进行了计时。令人惊讶的是,我的功能表现出色(虽然差距很小,但仍然…)

我使用Windows定时器和CUDA定时器多次确认结果

我的问题是:NPP功能是否针对NVIDIA GPU进行了全面优化


我正在使用CUDA 5.0、GeForce GTX460M(Compute 2.1)和Windows 8进行开发。

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

NVIDIA不断努力改进我们所有的CUDA库。NPP是一个特别大的库,需要维护4000多个函数。我们有一个现实的目标,即为库提供比CPU等效物更有用的加速,这些库在我们所有的GPU和受支持的操作系统上都经过测试,并得到积极的改进和维护。有问题的函数(镜像)是一个已知的性能问题,我们将在未来的版本中改进它。如果您需要优化某个特定的函数,那么确定其优先级的最佳方法是使用可供访问的bug提交表单提交RFE bug(增强请求)

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


我们鼓励人们继续尝试并超越NVIDIA图书馆,因为总体而言,它提升了最先进的技术水平,有益于计算生态系统。

以百分比表示,两者的区别是什么?镜像操作将受到内存限制,较新的设备可以灵活地处理哪些类型的内存访问模式。在较新的设备上,简单的实现可能接近最优。也许NPP版本更适用于较旧的设备。您可以从profiler获取内核的内存带宽统计数据,并将其与设备的最大内存带宽进行比较。8位,16位,1通道,3通道,(1280 x 720),(1920 x 1080)。我在16位单通道图像(1280 x 720)中获得了最大加速比,比NPP快18.75%。NPP的性能不足,你说得对。我找到了更好的库来进行CUDA图像处理。我个人喜欢ArrayFire的图像处理选择,并且发现它很快,其他人报告说使用了OpenCV的GPU功能,尽管我还没有听说过这方面的好消息。巴基斯坦的Tunacode也有一些东西。我认为,由于NPP是由我的NVIDIA制造的,所以它应该是最快的。同样的问题也可以说是来自硬件公司的许多软件包。顺便说一下。。。可以肯定地说,只要有足够的时间和精力,就原始性能而言,通常可以击败库函数。库通常会做出较少的假设,以便更广泛地应用。当你自己动手时,你可以使用所有特定于你的情况的假设来加速事情的发展。我想到的一个例子(不是GPGPU,但同样的想法可能适用)是排序。如果您对数据了解很多,并且愿意将这些假设加入到代码中,就不难击败标准排序方法。