Współbieżność w wykonaniach CUDA z wieloma GPU
Używam funkcji jądra cuda na wielu systemach GPU, z4
GPU. Spodziewałem się, że zostaną uruchomione jednocześnie, ale tak nie jest. Zmierzam czas rozpoczęcia każdego jądra, a drugie jądro zaczyna się po zakończeniu pierwszego. Tak więc uruchomienie jądra4
GPU nie jest szybszy niż1
pojedynczy GPU.
Jak mogę sprawić, by działały jednocześnie?
To jest mój kod:
cudaSetDevice(0);
GPU_kernel<<< gridDim, threadsPerBlock >>>(d_result_0, parameterA +(0*rateA), parameterB + (0*rateB));
cudaMemcpyAsync(h_result_0, d_result_0, mem_size_result, cudaMemcpyDeviceToHost);
cudaSetDevice(1);
GPU_kernel<<< gridDim, threadsPerBlock >>>(d_result_1, parameterA +(1*rateA), parameterB + (1*rateB));
cudaMemcpyAsync(h_result_1, d_result_1, mem_size_result, cudaMemcpyDeviceToHost);
cudaSetDevice(2);
GPU_kernel<<< gridDim, threadsPerBlock >>>(d_result_2, parameterA +(2*rateA), parameterB + (2*rateB));
cudaMemcpyAsync(h_result_2, d_result_2, mem_size_result, cudaMemcpyDeviceToHost);
cudaSetDevice(3);
GPU_kernel<<< gridDim, threadsPerBlock >>>(d_result_3, parameterA +(3*rateA), parameterB + (3*rateB));
cudaMemcpyAsync(h_result_3, d_result_3, mem_size_result, cudaMemcpyDeviceToHost);