不兼容机器上的OpenCL程序

时间:2013-11-04 21:38:38

标签: opencl

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

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

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

我只想知道程序是否正常运行,而且我完全明白我们会失去性能。

提前致谢:]

2 个答案:

答案 0 :(得分:1)

  

该机器没有支持OpenCL的GPU,但支持OpenCL   CPU。

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

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

  

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

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

答案 1 :(得分:1)

  

该机器没有支持OpenCL的GPU,而是具有OpenCL功能的CPU。

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

  

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

  • 如果没有可用的设备:

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

  • 如果没有OpenCL驱动程序:

它不起作用,甚至不加载(在运行时丢失DLL)。除非你使用动态加载OpenCL(如CLEW)。

如果您使用动态加载,仍然会在库加载中收到错误。您必须处理这种情况并提出故障安全的CPU代码。

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


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