3

我需要从 Matlab 分析我的 CUDA 代码。我一直在将一些 matlab 代码转换为 CUDA 以提高性能。我通过调用调用 CUDA 的 mexFunction 来做到这一点。matlab feval 函数没有提供足够的控制。我可以通过 VS 运行 mexFunction 来调试它,但我也需要调试内核,因为我相信这就是问题所在。

所以,我的问题是如何在执行调用它的 matlab 函数时通过分析器运行 CUDA 代码?

将所有输入的值硬编码到 CUDA 函数中是不切实际的。

我正在使用 Tesla C2050 GPU 卡在 Windows 7 64 位上运行 Matlab 2012a 64 位

4

3 回答 3

5

如果您需要的是分析您的性能而不是 nSight 也为您提供的调试功能,您可以使用以下技巧在可视分析器上运行 matlab 程序,而无需使用测试主函数制作 exe:

创建一个批处理文件

matlab -nojvm -nodesktop -wait -sd "yourBaseFolder" -r "theMFunctionYouWantToRun;exit;"

然后在 nVidia Visual Profiler 上运行脚本。

我正在使用 feval CUDA API,因此这具有向您展示 Matlab 实际在做什么的额外优势。我想它在使用 MEX 时也应该可以工作,但从未尝试过。让我知道它是否也适用于 MEX 文件。

于 2012-09-12T09:07:08.950 回答
4

您可以通过以下过程使用 NVIDIA Visual Profiler 分析 Matlab mexfiles,包括 CUDA 代码。

  1. 按照Compiling CUDA mex files with Visual Studio中的指南编写包含 CUDA 代码的 mexfile 。
  2. cudaDeviceReset()在你的 mexfunction 末尾添加。
  3. 编写您的 Matlab .m 文件 end addexit在其末尾。
  4. 启动NVIDIA Visual Profiler。文件 -> 新会话。
  5. 文件:添加Matlab 可执行文件的完整路径,例如 C:\Program Files\MATLAB\R2012b\bin\win64\MATLAB.exe 。
  6. 工作目录:添加Matlab .m 文件的完整路径
  7. 参数:-nojvm -nosplash -r file_name_without_m_extension
  8. 下一步 -> 完成,就是这样!
于 2013-10-07T21:18:51.063 回答
1

NVIDIA Nsight Visual Studio Edition 2.2 应该能够分析您的内核。

  1. 夜视 | 新的分析活动
  2. 将 Activity Type 设置为 Profile CUDA Process Tree(matlab 可以启动另一个可执行文件)
  3. 要运行的实验设置为全部

Nsight Visual Studio CUDA Profiler 有两个特性可以实现这一点:

  1. 活动 Profile CUDA Process Tree 将分析 CUDA 进程和已启动进程的所有子进程。这很重要,因为我认为 Matlab 的默认实现是启动 32 位变体,如果在 64 位系统上启动 64 位可执行文件,因此仅启动 Matlab 是不够的。

  2. Nsight 分析器支持应用程序内核重放,它支持在一次应用程序执行中使用相同的输入多次运行内核。

NVIDIA Visual Profiler 通过多次运行应用程序来收集结果。它不支持启动器应用程序。这可以通过直接启动正确版本的 Matlab.exe 来克服。由于应用程序重放机制,如果您可以自动运行 mexFunction,则可以使用 Visual Profiler 进行分析。我没有尝试使用 Visual Profiler 分析 Matlab,但我知道 Nsight 团队过去已经对此进行了测试。

于 2012-08-01T20:32:19.847 回答