4

我在一个使用 CUDA 处理图像的项目中。该项目只是图像的加法或减法。

请问您的专业意见,哪个最好,两者的优缺点是什么?

我感谢大家的意见和/或建议,因为这个项目对我来说非常重要。

4

4 回答 4

6

General answer: It doesn't matter. Use the language you're more comfortable with.

Keep in mind, however, that pycuda is only a wrapper around the CUDA C interface, so it may not always be up-to-date, also it adds another potential source of bugs, …

Python is great at rapid prototyping, so I'd personally go for Python. You can always switch to C++ later if you need to.

于 2011-02-11T15:37:19.470 回答
3

如果您的管道的其余部分使用 Python,并且您已经在使用 Numpy 来加快速度,那么 pyCUDA 是加速昂贵操作的一个很好的补充。但是,根据图像的大小和程序流程,使用 pyCUDA 可能不会获得太多的加速。在 PCI 总线上来回传递数据时存在延迟,这只能通过大数据量来弥补。

在您的情况下(加法和减法),pyCUDA 中有内置操作,您可以利用这些操作来发挥自己的优势。但是,根据我的经验,将 pyCUDA 用于不平凡的事情需要首先了解很多关于 CUDA 的工作原理。对于没有 CUDA 知识的人来说,pyCUDA 可能是一个陡峭的学习曲线。

于 2011-02-11T17:05:05.687 回答
2

看看openCV,它包含很多图像处理功能和所有加载/保存/显示图像和操作相机的助手。

它现在还支持 CUDA,一些图像处理功能已在 CUDA 中重新实现,它为您提供了一个很好的框架来做自己的事情。

于 2011-02-11T18:19:44.113 回答
0

亚历克斯的回答是对的。在包装器中消耗的时间是最少的。请注意,PyCUDA 有一些很好的元编程结构用于生成可能有用的内核。

如果您所做的只是添加或减去图像的元素,那么您可能根本不应该使用 CUDA。在 PCI-E 总线上来回传输所需的时间将使您从并行性中获得的节省量相形见绌。

每当您处理 CUDA 时,考虑 CGMA 比率(计算与全局内存访问比率)很有用。您的加法/减法只是 2 次内存访问(1 次读取和 1 次写入)的 1 次浮点运算。从 CUDA 的角度来看,这最终会变得非常糟糕。

于 2011-02-14T18:09:55.237 回答