NSight Profiler 信号 139
Posted
技术标签:
【中文标题】NSight Profiler 信号 139【英文标题】:NSight Profiler Signal 139 【发布时间】:2012-12-31 01:28:29 【问题描述】:我正在尝试使用 NSight 中的内置分析器来分析我的程序,但分析会话在启动后立即终止,并且我收到反馈“警告:应用程序收到信号 139”。这是什么意思?
我还收到以下错误消息:
无法读取整个会话时间线。显示的时间线可能 为空或不完整,因为应用程序中止或未能 退出前刷新配置文件数据。应用程序应该调用 cudaDeviceReset() 退出之前确保所有配置文件数据 脸红了。
【问题讨论】:
它看起来像一个分段错误。您的程序是否按预期运行并正常返回? 我彻底检查了分段错误,但程序按预期运行,cuda-memcheck 没有发现错误。作为记录,调试模块也不起作用。cuda-memcheck
需要 nvcc
和选项 -g -G
来编译代码
编译时使用-g和-G
【参考方案1】:
在 nsight 中,转到 Profile Configurations,然后转到 Profiler 选项卡。取消选中“Enable concurrent kernel profiling
”。
【讨论】:
原来是这个问题【参考方案2】:检查Start application with profiling enabled
为我修复了它。默认情况下它是打开的,但我想要显式控制,所以最初将其关闭。禁用 concurrent kernel profiling
也可以,但它会阻止您使用动态并行性分析应用程序。
【讨论】:
【参考方案3】:您的程序是否需要一些命令行参数?调试器和分析器可能没有从您的配置中正确选择 CLI 选项。您需要在 Nsight 用户属性或 Profiler 的活动页面中指定它们。
【讨论】:
是的。该程序将两个文件名作为输入并尝试打开它们。当我相信程序找不到文件时,我要么得到相关文件无法打开,要么当我相信程序确实找到它们时发出 139 信号,这取决于我在启动分析时使用的参数。 轩回答是针对 Nsight Visual Studio 版的。在 Linux/Unix 上,信号 139 来自分段错误。分段错误可能是由您的应用程序或注入您的应用程序的分析代码引起的。要诊断问题,您可以在 main() 函数的顶部添加一个 getchar。这将暂停您的应用程序。通过 Visual Profiler 或 Nsight Profiler 启动应用程序。将调试器(gdb 或 eclipse gdb)附加到您的进程。将 PC 移到 getchar() 之外。当你得到分段错误时,gdb 或 eclipse 将包含错误的调用堆栈。 根据您的反馈,导致分段错误的最可能原因是对命令行参数的参数检查和错误处理不足。我建议您检查您是否正确指定了命令行参数和探查器启动设置中的工作目录。 只是一个观察:我得到了同样的行为。在 Linux Term 窗口中运行时,使用相同的 File/WorkingDir/Arguments,一切都很好。当 Profiler 运行它时,我在计算循环的中间得到 139 条消息。 (远远超过了参数检查。)我的参数列表有 11 项长。选择单内核分析可以防止 139 问题。也许我需要设置一个环境变量。以上是关于NSight Profiler 信号 139的主要内容,如果未能解决你的问题,请参考以下文章
如何正确处理信号,让 gperftools CPU profiler 仍然有效?
Android Studio 模拟器:进程以退出代码 139 完成(被信号 11 中断:SIGSEGV)
在 Python 中使用 multiprocessing.shared_memory.ShareMemory 时出现分段错误(退出代码 139(被信号 11:SIGSEGV 中断))