Parallelität bei CUDA-Multi-GPU-Ausführungen

Ich verwende eine cuda-Kernelfunktion auf einem System mit mehreren GPUs mit4 GPUs. Ich habe erwartet, dass sie gleichzeitig gestartet werden, aber das sind sie nicht. Ich messe die Startzeit jedes Kernels und der zweite Kernel startet, nachdem der erste seine Ausführung beendet hat. Starten Sie also den Kernel4 GPUs sind nicht schneller als1 einzelne GPU.

Wie kann ich sie gleichzeitig arbeiten lassen?

Das ist mein Code:

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);

Antworten auf die Frage(2)

Ihre Antwort auf die Frage