【发布时间】:2016-05-14 03:26:37
【问题描述】:
在 OpenCL 中,由多个 GPU 组成的系统是否有可能在没有程序员显式划分工作负载的情况下隐式划分工作?
例如,假设我有一个由 1 个 SM 192 核心 GPU 组成的 GPU 并运行一个矩阵乘法,它可以正常工作。现在我添加了另一个相同的 GPU,OpenCL 使用这两个 GPU 来计算其上的矩阵乘法,而不是程序员将工作负载分摊到每个 GPU 上。
【问题讨论】:
在 OpenCL 中,由多个 GPU 组成的系统是否有可能在没有程序员显式划分工作负载的情况下隐式划分工作?
例如,假设我有一个由 1 个 SM 192 核心 GPU 组成的 GPU 并运行一个矩阵乘法,它可以正常工作。现在我添加了另一个相同的 GPU,OpenCL 使用这两个 GPU 来计算其上的矩阵乘法,而不是程序员将工作负载分摊到每个 GPU 上。
【问题讨论】:
我不认为 OpenCL 可以自动做到这一点(至少在 1.2 中),但是有一些 OpenCL 包装器可以自动处理多个计算设备。我没有使用OpenCL CodeBench,但他们声称他们有多个计算设备的负载平衡。
【讨论】:
您只能统一设备的内存,并且只能使用 2.0 版及更高版本的 opencl 执行此操作。
内核在命令队列中排队,它们是使用(并绑定到)单个设备创建的。所以它们只能在单个设备上工作。但是多个命令队列可以在一个公共上下文中服务,这可以利用隐式缓冲区同步。
不能隐式地拆分工作,因为在运行时无法知道哪个工作项访问哪个内存地址。
一旦您编写了一个有效的单设备包装器,添加多 gpu 支持就不是什么麻烦事了。
【讨论】: