C++ CUDA内核调用阻塞?

C++ CUDA内核调用阻塞?,c++,cuda,blocking,C++,Cuda,Blocking,我在Arch Linux上运行: 我在多个地方读到,内核调用相对于CPU是异步的(将立即返回并允许CPU继续)。然而,我不明白这种行为 e、 g kernel(); printf(“立即打印”); 检查_cuda_error(); CPU似乎被锁定,在内核完成之前,不会向控制台打印任何内容(同样,也不会执行任何其他内容)。测试了各种不同执行时间(1s、2s、3s等)的内核,并进行了计算,以确保它不是我的内核 这是司机的问题吗?或者我误解了什么我发现当我在X之外运行时(在非图形环境中),我得到了

我在Arch Linux上运行:

我在多个地方读到,内核调用相对于CPU是异步的(将立即返回并允许CPU继续)。然而,我不明白这种行为

e、 g

kernel();
printf(“立即打印”);
检查_cuda_error();
CPU似乎被锁定,在内核完成之前,不会向控制台打印任何内容(同样,也不会执行任何其他内容)。测试了各种不同执行时间(1s、2s、3s等)的内核,并进行了计算,以确保它不是我的内核


这是司机的问题吗?或者我误解了什么

我发现当我在X之外运行时(在非图形环境中),我得到了预期的行为。我的假设是,当我的GPU在内核中努力工作时,它没有更新屏幕上的图形,因此在打印到控制台之前似乎“挂起”

从shell运行提供了预期的结果,因此我正在考虑我自己的问题的答案。请在下面的评论中提供您可能拥有的更多见解

kernel<<<blocks,threads>>>();
printf("print immediately\n"); 
check_cuda_error();