1

2つの異なる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 に答える