【问题标题】:Developing with OpenCl on ATI and Nvidia on the same time在 ATI 和 Nvidia 上同时使用 OpenCl 进行开发
【发布时间】:2011-05-04 01:33:26
【问题描述】:

我们的工作组正在一个业余项目中慢慢尝试一点点 OpenCl。到目前为止,“每个人”都在为 NVIDIA Quadro FX 580 工作。现在我们计划为新同事购买新计算机,我们可以购买 ATI FirePro V4800 来代替 FX 580,它的成本仅高出 15 欧元,并且给我们 1Gig 而不是 512Gig Ram 这将有利于我们的数据密集型任务。

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

我阅读了以下 SO 问题,Running OpenCL on hardware from mixed vendors,它对在不同供应商上/为不同供应商进行开发非常悲观。另一方面,这个问题已经存在一年了。

你有什么推荐的?

【问题讨论】:

    标签: opencl gpu


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      如果您可以在每个代码上运行稍微不同的代码,您可能会获得更好的性能 - 在 CUDA/OpenCL 中,您通常必须针对 ram 的数量、GPU 引擎的数量调整算法,所以它不应该更多努力为 NVidia/AMD 进行调整

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-28
            • 2014-06-18
            • 2018-07-21
            • 2011-08-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多