clCreateBuffer不是特定于设备的吗?

时间:2016-07-24 17:48:09

标签: opencl

clCreateBuffer function采用上下文标识符,但没有设备标识符; clContext may有多个设备。

这是否意味着OpenCL缓冲区不是特定于设备的?或者上下文只包含共享单个物理内存空间的设备?或许我只是错过了什么?

1 个答案:

答案 0 :(得分:4)

缓冲区不是特定于设备的,只是特定于上下文的。因此,它们可以用在属于CL上下文的所有设备中。 这使得运行OpenCL内核成为可能,其中每个内核在不同的GPU中运行。

如果您的问题是:“好的,但内存实际存在于哪里?” 答案是,“目前尚不清楚”。

它可以驻留在主机,设备或多个设备中。它最终将驻留在需要内核执行的设备中。 CL API确保一致性,但不确保缓冲区位于给定位置。如果它认为将来需要缓冲区,API会将缓冲区异步复制到另一个设备。

但是,您可以手动告诉API将缓冲区移动到设备:clEnqueueMigrateMemObject() 但是如果另一个内核需要,API可以再次移动它。