cudaStreamQuery()
возвращает cudaSuccess
, если все команды в потоке завершены. Это означает, что в вашем примере он возвращает cudaSuccess
, потому что ядро уже завершено.
Цель cudaStreamQuery()
- позволить вам написать код, который выполняет другие действия в потоке хоста, ожидая завершения потока. Вы можете сделать это примерно так:
while (cudaSuccess !=cudaStreamQuery(stream)) { doUsefulWork(); }
Обратите внимание, что это не простой цикл ожидания.
Если вам нужна семантика цикла ожидания простоя, а не пустой блок while
, лучше использовать либо cudaStreamSynchronize()
, либо cudaEvent
и cudaStreamWaitEvent()
. Последнее дает вам больше гибкости, поскольку вы можете ждать определенного события, записанного (cudaEventRecord()
) после определенного ядра или другого вызова в указанном потоке.