在ATI和Nvidia上同时使用OpenCl进行开发

在ATI和Nvidia上同时使用OpenCl进行开发,opencl,gpu,Opencl,Gpu,我们的工作组正在一个辅助项目中慢慢地尝试一点OpenCl。到目前为止,“每个人”都在开发NVIDIA Quadro FX 580。现在,我们正计划为新学院购买新电脑,而不是FX 580,我们可以购买ATI FirePro V4800,它只需多花费15欧元,并为我们提供1Gig而不是512Gig的Ram,这将有利于我们的数据密集型任务 那么,在Nvidia和ATI上同时开发OpenCl代码有多麻烦 我阅读了下面的SO问题,对于在不同供应商上/为不同供应商开发非常悲观。另一方面,这个问题已经有一年了

我们的工作组正在一个辅助项目中慢慢地尝试一点OpenCl。到目前为止,“每个人”都在开发NVIDIA Quadro FX 580。现在,我们正计划为新学院购买新电脑,而不是FX 580,我们可以购买ATI FirePro V4800,它只需多花费15欧元,并为我们提供1Gig而不是512Gig的Ram,这将有利于我们的数据密集型任务

那么,在Nvidia和ATI上同时开发OpenCl代码有多麻烦

我阅读了下面的SO问题,对于在不同供应商上/为不同供应商开发非常悲观。另一方面,这个问题已经有一年了


你推荐什么?

我以前曾广泛使用CUDA编程语言

我一直计划开始使用OpenCL开发应用程序。正如您所提到的,OpenCL的最佳功能之一是在许多供应商硬件(英特尔、AMD和Nvidia)上运行

我遇到的一个广泛使用openCL进行大规模开发的项目是。看看这个小组的源代码,了解他们是如何在包括sony cell处理器在内的众多硬件上开发应用程序的,这可能是一个好主意


另一种方法是使用PyOPENCL,它提供了比OpenCL更高的抽象,可以显著减少编码工作量

您是否需要代码在两个硬件位上运行不变?如果是这样,您可能需要开发有限的通用函数子集


如果你可以在每一个上运行稍微不同的代码,你可能会获得更好的性能-在CUDA/OpenCL中,你通常必须根据ram的数量、GPU引擎的数量来调整算法,因此也不需要做更多的工作来调整NVidia/AMD,最大的问题是工作组的大小。我使用的一些ATI卡在64以上时崩溃,但我使用的可能是Apple OSX 10.6驱动程序

为ATI和NVIDIA开发实际上并不太困难,只要您避免使用任一供应商SDK的任何部分。坚持OpenCL规范()中定义的OpenCL,代码将保持语法可移植性。由于基础架构的不同,性能可移植性可能是一个问题。本地和全局工作规模确实必须为每个卡独立确定,以最大限度地提高性能。另一件需要注意的事情是正在使用的类型。矢量类型(float2、float4)在ATI卡上特别有用,因为每个处理元素实际上包含4个执行单元(每个RGB颜色通道一个,加上aplha)