【问题标题】:Internal Memcheck Error: Memcheck failed initialization as profiler is attached内部 Memcheck 错误:Memcheck 初始化失败,因为附加了探查器
【发布时间】:2013-10-19 20:29:24
【问题描述】:

我一直在 Windows 7 下使用cuda-memcheck

不幸的是,在我的笔记本电脑上,我现在收到以下错误消息:

========= Internal Memcheck Error: Memcheck failed initialization as profiler is attached. Try unsetting CUDA_PROFILE or disabling the profiler.
=========     Saved host backtrace up to driver entry point at error
=========     Host Frame:C:\windows\system32\nvcuda.dll (cuD3D11CtxCreate + 0x103dbd) [0x11fe1d]
=========     Host Frame:C:\Users\user\Documents\Project\StackOverflow\Debug\cudart32_55.dll (_cudaRegisterDeviceFunction + 0x5eb2) [0xdaf2]
=========     Host Frame:C:\Users\user\Documents\Project\StackOverflow\Debug\cudart32_55.dll (_cudaRegisterDeviceFunction + 0x600d) [0xdc4d]
=========     Host Frame:C:\Users\user\Documents\Project\StackOverflow\Debug\cudart32_55.dll (_cudaRegisterDeviceFunction + 0x6576) [0xe1b6]
=========     Host Frame:C:\Users\user\Documents\Project\StackOverflow\Debug\cudart32_55.dll (_cudaRegisterDeviceFunction + 0x3609) [0xb249]
=========     Host Frame:C:\Users\user\Documents\Project\StackOverflow\Debug\cudart32_55.dll [0x3137]
=========     Host Frame:C:\Users\user\Documents\Project\StackOverflow\Debug\cudart32_55.dll (cudaMalloc + 0xb5) [0x152d5]
=========     Host Frame:C:\Users\user\Documents\Project\StackOverflow\Debug\StackOverflow.exe (main + 0x59) [0x2289]
=========     Host Frame:C:\Users\user\Documents\Project\StackOverflow\Debug\StackOverflow.exe (__tmainCRTStartup + 0x1bf) [0xa3ef]
=========     Host Frame:C:\Users\user\Documents\Project\StackOverflow\Debug\StackOverflow.exe (mainCRTStartup + 0xf) [0xa21f]
=========     Host Frame:C:\windows\syswow64\KERNEL32.dll (BaseThreadInitThunk + 0x12) [0x1336a]
=========     Host Frame:C:\windows\SysWOW64\ntdll.dll (RtlInitializeExceptionChain + 0x63) [0x39f72]
=========     Host Frame:C:\windows\SysWOW64\ntdll.dll (RtlInitializeExceptionChain + 0x36) [0x39f45]
=========
========= ERROR SUMMARY: 1 error

我检查了CUDA_PROFILE 环境变量的存在,但它既没有定义为系统变量,也没有定义为用户变量。反正我已经设置了

Set @CUDA_PROFILE = 0

但没有效果。我正在使用 CUDA 5.5。

我也尝试在其他两个系统上使用cuda-memcheck4-GPU、NVIDIA K20c 系统和具有单个 Tesla C2050 卡的系统。在前者我有同样的问题,在后者cuda-memcheck 工作正常。

错误说 附加了配置文件的事实让我认为问题可能是由于我之前在两台机器cuda-memcheck 不工作。相反,cuda-memcheck 正在使用的机器是全新安装的。但是,我检查了用于此类附件的NSIGHT_CUDA_DEBUGGER 环境变量设置为0。还。我找不到任何仍可附加到调试器的明显进程。

任何人都可以提出解决问题的任何提示吗?

【问题讨论】:

  • 1.您能否检查 Nsight Monitor 中的附加功能是否已禁用?您可以通过右键单击 Nsight Monitor 托盘图标来执行此操作,点击属性并转到 CUDA 部分并禁用“将此监视器用于 CUDA 附加”。 2.能否也检查一下环境变量CUDA_INJECTION32_PATH和CUDA_INJECTION64_PATH是否存在,如果存在,删除后重试?
  • @Vyas 非常感谢您的建议。我忘了提到在写这篇文章时我已经完成了测试#1,但没有成功。另外,关于测试#2,我删除了环境变量CUDA_INJECTION32_PATHCUDA_INJECTION64_PATH,但问题仍然存在。
  • 您之前是否在守护程序模式下使用过命令行分析器(nvprof)?您能否确保任务管理器不显示任何名为 nvprof 的进程在后台运行?您是否还可以尝试以下操作:从命令行运行nvprof --profile-all-processes,然后点击ctrl+c 以终止nvprof。此时,使用 cuda-memcheck 重试运行应用程序。
  • @Vyas 我已经解决了这个问题。我必须将COMPUTE_PROFILE 环境变量设置为0。实际上,运行nvprof --profile-all-processes 让我朝着正确的方向前进,因为它返回的错误消息与cuda-memcheck 不同。更详细地说,当 cuda-memcheck 抱怨 CUDA_PROFILE 时,nvprof 抱怨 COMPUTE_PROFILE,我必须将其设置为 0 才能启动 nvprof。这也解决了cuda-memcheck 问题。
  • 有人能写一个答案吗?我会赞成的。

标签: visual-studio-2010 cuda


【解决方案1】:

我在 CUDA 6.5 和 7.0 中遇到了类似情况。错误消息稍微更笼统(这可能是由于版本不同 - 我不确定)。它说

内部 Memcheck 错误:Memcheck 初始化失败,因为当前附加了一些其他工具。请确保 nvprof 和 Nsight Visual Studio Edition 没有同时运行

(当然,此时没有其他工具在运行)。

COMPUTE_PROFILE 环境变量设置为0 没有帮助。 (其实一开始根本就没有给我设置)。

最后,我发现奇怪的行为是由其他环境变量引起的:工具包/分析器显然在安装过程中设置了两个额外的环境变量:

CUDA_INJECTION32_PATH=C:\Program Files (x86)\NVIDIA Corporation\Nsight Visual Studio Edition 4.1\Monitor\Common\Injection32\Nvda.Cuda.Injection.dll
CUDA_INJECTION64_PATH=C:\Program Files (x86)\NVIDIA Corporation\Nsight Visual Studio Edition 4.1\Monitor\Common\Injection64\Nvda.Cuda.Injection.dll

我不确定他们在做什么(很可能,他们建立了一些分析所需的“钩子”)。在任何情况下:删除这些环境变量(或通过执行将它们设置为空

set CUDA_INJECTION32_PATH=
set CUDA_INJECTION64_PATH=

在应该启动cuda-memcheck 的命令提示符处)导致cuda-memcheck 再次正常工作。

更新

我在装有 Geforce GTX 780 GPU 的 Windows 2008 R2 和 Windows 7 机器上遇到了同样的错误。虽然上面解释的过程对我有用,但我发现 CUDA_INJECTION32_PATH 和 CUDA_INJECTION64_PATH 环境变量是由 Nsight Monitor 添加和设置的,当它的设置“CUDA->将此监视器用于 CUDA 附加”是由用户设置为 true 时。

为了解决 cuda-memcheck 的初始化问题,我只是在 Nsight 监视器中关闭了“CUDA->Use this monitor for CUDA attach”设置。这删除了 ​​CUDA_INJECTION32_PATH 和 CUDA_INJECTION64_PATH 环境变量。此后,我打开了一个新的命令提示符会话以重新加载新的环境变量并测试 cuda-memcheck 是否正常工作。

【讨论】:

  • 感谢@nurabha 的更新。当我遇到这种情况时,我明确地关闭了 NSight 监视器,甚至重新启动了整个系统,但环境变量仍然存在。我不认为它们可能会通过取消设置某些复选框来取消设置。 (我还没有尝试过,但假设它确实有效,这可能是解决此问题的更简单方法)
  • (顺便说一句:我刚刚注意到@Vyas 在他对这个问题的第一条评论中已经给出了这可能与CUDA_INJECTIONxx_PATH 变量有关的提示,他还提到了可能的解决方案“更新”。不知道为什么这对最初的提问者不起作用,但希望任何遇到这个问题的人现在都能以任何一种方式解决它)
  • 谢谢。 set CUDA_INJECTION64_PATH= 满足 x64 进程。
【解决方案2】:

当遇到cuda-memcheck 的问题时,我的系统环境变量COMPUTE_PROFILE 被设置为1。我只需将其设置为0 即可让cuda-memcheck 正常工作。顺便说一句,我要感谢@Vjas 建议检查nvprof --profile-all-processes,它抱怨CUDA_PROFILE 的设置。我通过设置COMPUTE_PROFILE=0 解决了我的笔记本电脑和开普勒系统上的问题。

我今天无法访问 cuda-memcheck 正常工作的 Tesla 系统来检查 COMPUTE_PROFILE 的设置。我一有这样的信息就会更新这个答案。

编辑

我已检查环境变量 COMPUTE_PROFILE 未在 cuda-memcheck 最初工作的系统上定义。

【讨论】:

    【解决方案3】:

    我在尝试使用cuFFT 库时遇到的错误只是Internal Memcheck Error: Initialization failed。根据nvidia forum,解决方法是设置CUDA_MEMCHECK_PATCH_MODULE环境变量。

    export CUDA_MEMCHECK_PATCH_MODULE=1
    

    【讨论】:

    • 这改变了行为,但并没有完全消除我的问题。然而,它确实明确表明袖带是问题的一部分。这也让我发现cuda-memcheck 正在被一个名为compute-sanitizer 的新工具所取代。发行说明表明新工具仅适用于较新的设备。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多