【发布时间】:2026-01-11 08:10:01
【问题描述】:
假设系统具有两个不同的 GPU,但来自同一供应商,因此可以从单个 OpenCL 平台访问它们。鉴于以下简化 OpenCL 代码:
float* someRawData;
cl_device_id gpu1 = clGetDeviceIDs(0,...);
cl_device_id gpu2 = clGetDeviceIDs(1,...);
cl_context ctx = clCreateContext(gpu1,gpu2,...);
cl_command_queue queue1 = clCreateCommandQueue(ctx,gpu1,...);
cl_command_queue queue2 = clCreateCommandQueue(ctx,gpu2,...);
cl_mem gpuMem = clCreateBuffer(ctx, CL_MEM_READ_WRITE, ...);
clEnqueueWriteBuffer(queue1,gpuMem,...,someRawData,...);
clFinish(queue1);
在执行结束时,someRawData 是在两个 GPU 内存中还是仅在 gpu1 内存中?
【问题讨论】:
-
我相当肯定主机数据只会被复制到 gpu1... 我不确定是否会在两个设备上分配空间。该规范在这里不是很有帮助。我有一个有两个 GPU 的系统在工作——如果我有时间,我明天会尝试一下。
标签: memory-management opencl gpu