【问题标题】:cuda-gdb sees only one least capable device from four CUDA-capable devices availablecuda-gdb 从四个可用的支持 CUDA 的设备中只看到一个功能最差的设备
【发布时间】:2012-02-07 18:51:46
【问题描述】:

有四种支持 CUDA 的设备可用:

teslabot$ ./deviceQuery | grep -i "device [0-9]\|capability"
Device 0: "Tesla C2050 / C2070"
  CUDA Capability Major/Minor version number:    2.0
Device 1: "Tesla C2050 / C2070"
  CUDA Capability Major/Minor version number:    2.0
Device 2: "GeForce GTX 295"
  CUDA Capability Major/Minor version number:    1.3
Device 3: "GeForce GTX 295"
  CUDA Capability Major/Minor version number:    1.3

cuda-dbg 只看到其中一个:

teslabot$ cuda-gdb vector_add
NVIDIA (R) CUDA Debugger
4.0 release
Portions Copyright (C) 2007-2011 NVIDIA Corporation
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
[...]
(cuda-gdb) break vector_add_gpu
Breakpoint 1 at 0x400ddb: file vector_add.cu, line 7.
(cuda-gdb) run
[...]
(cuda-gdb) info cuda devices
  Dev Description SM Type SMs Warps/SM Lanes/Warp Max Regs/Lane Active SMs Mask
*   0       gt200   sm_13  30       32         32           128 0x00000001

我检查了使用-gencode arch=compute_20,code=sm_20 构建的代码在所述机器上编译时没有错误,当为sm_20 编译时,在CUDA 内核中使用printf 可以正常工作。

我怎样才能让cuda-gdb 看到所有设备(可能除了用于图形的设备...虽然在上述情况下我通过 SSH 远程登录),或至少一台 Tesla / sm_20 设备?


Michael Foukarakis response 中通过将CUDA_VISIBLE_DEVICES 环境变量设置为仅包含“0,1”即仅显示Telas 来遵循建议时,运行info cuda devices 后出现以下错误:

(cuda-gdb) info cuda devices
fatal:  All CUDA devices are used for X11 and cannot be used while debugging. (error code = 24)

如何查看 X11 (X.Org) 使用了哪些设备,以及如何让 X Window System 使用 GeForce 而不是 Tesla?

【问题讨论】:

  • info cuda devices 应该只显示运行内核或当前调试会话持有的有效上下文的卡。 info cuda system 应该显示所有卡片是否可见。请注意,驱动程序(nvidia-smi 或 cuda-gdb 显示的内容)和 API 之间的枚举一致性没有任何保证。 CUDA_VISIBLE_DEVICES 机制和/或驱动程序计算模式状态是将代码引导到所需硬件的最佳方式。
  • cuda-gdb 4.0 版(来自 CUDA SDK 4.0.17)没有 system 信息:info cuda system 导致 “无法识别的选项:'系统'。”

标签: cuda gpgpu cuda-gdb


【解决方案1】:

您能否确保CUDA_VISIBLE_DEVICES 环境变量包含您要使用的所有设备,例如:

$ ./deviceQuery -noprompt | egrep "^Device"
Device 0: "Tesla C2050"
Device 1: "Tesla C1060"
Device 2: "Quadro FX 3800"

通过设置变量,您可以只使它们中的一部分对运行时可见:

$ export CUDA_VISIBLE_DEVICES="0,2"
$ ./deviceQuery -noprompt | egrep "^Device"
Device 0: "Tesla C2050"
Device 1: "Quadro FX 3800"

【讨论】:

  • 当我使用export CUDA_VISIBLE_DEVICES="0,1"(即只有具有2.0能力的CUDA设备 - Teslas)尝试运行info cuda devices时出现以下错误:致命:所有CUDA设备都用于X11并且不能在调试时使用。 (错误代码 = 24)。那么如何让 X11 不使用 Teslas 而使用 Quadros 进行显示呢?
  • @JakubNarębski:CUDA 驱动程序可以通过“计算模式”设置限制或禁止使用任何给定的卡。您可以使用 SDK deviceQuerynvidia-smi 来检查 Telsas 是否设置为计算独占或计算禁止。这可能是问题的根源。
  • @talonmies:然后(在 Linux 上使用 X.Org)如何更改“计算模式”设置?
猜你喜欢
  • 2013-03-04
  • 2012-10-31
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 2015-08-08
  • 2015-07-10
  • 1970-01-01
相关资源
最近更新 更多