我使用的是CUDA 6.0和与CUDA SDK捆绑在一起的OpenCL实现。我为每个平台有两个相同的内核(它们在平台特定的关键字中有所不同)。他们只能读写全局内存,每个线程都有不同的位置。 CUDA的启动配置为200 blocks of 250 threads (1D)
,它直接对应于OpenCL的配置 - 50,000 global work size and 250 local work size
。CUDA vs OpenCL性能对比
OpenCL代码运行速度更快。这是可能的还是我计时错了?我的理解是NVIDIA的OpenCL实现基于CUDA的实现。与OpenCL相比,我的性能提高了15%左右。
如果你能提出为什么我可能会看到这一点,并且可能与NVIDIA实施的CUDA和OpenCL之间的某些差异,那将是很棒的事情。
结果在问题和案例中不一致。但你的也许是对的。 OpenCL在默认情况下是异步的,因此,如果您使用CUDA(非异步),那么性能可能会略微低于OpenCL。 – DarkZeros
我已经听说NVIDIA的OCL实现是基于CUDA的。然而,每次我试图找到一些消息来源时,我从来没有找到任何证据。我的结论是,基于CUDA被错误地用作语言名称的事实是错误的,而实际上它是根据维基百科的“并行计算平台和编程模型”(Compute Unified Device Architecture)。因此,当你看到NVIDIA的幻灯片显示在OCL下有一个称为CUDA的GPU,这是一个CUDA芯片。如果你有任何问题,你可以发布你的来源吗?我很想知道。 – CaptainObvious
OpenCL和CUDA完全不同。他们最终都使用相同的硬件。但是就像OpenGL和DirectX一样,其他人也不在其他人之下。要说明这一点,要点是库不同,编译器不同,执行模型也不同。有些部分可能很常见,但大多数不是。 – DarkZeros