Предположим, что система с двумя отдельными графическими процессорами, но от одного и того же поставщика, поэтому к ним можно получить доступ с единой платформы OpenCL. Учитывая следующий упрощенный 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 ... Я не уверен, что на обоих устройствах будет выделено пространство. Спецификация здесь не очень помогает. У меня есть система с двумя графическими процессорами на работе - я постараюсь сделать это завтра, если у меня будет время. –