Можем ли мы получить прирост производительности с потоками CUDA? - PullRequest
2 голосов
/ 27 ноября 2011

Теоретически, мы должны получить выигрыш в производительности, когда мы используем потоки в CUDA. Я реализовал метод Гаусса-Зейделя, и на удивление время, требуемое для потоков, намного больше, чем без потоков. У кого-нибудь есть примеры, где я могу видеть выигрыш в производительности (кроме примеров, приведенных в пример каталога SDK, который не очень полезен)

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Потоки CUDA позволяют выполнять передачу PCI Express одновременно с обработкой ядра. В соответствии с Законом Амдала потоки CUDA получат выгоду только от рабочих нагрузок, которые выполняют одинаковые объемы передачи данных и обработки ядра. Чтобы определить, принесет ли ваша рабочая нагрузка пользу, профилируйте или добавьте некоторый временной код в ваше приложение, чтобы увидеть теоретический максимальный выигрыш в производительности.

Обратите внимание, что для повышения производительности потоков CUDA вам необходимо "программно-конвейерно" загружать, запускать и выгружать ядро. Сделайте это:

foreach stream {
    cudaMemcpyAsync( device[stream], host[stream], ... stream );
}
foreach stream {
    LaunchKernel<<<...stream>>>( ... );
    // you can launch multiple kernels in stream, if desired.
}
foreach stream {
    cudaMemcpyAsync( host[stream], device[stream], ... stream );
}

не это:

foreach stream {
    cudaMemcpyAsync( device[stream], host[stream], ... stream );
    LaunchKernel<<<...stream>>>( ... );
    cudaMemcpyAsync( host[stream], device[stream], ... stream );
}
1 голос
/ 30 ноября 2011

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

Обратите внимание, что CUDA может выполнять копирование памяти и выполнение ядра одновременно, поэтому, пока один поток выполняет копирование памяти, другой может выполнять вычисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...