pyCUDA与C的性能差异?

我是CUDA编程的新手,我想知道如何将pyCUDA的性能与简单C中实现的程序进行比较。性能大致相同吗? 我应该注意哪些瓶颈?

编辑:我显然首先尝试谷歌这个问题,并惊讶于没有找到任何信息。 即我会排除pyCUDA人在他们的常见问题解答中回答这个问题。

如果您正在使用CUDA – 无论是直接通过C还是使用pyCUDA – 您所做的所有繁重的数字工作都是在gpu上执行的内核中完成的,并且是用CUDA C编写的(直接由您编写,或者间接使用elementwise编写)内核)。 因此,代码的这些部分的性能应该没有真正的区别。

现在,如果你使用pyCUDA,那么数组的初始化和任何后期工作分析都将在python中完成(可能是numpy),而且通常比直接用编译语言做得慢得多(尽管如果你有的话)以这样的方式构建你的numpy / scipy,它直接链接到高性能库,然后这些调用至少会在任何一种语言中执行相同的操作)。 但是,希望您的初始化和最终化只是您必须完成的工作总量的一小部分,因此即使存在大量开销,它仍然希望不会对整体运行时产生巨大影响。

事实上,如果事实certificate计算的python部分确实损害了应用程序的性能,那么开始在pyCUDA中进行开发可能仍然是一种很好的入门方式,因为开发非常简单,并且您可以随时重新开始在C语言中实现Python中速度太慢的代码部分,并从python中调用那些部分,获得两个世界中最好的部分。

如果您想通过不同方式使用pyCUDA来了解性能差异,请参阅pyCUDA Wiki示例中包含的SimpleSpeedTest.py。 它基于pyCUDA中封装的CUDA C内核完成的相同任务,以及pyCUDA设计人员创建的几个抽象基准。 有性能差异。

我一直在使用pyCUDA一段时间,我喜欢使用它进行原型设计,因为它加快了将想法转化为工作代码的过程。

使用pyCUDA,您将使用C ++编写CUDA内核,它是CUDA,因此运行该代码的性能不应该有差异。 但是,您在Python中编写的代码的性能将有所不同,以设置或使用pyCUDA内核的结果与您在C中编写的结果。