需要为 CPU 和 GPU 平台安装 opencl?

Posted

技术标签:

【中文标题】需要为 CPU 和 GPU 平台安装 opencl?【英文标题】:Need to install opencl for CPU and GPU platforms? 【发布时间】:2012-04-12 07:36:55 【问题描述】:

我有一个带有 NVidia 显卡的系统,我正在考虑使用 openCL 代替 openMP 来处理一些小型 CPU 任务(感谢 VS2010 making openMP useless)

由于我安装了 NVidia 的 opencl SDK clGetPlatformIDs() 只返回一个平台(NVidia 的),因此只返回一个设备(GPU)。

我是否还需要安装 Intel 的 openCL sdk 才能访问 CPU 平台? CPU平台不应该一直可用吗?我的意思是,你怎么没有cpu? 您如何设法同时针对两个 openCL SDK 进行构建?

【问题讨论】:

好的,所以我还需要安装 Intel opencl sdk - 这个问题可能应该是“如何在未安装 SDK 的情况下将 opencl 应用程序分发到机器上?” 我对此很陌生,但我不明白通过在 CPU 上运行 OpenCL 代码而不是在 GPU 上运行会获得什么计算优势? @Koder101,在这种情况下,我使用 Nvidia 在台式机上进行开发,但目标是只有 CPU 的嵌入式 PC。 好的,谢谢您的回答。但是,如果最终目标是只使用 CPU(在任何平台上),那么使用基于 GPU 的库有什么意义,为什么不直接使用传统语言(具有跨平台框架)......? @Koder101 opencl 将在 CPU 上编译为优化的并行指令(SIMD 等),因此可能比常规 C 编译器更好。虽然第一次编译 opencl 的开销很大 【参考方案1】:

您需要有一个提供 CPU 接口的 SDK。 nVidia 没有,AMD 和 Intel 的 SDK 有;在我的例子中,来自 Intel 的速度明显(大约 10 倍)快,这可能是由于我的编程不当造成的。

运行程序不需要 SDK,只需要运行时。在 Linux 中,每个供应商都会在 /etc/OpenCL/vendors/*.icd 中安装一个文件,其中包含要使用的运行时库的路径。您链接到的 OpenCL 运行时 (libOpenCL.so) 会对其进行扫描,然后在查询特定平台上的设备时调用供应商的每个库。

在 Linux 中,GPU 驱动程序会自动安装 OpenCL 运行时,英特尔运行时很可能可以从 SDK 中单独下载,但当然也是 SDK 的一部分。

【讨论】:

目前还不清楚你需要用你的 opencl 应用程序分发什么(至少在 Windows 上)英特尔 bin 文件夹是 35 个文件和 68Mb。 /usr/lib64/OpenCL/vendors/intel 这里有 82M。不足为奇,因为它包含 clang 编译器,仅它就有 25M。这些文件也有 35 个。 SDK 还包含一些头文件。 @eudoxos 根据规范,ICD 概念只是一个扩展,因此是可选的。那么你知道没有这个扩展 OpenCL 是如何工作的吗?使用扩展名链接到 ICD 加载程序 (libOpenCL.so/OpenCL.dll),但是没有 ICD 扩展名你链接到什么?【参考方案2】:

今天我终于开始尝试开始进行 openCl 开发,哇……这根本不是直截了当的。

有一个 AMD sdk,有一个 intel sdk,有一个 nvidia sdk,每个都有自己的属性(仅 CPU 与仅 GPU 与仅支持特定显卡?)

必须采用这种方式可能有正当的技术原因,但我真的希望只有一个 sdk,并且在编程时也许您可以指定 GPU / CPU 任务,或者它可能会使用最有意义的任何资源/ 表现最好或某事。

虽然我猜是时候潜入...试图决定我是使用 CPU 还是 GPU。我有一台价值 4000 美元的全新 Alienware 笔记本电脑,配备 SLI 视频卡,但还有一个 8 核 cpu,所以是的……我想我必须尝试几个 sdk,看看哪些预成型件最适合我的需要?

不确定我的应用程序的最终用户会做什么......他们似乎无法切换开关以使其在 cpu 或 gpu 上运行。

OpenCL 领域确实需要一些帮助...

【讨论】:

无论您使用哪个 OpenCL SDK,使用任何一个,您的二进制文件都可以在任何地方工作。您可能拥有 Intel (CPU) OpenCL 和 NVidia OpenCL,因此您可以从字面上“翻转开关”并在 cpu 上运行 opencl。 AMD opencl 支持在 CPU 上运行内核。借助一些巧妙的预处理器技巧,内核可以直接编译为 CPU 代码路径的应用程序,并在可用的情况下使用 opencl 运行。 @doug65536 你能回答我的问题***.com/questions/21937673/…吗?我真的处于绝望的境地,似乎无法在网上找到有关此主题的任何帮助...

以上是关于需要为 CPU 和 GPU 平台安装 opencl?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCL-1-编程四大模型介绍

OpenCL现在都支持哪些并行设备

OpenCL是啥,查了半天没看懂,能简单明了的告诉我是干啥的有啥功能吗

Linux Arch OpenCL ICD 加载器 - Nvidia GPU、Intel CPU

在 Linux 中的多个平台上启用 OpenCL?如何处理 ICD 文件?

从零开始学习OpenCL开发架构