Запуск нескольких ядер параллельно.

Есть вопрос, мы запускаем ядро так:
kernel <<< numBlocks, numThreads>>> (args);
//(1)
при этом, когда CPU дойдет до точки (1) ядро еще не завершит свою работу, т.к. запуск ядра асинхронен, верно ли я понимаю?
Если да, то почему во всех примерах, что я встречал делается вот так:

kernel <<< numBlocks, numThreads>>> (args);

cudaMemcpy(dst, source, size, cudaMemcpyDeviceToHost);

Т.е. после вызова ядра сразу начинаем копировать данные?

На случай если я чего-то не понимаю и вызвав ядро, CPU ждет его завершения, то как мне запустить несколько ядер параллельно:
kernel1 <<< numBlocks1, numThreads1>>> (args1);
kernel2 <<< numBlocks2, numThreads2>>> (args2);
Как это осуществить средствами CUDA ?
Спасибо.

Forums: 

Ну все же написано в

Ну все же написано в руководстве.
- проверить что есть нужная capability
- запускать (параллельно) из разных CUDA Streams