首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CUDA编程-如何理解CudaDeviceReset()

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

Stack Overflow用户
提问于 2019-01-24 06:13:09
回答 1查看 237关注 0票数 1

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

代码语言:javascript
复制
#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输出到我的屏幕。是那么回事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-24 07:37:57

你已经知道为什么会这样了。要使您的内核的结果在代码中可见,您需要等待它完成。

cudaDeviceReset()是实现这一目的的函数之一,但是对于将来您需要使用

cudaDeviceSynchronize()

或者类似的API函数,它可以让您在不重置GPU的情况下等待内核完成。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54340378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档