在 Nsight 或 Visual Profiler 中分析 managedCuda

Profiling managedCuda in Nsight or Visual Profiler

我正在尝试分析使用 managedCuda using either Nsight Visual Studio Edition or Visual Profiler. Both profilers work well with a plain C++ CUDA app. To test the profilers with managedCuda I want to profile the project "vectorAdd" in ManagedCudaSamples 用 C# 编写的 CUDA 应用程序。

首先我尝试使用集成在 VS 2013 中的 Nvidia Nsight Visual Studio Edition 5.0。我使用 x64 调试配置。如果我尝试在 Nsight 性能分析中 "Application Control" 中启动应用程序,我会收到一条错误消息:

Analysis Session - Start Application Unable to launch 64-bit managed application '...\ManagedCudaSamples\vectorAdd\bin\x64\Debug\vectorAdd.exe'.

此外,我尝试使用 Nvidia Visual Profiler 7.5 来分析同一应用程序。在 运行 vectorAdd.exe nvprof 控制台上显示以下输出:

==2944== NVPROF is profiling process 2944, command: ...\ManagedCudaSamples\vectorAdd\bin\x64\Debug\vectorAdd.exe ==2944== Warning: Some profiling data are not recorded. Make sure cudaProfilerStop() or cuProfilerStop() is called before application exit to flush profile data. ==2944== Generated result file: ...\nvvp_workspace\.metadata\.plugins\com.nvidia.viper\launch\api_2944.log

我是 CUDA 的新手,如果能提供有关如何分析托管 Cuda 应用程序的任何建议,我将不胜感激。

您需要在退出应用程序(或销毁上下文)之前调用 CudaContext.ProfilerStop(),以便将收集的数据刷新到探查器。 managedCuda 示例不包括此调用,为什么探查器看不到收集的信息。这解释了您遇到的第二个错误。

关于第一个错误: 在 release notes of Nsight 5.0 您可以找到一个已知问题:

  1. 不支持使用 AnyCpu 配置构建的托管应用程序。必须使用 Win32 或 x64 配置构建目标应用程序。

vectorAdd 的 VS 项目始终设置为 AnyCPU,无论解决方案平台是什么,请参阅 managedCuda 示例解决方案的配置管理器进行更改。