因此,如果我在 CPU 设备上运行 openCL 内核函数而不是 GPU 设备,内核是否会自动使用 CPU 上的所有内核?例如,我的系统说我的 CPU 上有 4 个内核,内核会自动使用所有 4 个内核吗?
如果上述为真,那么是否意味着在单 CPU 设备上运行 openCL 内核等同于使用标准 std::threads(假设我们使用的是 C++)来执行相同的任务?
我问是因为在我当前的计算机上,openCL 似乎只能访问一个 CPU 而不能访问 GPU。因此,如果我要使用 openCL 来并行化我的代码,那么如果它本质上与基于 std::thread 的实现做同样的事情,这似乎有点过分了。
最佳答案
在没有实际访问您实际使用的 OpenCL 实现的情况下,很难确切地说出它是如何实现的。我确信有不止一种方法可以解决这个问题(在某种程度上取决于操作系统和其他因素),但最有可能的情况是它以某种方式使用主机操作系统的线程系统。 OpenCL 实现通常不是用 C++ 编写的,因此它可能不是 std::threads
,但几乎可以肯定是 std::threads
的基础系统。
当您只有一个 CPU 设备可用时,使用 OpenCL 的目的/好处是您可以透明地从这样的系统过渡到具有 GPU 设备的系统,而无需两组不同的代码。
调试在这种环境中行为不端的 OpenCL 内核也不太困难(我说不那么困难,不容易,是有原因的,在任何人提示之前)——当然假设两种环境中的行为是相同的,当然。
关于c++ - CPU 设备上的 OpenCL - 幕后发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26113758/