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

时间:2010-11-02 16:55:24

标签: gpu opencl gpu-programming

我们的工作组正在一个侧面项目中慢慢尝试一点OpenCl。到目前为止,“每个人”都在使用NVIDIA Quadro FX 580.现在我们计划购买新电脑的新电脑,而不是FX 580,我们可以购买ATI FirePro V4800,仅售15Eur,给我们1Gig而不是512Gig Ram将有助于我们的数据密集型任务。

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

我阅读了以下SO问题Running OpenCL on hardware from mixed vendors,这对于针对不同供应商的开发非常悲观。另一方面,这个问题已经有一年了。

你推荐什么?

4 个答案:

答案 0 :(得分:2)

我之前曾使用CUDA编程语言进行过广泛的工作。

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

我遇到的一个广泛使用openCL进行大规模开发的项目是http://sourceforge.net/projects/hypgad/。查看该组的源代码并了解他们如何在包括索尼单元处理器在内的众多硬件上开发应用程序可能是一个好主意。

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

答案 1 :(得分:0)

您是否需要代码在两个硬件位上保持不变?如果是这样,您可能需要针对有限的常用功能子集进行开发。

如果你可以在每个上运行稍微不同的c ode,你可能会获得更好的性能 - 在CUDA / OpenCL中,你通常必须调整ram数量的算法,无论如何都要调整GPU引擎的数量,所以它不应该更多努力调整NVidia / AMD

答案 2 :(得分:0)

最大的问题是工作组大小。我使用的一些ATI卡在64以上崩溃,但它可能是我正在使用的Apple OSX 10.6驱动程序。

答案 3 :(得分:0)

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