在混合供应商的硬件上运行 OpenCL

2024-01-05

我一直在他们的 Stream 2.0 beta 中使用 ATI OpenCL 实现。当前测试版中的 OpenCL 目前仅使用 CPU,下一版本应该支持 GPU 内核。我下载 Stream 是因为我的工作机器上有 ATI GPU。

我编写的软件可以通过使用 GPU 获得巨大收益。然而,该软件在客户计算机上运行,​​我没有奢侈(正如许多科学计算环境所拥有的那样)来选择要为其开发和优化的确切硬件。所以我的问题是,如果我将 ATI OpenCL 实现与我的应用程序一起分发,这是否意味着它将永远无法使用例如英伟达显卡?如果我使用 NVidia OpenCL SDK,它永远不会在 AMD 芯片上以最佳状态运行(考虑 ATI/AMD 链接)?

换句话说,最终谁负责提供OpenCL的实现?用户是否能够例如为他们的 NVidia 显卡安装一个 OpenCL“驱动程序”,同时安装一个可以在 AMD CPU 上提供最佳性能的“驱动程序”?

顺便说一句,除了 Khronos 留言板之外,OpenCL 是否还有任何好的/活跃的支持论坛,或者这是一个可以去的地方?我看到 ATI 有一块主板,NVidia 大概也有自己的主板,OpenCL 用户/开发人员社区在哪里闲逛?难道已经合并到一处了吗?


我知道这是一个老问题,上面有旧答案。我想我会用最新的答案来更新它。

是的,只要正确编写平台和设备枚举代码,OpenCL 内核和代码的一种实现就可以在当今的各种设备上运行。编写正确的平台和设备枚举代码非常容易,棘手的部分是选择哪个平台或设备。您可能应该在应用程序中提供一个配置选项,用户可以在其中选择一个,或者针对每个选项运行微基准测试并动态选择一个并缓存基准结果。

人们可以而且将会拥有多个平台。例如,我的系统有 GTX 580 SLI,因此它在 NVidia 平台中有两个设备。它还具有 Intel OpenCL SDK,因此我的 CoreI7 990x Extreme CPU 也作为 Intel 平台中的设备出现。

是的,使用 NVidia OpenCL SDK 等开发和构建的二进制文件将在 ATI 或 Intel OpenCL 上运行,反之亦然。不用再担心这个了。

显然,最终用户可能没有任何 OpenCL,因此您可能需要延迟加载或 LoadLibrary opencl.dll 和动态链接。

我强烈建议在 NVidia GPU 和 AMD GPU 上针对 Intel OpenCL SDK 测试您的代码。您可能会发现在一个平台上导致问题的错误,但在其他平台上运行良好。您还可能会发现,由于驱动程序错误,完全良好的代码在这些平台之一上神秘地无法给出正确的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在混合供应商的硬件上运行 OpenCL 的相关文章

  • 工作组之间的 OpenCL 同步

    是否可以同步 OpenCL 工作组 例如 我有 100 个工作组 每个工作组只有一个项目 不要问我为什么 这是一个例子 我需要对每个工作项设置障碍 以确保所有工作组都会在这 100 个工作组中的每个工作项达到此障碍点后继续 不 你不能 您可
  • opencl中的时钟()

    我知道CUDA中有一个函数clock 你可以在其中放入内核代码并查询GPU时间 但我想知道OpenCL中是否存在这样的东西 有没有办法查询OpenCL中的GPU时间 我正在使用 NVIDIA 的工具包 OpenCL 没有直接查询时钟周期的方
  • OpenCL 双精度与 CPU 双精度不同

    我正在 Linux 中使用 GeForce GT 610 卡进行 OpenCL 编程 我的CPU和GPU双精度结果不一致 我可以在这里发布部分代码 但我首先想知道是否有其他人遇到过这个问题 当我运行多次迭代的循环时 GPU 和 CPU 双精
  • OpenCL 编译器预处理定义?

    我正在 Snow Leopard 上开发 OpenCL 代码 并且了解 OpenCL 即时编译是由 Clang LLVM 完成的 是否使用了 C 预处理器 有没有办法使用编译器设置预处理定义 存在哪些定义 我希望代码知道它是为 CPU 还是
  • 在 OpenCL 内核中动态创建本地数组

    我有一个 OpenCL 内核 需要将一个数组作为多个数组进行处理 其中每个子数组总和都保存在本地缓存数组中 例如 想象一下捕鸟数组 1 2 3 4 10 30 1 23 每个工作组都有一个数组 在示例中我们有 2 个工作组 每个工作项处理两
  • OpenCl 代码可以在一台机器上运行,但我在另一台机器上收到 CL_INVALID_KERNEL_ARGS

    我有以下代码 它在一台机器上运行良好 但是当我尝试在另一台具有更好显卡的机器上运行它时 我收到错误 global 0 512 global 1 512 local 0 16 local 1 16 ciErrNum clEnqueueNDRa
  • 合理化我的简单 OpenCL 内核中有关全局内存的情况

    const char programSource kernel void vecAdd global int a global int b global int c int gid get global id 0 for int i 0 i
  • CUDA PTX 代码 %envreg<32> 特殊寄存器

    我尝试使用 CUDA 驱动程序 API 运行由 cl 内核生成的 PTX 汇编代码 我采取的步骤是这些 标准 opencl 程序 1 加载 cl内核 2 JIT编译 3 获取编译好的ptx代码并保存 到目前为止 一切都很好 我注意到 ptx
  • NVIDIA GPU 的 CUDA 核心和 OpenCL 计算单元之间有什么关系?

    我的电脑有一块 GeForce GTX 960M NVIDIA 声称它有 640 个 CUDA 核心 然而 当我运行 clGetDeviceInfo 来查找计算机中的计算单元数量时 它打印出 5 见下图 听起来 CUDA 核心与 OpenC
  • OpenCL 内置函数“选择”

    我不清楚内置 OpenCL 函数的目的是什么select 有人可以澄清一下吗 来自 OpenCL 规范 功能选择 基因型a 基因型b 基因型c 返回 对于向量类型的每个分量 结果 i 如果设置了 c i 的 MSB b i a i 在这种情
  • 如何在 Docker 容器内运行 OpenCL + OpenGL?

    目的是在 Docker 容器内运行 OpenCL OpenGL 互操作 应用程序 但我还没有成功 Intro 我有配备 NVidia 显卡的笔记本电脑 因此我认为利用 NVidia Dockerfiles 1 2 将是一个很好的起点 以下
  • 空的 openCL 程序抛出弃用警告

    我下载了 AMD APP 3 0 SDK 一旦包含 include
  • OpenCL:在内核中手动引发异常

    是否可以在 OpenCL 中手动引发异常 仅用于调试目的 我的代码中有一个非常奇怪的错误 当我计算两个双精度值并将它们相加时 主机报告 CL OUT OF RESOURCE 但是 如果我不添加这两个值 主机不会报告任何错误 OpenCL 不
  • 杀死 OpenCL 内核

    有没有办法通过 OpenCL API 终止正在运行的 OpenCL 内核 我在规范中没有找到任何内容 我能想到的唯一解决方案是 1 定期检查内核中主机希望内核停止时写入的标志 或 2 在单独的进程中运行内核并终止整个进程 我认为这两个都不是
  • 在内核 OpenCL 中实现 FIFO 的最佳方法

    目标 在 OpenCL 中实现下图所示 OpenCl 内核所需的主要内容是将系数数组和临时数组相乘 然后最后将所有这些值累加为 1 这可能是最耗时的操作 并行性在这里非常有帮助 我正在为内核使用一个辅助函数来执行乘法和加法 我希望这个函数也
  • Linux 上的 OpenCL 编译

    我是 OpenCL 的新手 从昨天开始 我尝试使用 OpenCL 进行并行编程 而不是使用我更熟悉且以前体验过的 CUDA 现在我有 NVIDIA GTX 580 GPU Ubuntu Linux 12 04 操作系统和 CUDA SDK
  • OpenCL 与 OpenMP 性能对比 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否有研究比较 OpenCL 与 OpenMP 的性能 具体来说 我对使用 OpenCL 启动线程的开销成本感兴趣 例如 如果将域分解
  • 如何在 pyopencl 中创建可变大小的 __local 内存?

    在我的 C OpenCL 代码中我使用clSetKernelArg创建 可变尺寸 local我的内核中使用的内存 OpenCL 本身不提供该内存 看我的例子 clSetKernelArg clKernel ArgCounter sizeof
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 是否可以保证 WaveFront (OpenCL) 中的所有线程始终同步?

    众所周知 有WARP 在CUDA中 和WaveFront 在OpenCL中 http courses cs washington edu courses cse471 13sp lectures GPUsStudents pdf http

随机推荐