标签: cuda-context

异常后重置 Cuda 上下文

我有一个使用 Cuda / C++ 的工作应用程序,但有时,由于内存泄漏,会引发异常。我需要能够实时重置 GPU,我的应用程序是服务器,因此它必须保持可用。

我尝试过类似的方法,但似乎不起作用:

try
{
    // do process using GPU
}
catch (std::exception &e)
{
    // catching exception from cuda only

    cudaSetDevice(0);
    CUDA_RETURN_(cudaDeviceReset());
}
Run Code Online (Sandbox Code Playgroud)

我的想法是每次 GPU 出现异常时重置设备,但我无法使其正常工作。:( 顺便说一句,由于某些原因,我无法解决 Cuda 代码的所有问题,我需要一个临时解决方案。谢谢!

c++ cuda exception reset cuda-context

4
推荐指数
1
解决办法
3962
查看次数

cudaSetDevice() 对 CUDA 设备的上下文堆栈有什么作用?

假设我有一个与设备关联的活动 CUDA 上下文i,我现在调用cudaSetDevice(i). 发生什么了?:

  1. 没有?
  2. 主上下文替换堆栈顶部?
  3. 主要上下文被推入堆栈?

实际上似乎是不一致的。我写了这个程序,在一台机器上运行一个设备:

#include <cuda.h>
#include <cuda_runtime_api.h>
#include <cassert>
#include <iostream>

int main()
{
        CUcontext ctx1, primary;
        cuInit(0);
        auto status = cuCtxCreate(&ctx1, 0, 0);
        assert (status == (CUresult) cudaSuccess);
        cuCtxPushCurrent(ctx1);
        status = cudaSetDevice(0);
        assert (status == cudaSuccess);
        void* ptr1;
        void* ptr2;
        cudaMalloc(&ptr1, 1024);
        assert (status == cudaSuccess);
        cuCtxGetCurrent(&primary);
        assert (status == (CUresult) cudaSuccess);
        assert(primary != ctx1);
        status = cuCtxPushCurrent(ctx1);
        assert (status == (CUresult) cudaSuccess);
        cudaMalloc(&ptr2, 1024);
        assert (status == (CUresult) cudaSuccess); …
Run Code Online (Sandbox Code Playgroud)

cuda cuda-context cuda-driver

3
推荐指数
1
解决办法
250
查看次数

在当前不可调试的 GPU 上创建了 CUDA 上下文

当我开始 cuda 调试时,Nsight 返回此错误:

在当前不可调试的 GPU 上创建了 CUDA 上下文。断点将被禁用。

适配器:GeForce GT 720M

这是我的系统和CUDA信息。

请注意,已安装最新版本的 CUDA 和 Nsight。

我搜索了这个问题,但找不到我的答案。太感谢了。

Report Information
    UnixTime Generated                                                      1490538033
OS Information
    Computer Name                                                           DESKTOP-OLFM6NT
    NetBIOS Name                                                            DESKTOP-OLFM6NT
    OS Name                                                                 Windows 10 Pro
    GetVersionEx
        dwMajorVersion                                                      10
        dwMinorVersion                                                      0
        dwBuildNumber                                                       14393
        dwPlatformId                                                        2
        wServicePackMajor                                                   0
        wServicePackMinor                                                   0
        wSuiteMask                                                          256
        wProductType                                                        Workstation
    GetProductInfo                                                          48
    GetNativeSystemInfo
        wProcessorArchitecture                                              x64
        dwPageSize                                                          4096
        lpMinimumApplicationAddress                                         65536
        lpMaximumApplicationAddress                                         140737488289791
        dwActiveProcessorMask                                               15
        dwNumberOfProcessors                                                4
        dwAllocationGranularity                                             65536
        wProcessorLevel                                                     6
        wProcessorRevision                                                  17665
    EnumDisplayDevices
        Display Device
            DeviceName                                                      \\.\DISPLAY1
            DeviceString …
Run Code Online (Sandbox Code Playgroud)

cuda cuda-context

2
推荐指数
1
解决办法
1638
查看次数

主 CUDA 上下文何时被运行时 API 销毁?

在关于运行时与驱动程序 API 的讨论中,据说

主要上下文根据需要创建,每个设备每个进程一个,并进行引用计数,然后在不再有对它们的引用时销毁。

什么算作此类参考文献?而且——这是否意味着,通常情况下,主要上下文应该在重复使用后立即被销毁?例如,您获得默认设备 ID,然后启动内核;还剩下什么“参考资料”?当然它不是保存设备 ID 的整数变量......

cuda cuda-context

2
推荐指数
1
解决办法
2141
查看次数

无法在启用 ECC 的 NVIDIA 设备上创建上下文

在具有 4 个 NVIDIA GPU 的节点上,我在设备 0 上启用了 ECC 内存保护(所有其他都禁用了 ECC)。由于我在设备 0 上启用了 ECC,我的应用程序(CUDA,仅使用一个设备)在尝试在此设备 0(驱动程序 API)上创建上下文时挂起。我不知道为什么它在那一刻挂起。如果我根据另一台设备使用不同的设备设置 CUDA_VISIBLE_DEVICE 它工作正常。它必须与启用 ECC 有关。有什么想法吗?这里的输出nvidia-smi:(为什么它报告 99% 不稳定的 GPU 利用率,那里什么都没有运行?)

+------------------------------------------------------+                       
| NVIDIA-SMI 4.304.54   Driver Version: 304.54         |                       
|-------------------------------+----------------------+----------------------+
| GPU  Name                     | Bus-Id        Disp.  | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap| Memory-Usage         | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K20m               | 0000:02:00.0     Off |                    1 |
| N/A   29C    P0    49W / 225W |   0%   12MB / 4799MB …
Run Code Online (Sandbox Code Playgroud)

cuda nvidia cuda-context

1
推荐指数
1
解决办法
3192
查看次数

标签 统计

cuda ×5

cuda-context ×5

c++ ×1

cuda-driver ×1

exception ×1

nvidia ×1

reset ×1