1

我将编写一个在不同系统上运行的 OpenCL 程序。因此,我想知道如果发生以下情况会发生什么:

  • 那台机器没有支持 OpenCL 的 GPU,而是支持 OpenCL 的 CPU。

  • 那台机器没有支持 OpenCL 的 GPU 和 CPU。

我只想知道程序是否运行正确,我完全理解我们会失去性能。

提前致谢 :]

4

2 回答 2

1

那台机器没有支持 OpenCL 的 GPU,而是支持 OpenCL 的 CPU。

您的 OpenCL 内核仍然可以正常工作(当然,尽管存在驱动程序错误),但速度可能会慢一些。理想情况下,您将拥有两个内核版本,一个 CPU 和一个 GPU,以适应这两种架构。但是请注意,硬件限制(以及 OpenCL 版本限制和供应商扩展)使这变得更加复杂。换句话说,这取决于您的代码在做什么。但总的来说,如果您对可移植性稍加注意,它就会起作用。

当然,最好的检查方法是在代表客户机器的硬件样本上测试代码。这样你就可以确定了。

那台机器没有支持 OpenCL 的 GPU 和 CPU。

如果没有 OpenCL 硬件,您的 OpenCL 内核将无法运行。您将需要一些本机后备。但实际上 CPU 驱动程序适用于所有现代操作系统和处理器,因此如果您的用户群愿意安装驱动程序(如果还没有驱动程序),您可以依赖可用的 CPU 驱动程序。

于 2013-11-04T22:43:13.197 回答
1

那台机器没有支持 OpenCL 的 GPU,而是支持 OpenCL 的 CPU。

如果您的 OpenCL 可以处理所有类型的设备 (CL_DEVICE_ALL),那么它将完美运行。

那台机器没有支持 OpenCL 的 GPU 和 CPU。

  • 如果没有可用的设备:

OpenCL 加载,但您将没有任何东西可以运行您的内核。所以,简单地运行一个软件代码。

  • 如果没有 OpenCL 驱动程序:

它无法工作,甚至无法加载(运行时缺少 DLL)。除非您使用动态加载 OpenCL(如 CLEW)。

在您使用动态加载的情况下,您仍然会在库加载时收到错误消息。您必须处理这种情况并放置故障安全 CPU 代码。

我通常创建一个以原型为内核的函数(或多或少),然后直接调用此方法。


无论如何,有可能实现它。我有很多在阴影中使用 OpenCL 的库,没有任何问题。它们可以在任何类型的机器上运行(没有 GPU、没有 OpenCL、多个设备和 CPU 设备)。到目前为止没有问题。只是不要假设 OpenCL 调用总是不返回错误。

于 2013-11-04T22:45:05.517 回答