C# 在Nsight或可视探查器中评测managedCuda

C# 在Nsight或可视探查器中评测managedCuda,c#,cuda,profiling,managed-cuda,C#,Cuda,Profiling,Managed Cuda,我正在尝试使用Nsight Visual Studio Edition或Visual Profiler评测一个用C#编写的CUDA应用程序。两个剖析器都能很好地使用一个简单的C++ CUDA应用程序。要使用managedCuda测试探查器,我想在中评测项目“vectorAdd” 首先,我尝试使用VS2013中集成的Nvidia Nsight Visual Studio 5.0版。我使用x64调试配置。如果我尝试在Nsight Performance Analysis中的“应用程序控制”中启动应用

我正在尝试使用Nsight Visual Studio Edition或Visual Profiler评测一个用C#编写的CUDA应用程序。两个剖析器都能很好地使用一个简单的C++ CUDA应用程序。要使用managedCuda测试探查器,我想在中评测项目“vectorAdd”

首先,我尝试使用VS2013中集成的Nvidia Nsight Visual Studio 5.0版。我使用x64调试配置。如果我尝试在Nsight Performance Analysis中的“应用程序控制”中启动应用程序,我会收到一条错误消息:

分析会话-启动应用程序
无法启动64位托管应用程序“…\ManagedCudaSamples\vectorad\bin\x64\Debug\vectorad.exe”。

此外,我还尝试使用Nvidia Visual Profiler 7.5对同一应用程序进行评测。运行vectorAdd.exe时,nvprof控制台显示以下输出:

==2944==NVPROF正在分析进程2944,命令:…\ManagedCudaSamples\vectorad\bin\x64\Debug\vectorad.exe
==2944==警告:未记录某些分析数据。确保在应用程序退出之前调用cudaProfilerStop()或cuProfilerStop(),以刷新配置文件数据。
==2944==生成的结果文件:…\nvp_workspace\.metadata\.plugins\com.nvidia.viper\launch\7\api_2944.log


我是CUDA新手,非常感谢您为我提供有关如何配置managedCuda应用程序的建议。

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

关于第一个错误: 在中,您可以找到一个已知问题:

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

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

    非常感谢!添加
    ProfilerStop()
    解决了可视化探查器的问题。这对我现在有用。这个问题仍然存在。我已经在Configuration Manager中将平台设置为x64。(更改为AnyCPU会将错误消息更改为
    无法启动…\vectorAdd.exe,因为体系结构类型为MSIL
    )似乎还有另一个问题。我仍在使用较旧的4.7版NSight,尚未更新到5.0版,因此无法测试它。考虑到Nvidia在发行说明中提到的问题以及您报告的问题,可能值得坚持使用4.7版本。在高达4.7的版本中,托管应用程序可以像任何本机应用程序一样无任何问题地进行分析。我将其降级为Nsight 4.7,该版本运行良好。5.0版似乎有问题。再次感谢!