1

假设一个系统具有两个不同的 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在内存中?

4

1 回答 1

1

这取决于实现,数据将在调用后存储在哪里,clFinish()但很可能会在队列引用的 GPU 上。此外,这种抽象使得无需显式数据传输就可以gpuMem从启动的内核进行访问。queue2

于 2012-07-03T15:11:54.340 回答