基本的に、2 つの GPU があり、それぞれでいくつかのカーネルを実行したいと考えています。GPUが同じカーネルで動作し、それぞれがその一部を実行することを望んでいません(これが可能かどうかはわかりません)。念のため、その動作を見たくありません。
両方のデバイスが実行されていることを確認したいだけです。両方のコンテキストとコマンド キューを作成しました。しかし、実行されるカーネルは 1 つだけです。これは、1 つのデバイスしか使用されていないことを意味します。これが私がやった方法です。. .
cl_device_id *device;
cl_kernel *kernels;
...
// creating context.
context = clCreateContext(0, num_devices, device, NULL, NULL, &error);
...
// creating command queues for all kernels
for(int i = 0; i<num_kenrels; i++)
cmdQ[i] = clCreateCommandQueue(context, *device, 0, &error);
...
// enqueue kernels
error = clEnqueueNDRangeKernel(*cmdQ, *kernels, 2, 0, glbsize, 0, 0, NULL, NULL);
私は正しい道を進んでいますか?