OpenCL上下文缓冲区别名

问题描述 投票:0回答:1

假设我的机器上有2个支持OpenCL的设备(不包括CPU);并假设我的邪恶同事为他们每个人创建一个different上下文,我必须与之合作。

我知道I can't share buffers between contexts-至少不正确且不正式。但是,假设我创建了两个OpenCL缓冲区,每个缓冲区一个,并使用CL_MEM_USE_HOST_PTR标志将它们传递给它们各自的主机内存的相同区域。例如:

enum { size = 1234 };
//...
context_1 = clCreateContext(NULL, 1, &some_device_id, NULL, NULL, NULL);
context_2 = clCreateContext(NULL, 1, &another_device_id, NULL, NULL, NULL);

void* host_mem = malloc(size);
assert(host_mem != NULL);
buff_1 = clCreateBuffer(context_1, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,  size, host_mem, NULL);
buff_2 = clCreateBuffer(context_2, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,  size, host_mem, NULL);

我意识到,officially

在使用相同的host_ptr或重叠的主机区域创建的多个缓冲区对象上运行的OpenCL命令的结果被认为是未定义的。

但是,如果我从一个设备复制to缓冲区,然后将此缓冲区[[from复制到另一台设备,将会发生什么呢?我对(相对而言)AMD和NVIDIA GPU的情况特别感兴趣。

memory-management opencl memory-aliasing
1个回答
0
投票
如果您的OpenCL实现的供应商保证超出标准的某种特定行为,则应遵循并确保遵循有关该字母限制的所有说明。

如果没有,那么您必须假设标准说了什么。

© www.soinside.com 2019 - 2024. All rights reserved.