opencl - 明智地使用 GPU 和 CPU

标签 opencl

我是 OpenCL 的新手,刚开始学习。我想知道是否可以在 GPU 上执行少量线程而在 CPU 上执行剩余线程?换句话说,如果我启动 100 个线程并假设我有 8 核 CPU,那么 100 个线程中的 8 个线程将在 CPU 上执行而剩余的 92 个线程将在 GPU 上运行吗?OpenCL 可以帮助我完成这项工作吗?顺利?

最佳答案

I wanted to know whether it is possible to execute few threads on GPU and remaining threads on CPU?



是的

In other words, if I launch 100 threads and assume that I've 8 core CPU then is it possible that 8 threads out of 100 threads will execute on CPU and remaining 92 threads will run on GPU?



不。该描述表明您会将 GPU 和 CPU 视为单个计算资源。你不能那样做。

这并不意味着您不能让两个人同时从事同一任务。
  • GPU 和 CPU 将被视为单独的 OpenCL 设备。
  • 您可以编写可以与多个设备通信的代码。
  • 您可以为多个设备编译相同的内核。
  • 您可以要求多个设备同时工作。

  • ...但...
  • 这些都不是自动的。
  • OpenCL 不会在多个设备之间拆分单个 NDRange(或等效)调用。
  • 这意味着您必须自己在两个设备之间安排任务。
  • 速度上会有相当大的差异,因此保持最佳状态将需要超过“这里 92 个,那里 8 个”。

  • 我发现更好的是让 CPU 在 GPU 工作的同时处理不同的任务。也许为 GPU 准备下一项工作,或者对 GPU 的结果进行后处理。有时这是正常的代码。有时是 OpenCL。

    关于opencl - 明智地使用 GPU 和 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11004522/

    相关文章:

    tensorflow - 什么是 HIP,为什么不能在锐龙 3400g 上运行?

    memory - 合理化我的简单 OpenCL 内核中关于全局内存的情况

    c - 内核代码不适用于 NVIDIA GPU,但适用于 CPU 模式

    c - 使用并行算法进行求和减少 - 与 CPU 版本相比性能较差

    c++ - OpenCL 在调用 clGetPlatformIDs 时返回 -64

    image-processing - 提高 OpenCL 图像处理速度

    c - 如果没有 ICD 加载程序扩展,OpenCL 如何工作?

    database - NBody 模拟 - 适当的设计方法

    c - 我如何在 OpenCL 中将标量转换/转换为 vector (反之亦然)

    c - OpenCL 设备端排队内核和本地内存