CUDA编程----如何理解CudaDeviceReset()

时间:2019-01-24 06:13:09

标签: cuda gpu-programming

过去,我曾经通过Cublas(一种高级API)进行GPU编程。现在,我尝试编写如下的新手代码,但我有几个问题。

#include <stdio.h>

__global__ void helloFromGPU()
{
    printf("Hello World from GPU!\n");
}

int main()
{
    printf("Hello World from CPU!\n");

    helloFromGPU <<<1, 10>>>();
    cudaDeviceReset();
    return 0;
}

在这种情况下,我在内核函数之后调用CudaDeviceReset()。我发现如果删除此行,将无法获得输出消息。我不明白原因。我看到cudaDeviceReset()是要破坏Cuda上下文并重置设备。这是否意味着该函数还会刷新我的输出缓冲区?

还有一个问题,如果我删除此行,则屏幕上没有任何输出。我相信这是因为我的程序在GPU的输出到达屏幕之前就已经超时了。是吗?

1 个答案:

答案 0 :(得分:4)

您已经找到原因。 要使内核结果对代码可见,您需要等待它完成。

cudaDeviceReset()是执行此操作的函数之一,但是将来您将要使用

  

cudaDeviceSynchronize()

或类似的API函数,可让您等待内核完成而无需重置GPU。