GTX泰坦上OpenCL的速度是CUDA的两倍

GTX泰坦上OpenCL的速度是CUDA的两倍,cuda,opencl,nvidia,arrayfire,Cuda,Opencl,Nvidia,Arrayfire,我刚刚在ArrayFire中实现了一个波束传播算法。我用我的GTX Titan卡使用OpenCL后端。OpenCL的运行速度约为每分钟25000步。然后我将它切换到CUDA后端,性能提高到每分钟50000步左右。这有点令人惊讶,但我认为它可能使用了OpenCL中没有的一些更高级的功能。然后,我使用GTX960卡运行了相同的测试。OpenCL和CUDA分别以每分钟22000步和23000步的速度运行。这是令人困惑的,因为我预计它将遵循与泰坦相同的模式。此外,我想我看到了我的笔记本电脑使用GT 73

我刚刚在ArrayFire中实现了一个波束传播算法。我用我的GTX Titan卡使用OpenCL后端。OpenCL的运行速度约为每分钟25000步。然后我将它切换到CUDA后端,性能提高到每分钟50000步左右。这有点令人惊讶,但我认为它可能使用了OpenCL中没有的一些更高级的功能。然后,我使用GTX960卡运行了相同的测试。OpenCL和CUDA分别以每分钟22000步和23000步的速度运行。这是令人困惑的,因为我预计它将遵循与泰坦相同的模式。此外,我想我看到了我的笔记本电脑使用GT 730M的2倍性能变化。我听说nvidia在一些卡上减慢了OpenCL的速度。他们对700系列这样做吗?

因为您没有显示任何代码,所以我只能提供一个分析器。例如,我使用的是amd的codexl,所有图片都是从一个过度同步的卷积算法中拍摄的,该算法在768x768矩阵上使用50x50的画笔面积进行计算。拥有大量的整数、局部整数数组和整数运算,以及最终相同数量的fp运算,会导致一些问题(工作在3台设备上平衡)

我相信nvidia也有类似的软件来检测应用程序中的漏洞

  • 每个函数的CPU时间分析可以让您知道主机端的热点。这里列出了5个最耗时的函数。因此,您可以优化主机函数。(单击其中一个函数将显示每个核心的cpu指令的详细性能计数器)

  • 内核分析通过向量单元显示是否存在瓶颈, 标量单位、内存操作和更多选项。这里可以看到内核占用率和波前数,但右边还有几十个其他的东西

点击kerneloccupancy单元,可以看到瓶颈的详细来源,如下图所示:

  • 应用程序时间线跟踪评测暴露了ndRangeKernel、读写操作、clFinish和其他API方法之间的差距,因此您可以查看是否存在冗余同步、多线程操作中的瓶颈和内存泄漏。(下图显示了垂直和水平方向上的孔,因为此示例中每个设备没有异步操作,并且存在冗余同步)

  • 此外,gtx 960无法击败titan,除非工作负载足够大,可以容纳960个线程,而对于titan来说又足够小(可能只是不同的设备处理导致的api开销)。它可以是titan,每个单元有192个内核(对于每个组384-768个线程更好),而gtx960每个单元有128个内核(对于每个组256-512-1024个线程更好的并行性)
  • 每分钟25000次迭代是每秒416次,即每一步大约2.5毫秒。 2.5毫秒意味着您在这个时间片上只能传输10-40 MB。发送的缓冲区大小是多少?过多的clFinish函数会导致至少数百微秒的延迟,当内核时间相当时(如1-2毫秒)

  • 增加执行规模,使titan的负载足以达到最佳性能(而不是峰值)

  • 当工作负载太小时,我的R7-240(320个内核)的性能优于我的HD7870(1280个内核),因为R7中的内核占用率更高,因为每个计算单元有更多的波前,ALU被馈送到%100(占用),而且准备计算的计算单元更少(开销),硬件中的同步更少(开销)。这就是为什么有不同类别的基准测试,如“性能”和“极限”。此外,较新的体系结构工作更接近其峰值性能

  • 也许,gtx 960可能无法管理同时运行的3个array fire应用程序(@15000/m),而titan可能会同时管理8-10个应用程序(@15000/m)(如果您选择应用程序级并行,而不是简单地增加每个步骤的工作大小)

编辑:示例代码实际上是计算类似扩散的相互作用。圆形源材料周围区域的平衡状态:


色带来自将所有颜色通道的fp四舍五入到整数的0-255范围(rgba每个1字节,应使用浮点,但pci-e预算不足)

由于您没有显示任何代码,我只能提供一个分析器。例如,我使用的是amd的codexl,所有图片都是从一个过度同步的卷积算法中拍摄的,该算法在768x768矩阵上使用50x50的画笔面积进行计算。具有大量的整数和局部整数数组以及整数运算和同等数量的fp运算最后,引出了一些问题(工作在3台设备上平衡)

我相信nvidia也有类似的软件来检测应用程序中的漏洞

  • 每个函数的CPU时间分析可让您了解主机端的热点。此处列出了最耗时的5个函数。因此,您可以优化主机函数。(单击其中一个函数可显示每个核心的CPU指令的详细性能计数器)

  • 内核分析通过向量单元显示是否存在瓶颈, 标量单位、内存操作和更多选项。这里可以看到内核占用率和波前数,但右边还有几十个其他选项

点击kerneloccupancy单元,可以看到瓶颈的详细来源,如下图所示:

  • 应用程序时间线跟踪评测暴露了ndRangeKernel、读写操作、clFinish和其他API方法之间的差距,因此您可以查看是否存在冗余同步、多线程操作中的瓶颈和内存泄漏。(下图显示了垂直和水平方向上的孔,因为此示例中每个设备没有异步操作,并且存在冗余同步)