gpt4 book ai didi

cuda - cudaDeviceReset()在cuda中的作用是什么

转载 作者:行者123 更新时间:2023-12-04 07:19:19 24 4
gpt4 key购买 nike

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
__global__ void funct(void){
printf("Hello from GPU!\n");
}

int main(void){
funct << < 2, 4 >> >();

for (int i = 0; i < 10; i++){
cudaDeviceReset();
//cudaDeviceSynchronize();
printf("Hello, World from CPU!\n");

}
return 0;
}

我以为cudaDeviceReset的作用是cudamemcpy。这种情况下我们没有数字的结果。所以我们无法使用 cudamemcpy。但是我们使用 cudaDeviceReset 返回四个“来自 GPU 的 Hello!”内核的结果。

是对的吗?

我用 cudaDeviceSynchronize() 替换了 cudaDeviceRest()。我看到了同样的结果。但我不知道它们之间的区别。

最佳答案

cudaDeviceReset()的作用|已记录 here

它用于破坏 CUDA context ,这意味着所有设备分配都被删除。

我同意它似乎具有同步效果。但是,由于文档指出:

Note that this function will reset the device immediately.



我认为依靠这种行为是不安全的。此外,该文档还指出了在多线程应用程序中使用此函数的危险。因此,安全编码将规定:
  • 使用设备同步(例如 cudaDeviceSynchronize()cudaMemcpy() 等)
  • 检索您的应用程序想要保留的任何数据,这些数据可能位于设备分配中,或者最近运行的内核可能已更新(在设备内存中)。
  • 确保任何主机线程也可能与它们相关联的设备事件,也被终止
  • 确保任何可能在其析构函数中具有设备事件的 C++ 对象都已正确销毁或超出范围
  • 调用cudaDeviceReset()作为应用程序关闭的一部分。

  • 请注意,调用 cudaDeviceReset()作为应用程序关闭的一部分不应被视为强制性的。如果没有这样的习惯用法,许多应用程序都可以正常工作。

    This answer也可能感兴趣。

    关于cuda - cudaDeviceReset()在cuda中的作用是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36012289/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com