我正在 Windows 平台上使用 CUDA。在 Windows 平台上,我们可以访问 Parallel Nsight 和 Visual Profiler。两者都非常好,但是它们具有几乎相似的分析和跟踪功能。有人能告诉我它们有什么不同吗?哪一个更适合 Windows 平台?我基本上需要一个分析工具。
3 回答
与 Visual Profiler 相比,Nsight Visual Studio 2.2 版具有以下优势:
总体
集成到 Visual Studio 2008 SP1 和 2010(需要专业版,因为 VS Express 版不支持集成包)。
本地和远程分析会话。远程会话也可以配置为将应用程序和资源复制到远程系统。
从目标应用程序或进程树中收集信息。
报告视图支持更高级的分组和过滤。数据表可以导出到excel。
追踪活动
跟踪操作系统活动,包括进程、线程和模块生命周期、线程上下文切换、线程等待原因、CPU 利用率、进程 CPU 利用率和线程利用率。
收集 CUDA、OpenGL 2.x-3.x、DirectX 9-11 和 OpenCL 1.1 的 API 和 GPU 工作跟踪,并在时间线上显示所有信息。
收集所有跟踪的 API 调用或仅当跟踪的 API 调用返回错误时的调用堆栈跟踪。
CUDA 软件计数器显示每个上下文分配的内存。
对跟踪哪些信息的额外控制。这很关键,因为跟踪太多信息会导致应用程序受 CPU 限制。
来自 NVIDIA 工具扩展库和 D3D 性能标记的用户注释的时间线和树显示。
CUDA 分析活动
CUDA 分析器提供了一种方法来捕获您的内核并多次重播它,这对您的应用程序是透明的。这允许在非确定性应用程序中收集分析数据,并且只需启动 1 次应用程序。Visual Profiler <= 5 要求应用程序具有确定性,以便它可以多次重新启动应用程序。
支持收集 Visual Profiler 尚不支持的许多有用指标,包括符合条件的 warp,这是了解是否有足够的占用率和 warp 停顿原因的最关键指标,可帮助您了解限制应用程序性能的因素。
Visual Profiler 具有以下优点:
跨平台。
提供专家系统来审查收集的信息。
结果中的链接到 CUDA 最佳实践指南。
单击事件时,时间轴可以显示 CPU 和 GPU 事件之间的相关性。
CUDA 5.0 支持新的命令行分析器 (nvprof)。
CUDA 5.0 支持分支分歧和具有不良访问模式的内存访问的源关联。
CUDA 5.0 分析器集成到 Nsight Eclipse 版中。
更好地支持 Tesla PM 计数器。
CUDA 5.0 中的 Visual Profiler 添加了 Nsight 1.5 和 2.x 中可用的许多功能,包括
NVIDIA 工具扩展库,用于使用可在时间轴中显示的范围和标记来注释您的应用程序。
Fermi 和 Kepler GPU 上的并发内核跟踪。
这两种工具都将为您提供非常有用的信息来分析您的应用程序。我建议您使用每个工具的最新版本。
即将发布的 Nsight VSE 版本将具有许多用于调查 CUDA 内核执行的新功能。有关详细信息,请参阅http://developer.download.nvidia.com/GTC/PDF/GTC2012/PresentationPDF/S0430-GTC2012-Developing-CUDA-Nsight.pdf。
编辑(改变主意):基于对 NVIDIA Parallel Nsight 和 Visual Profiler 的重新评估,我现在发现 NVIDIA Parallel Nsight 在性能分析方面要好得多。
@Jeff Davis 的回答进一步解释了原因。
Parallel Nsight 具有直接内置到 Visual Studio 中的优势,并为 Windows 开发人员提供了自然的工作流程。
在 Parallel Nsight 2.2 中,只要将目标设置为“localhost”,就会自动启动 Monitor。分析和 CUDA 分析以及 CUDA 调试都是如此。
Monitor 需要很短的时间才能启动(与启动您最喜欢的 Web 浏览器的时间大致相同),但只有一次。在 Monitor 终止或机器重新启动之前,无需再次启动 Monitor。