CUDA поток медленнее обычного ядра

Я пытаюсь понять потоки CUDA, и я сделал свою первую программу с потоками, но это медленнее, чем обычная функция ядра...

почему этот код медленнее

cudaMemcpyAsync(pole_dev, pole, size, cudaMemcpyHostToDevice, stream_1);    
addKernel<<<count/100, 100, 0, stream_1>>>(pole_dev);
cudaMemcpyAsync(pole, pole_dev, size, cudaMemcpyDeviceToHost, stream_1);
cudaThreadSynchronize();  // I don't know difference between cudaThreadSync and cudaDeviceSync
cudaDeviceSynchronize();  // it acts relatively same...

чем:

cudaMemcpy(pole_dev, pole, size, cudaMemcpyHostToDevice);
addKernel<<<count/100, 100>>>(pole_dev);
cudaMemcpy(pole, pole_dev, size, cudaMemcpyDeviceToHost);

Я подумал, что он должен работать быстрее... значение счетчика переменных составляет 6 500 000 (максимум) ... первый исходный код занимает 14 миллисекунд, а второй исходный код занимает 11 миллисекунд.

Кто-нибудь может мне это объяснить, пожалуйста?

1 ответ

В этом фрагменте вам нравится иметь дело только с одним потоком (stream_1), но на самом деле это то, что CUDA автоматически делает для вас, когда вы явно не управляете потоками.

Чтобы воспользоваться потоками и асинхронной передачей памяти, вам нужно использовать несколько потоков и разделять свои данные и вычисления по каждому из них.

Другие вопросы по тегам