调试CUDA MEX函数
可以调试生成的CUDA®MEX函数使用MATLAB®或CUDA调试器。要在MATLAB中调试CUDA MEX函数,请使用disp
function来检查MEX函数变量的内容。你不能使用保存
调试MEX函数变量,因为代码生成不支持它。的代码生成不支持声明保存
外在。你也可以用流
function来检查MEX函数变量的内容。
使用调试器调试CUDA MEX函数
这个例子展示了如何使用调试器调试CUDA MEX函数。
考虑一个入口点函数
喷火
它对矩阵的每个元素进行平方x
并将结果按×的倍数缩放1 / (i + j)
,在那里我,我
是行索引和列索引。函数[y] = foo (x)% # codegeny = coder.nullcopy(0(大小(x)));coder.gpu.kernelfun ();为i = 1:尺寸(x, 1)为J = 1:size(x,2) y(i, J)=(x(i, J)^2)/(i+ J);结束结束结束
要构建一个包含调试符号的CUDA MEX函数,请设置MEX配置对象属性
EnableDebugging
来1
。cfg = coder.gpuConfig (墨西哥人的);cfg。EnableDebugging = 1;输入=兰德(32);codegen配置cfgarg游戏{输入}喷火
codegen- garg游戏{输入}喷火
可以调试生成的CUDA MEX (foo_mex
)使用Visual Studio®Windows上的CUDA调试器®或者CUDA GNU®调试器cuda-gdb
在Linux上®系统。
在调试微软窗户平台
这个例子展示了调试的一般步骤foo_mex
使用NVIDIA®Nsight Visual Studio Edition CUDA调试器。关于使用Nsight VSE的具体信息,请参考NVIDIA文档。
生成CUDA MEX函数后,启动Visual Studio。不要退出你的MATLAB会话。
通过选择将调试器附加到正在运行的MATLAB进程调试>连接到过程或按
Ctrl + Alt + p
在Visual Studio。有关更多信息,请参考您的Visual Studio文档。在代码中设置断点。选择调试>新断点在Visual Studio。有关更多信息,请参考您的Visual Studio文档。
打开MATLAB和类型:
= foo_mex(输入);
foo.cu
在Visual Studio CUDA调试器的第一个断点处打开。如果您选择调试>继续,代码执行完成,并可在MATLAB中验证结果。
在调试Linux平台
CUDA GNU调试器cuda-gdb
,作为CUDA Toolkit安装的一部分,可用于Linux系统,它提供了完整的源代码调试,包括设置断点、检查变量和逐行执行源代码的功能。
在本程序中,MATLAB命令提示符>>
在MATLAB命令前显示,而linux >
表示Linux提示符;您的系统可能会显示不同的提示符。调试器提示符为< cuda-gdb >
。
调试与
cuda-gdb
,在Linux提示符下,启动cuda-gdb
调试器使用matlab
函数- d
选择。linux > matlab -Dcuda-gdb
告诉
cuda-gdb
停止以进行调试。handle SIGSEGV SIGBUS nostop noprint handle SIGUSR1 stop print 启动MATLAB而不使用Java®虚拟机(JVM™),使用
-nojvm
启动标志。< cuda-gdb > -nojvm运行
在MATLAB中,启用调试
dbmex
函数并运行你的二进制MEX文件。>> dbmex on >> out = foo_mex(rand(32));
您已经准备好开始调试。
设置断点通常很方便
mexFunction
所以你在入口例行程序的开始就停止了。break mexFunction r 一旦遇到一个断点,就可以充分利用调试器提供的任何命令来检查变量、显示内存或检查寄存器。
要从断点开始,输入:
< cuda-gdb >继续
在最后一个断点停止后,输入:
< cuda-gdb >继续
代码执行完毕,结果可在MATLAB上进行验证。
在MATLAB提示符中,您可以输入以下命令将控制权返回到调试器:
> > dbmex停止
或者,如果你已经运行完MATLAB,输入:
> >退出
当你用完调试器后,输入:
< cuda-gdb >退出
返回Linux提示符。
关于CUDA调试器的更多信息,请参考NVIDIA文档。
另请参阅
dbmex
|codegen
|coder.gpuConfig
|coder.gpu.kernelfun
|gpucoder