c++ - CPU 设备上的 OpenCL - 幕后发生了什么?

标签 c++ multithreading opencl cpu core

因此,如果我在 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/

相关文章:

c++ - SendInput 让系统休眠

python - Crypto++ 和 Python 之间的 Diffie-Hellman key 交换

java - 匿名类的内存后果

python - PyOpenCl:如何调试段错误?

c++ - 如何在 C++ 中将大数字字符串转换为整数?

python - 如何公开返回变量 vector 的函数?

java - 在自己的线程中运行的 Spring Bean

c++ - 线程安全计数器c++11

c++ - OpenCL 结构体值在 CPU 上正确,但在 GPU 上不正确

multithreading - 为什么 CUDA 和 OpenCL 中的 GPU 线程分配在网格中?