2012-07-31 72 views
3

我需要从Matlab中剖析我的CUDA代码。我一直在将一些matlab代码转换为CUDA以提高性能。我通过调用调用CUDA的mexFunction来完成此操作。 matlab feval函数没有提供足够的控制。我可以通过VS运行mexFunction来调试,但我也需要调试内核,因为我认为这是问题所在。如何使用Nvidia Visual Profile和Matlab配置CUDA

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

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

我在Windows上运行Matlab的2012A 64 7 64位与特斯拉C2050 GPU卡

回答

1

NVIDIA Nsight的Visual Studio 2.2版应该能够剖析你的内核。

  1. Nsight |新的分析活动
  2. 设置活动类型简介CUDA进程树(MATLAB可以启动另一个可执行)
  3. 实验进行设置为所有

Nsight Visual Studio的CUDA探查器有两个特点,应该使这成为可能:

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

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

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

+0

VS2010 lite没有Nsight可用,我一直没能找到一个有信誉的网站下载它。你知道我可以从哪里下载它,另外,我是否正确地认为在VS2010 lite中使用它会很好。如果这有所帮助,我也可以提供VS2005的完整专业版本。 – 2012-08-03 01:55:00

+0

Nsight Visual Studio Edition(以前称为Parallel Nsight)要求Visual Studio的版本支持插件。 Microsoft禁用Visual Studio Expression Editions上的插件包。 Nsight支持Visual Studio 2008 SP1和2010 SP1专业版及更高版本。你可以在developer.nvidia.com下载Nsight。 – 2012-08-03 02:36:23

+0

您可以在CUDA 5.0 RC中使用nvprof命令行分析器进行分析。 nvprof的输出可以加载到Visual Profiler中。 – 2012-08-03 02:37:32

5

如果你需要的是描述你的性能,而不是nSight也给你的调试功能,你可以使用下面的技巧来运行视觉轮廓仪上的matlab程序,而不必使用测试主体功能:

创建

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

一个批处理文件,然后运行nVidia的视觉探查脚本。

我正在使用feval CUDA API,因此这有助于向您展示Matlab实际在做什么。我想它也应该在使用MEX时也能工作,但从来没有尝试过。让我知道它是否也适用于MEX文件。

3

您可以通过以下步骤使用NVIDIA Visual Profiler剖析包括CUDA代码在内的Matlab mex文件。

  1. 按照Compiling CUDA mex files with Visual Studio中的指导原则编写包含CUDA代码的mexfile代码。
  2. 添加cudaDeviceReset()在您的mexfunction结束时。
  3. 写下你的Matlab .m文件结尾加exit
  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. Next - >完成,就是这样!