此示例显示如何使用生成的MEX函数加速MATLAB算法执行。它使用了Codegen.
命令为使用多个MATLAB文件的复杂应用程序生成MEX函数。您可以使用Codegen.
要检查MATLAB代码是否适合代码生成,并且在许多情况下,以加速MATLAB算法。您可以运行MEX函数以检查运行时错误。
这个示例没有先决条件。
run_balls.
函数这run_balls.m.
函数接受单个输入来指定要模拟的弹跳球的数量。模拟运行并绘制球的弹跳图,直到没有剩余能量,并返回所有球的状态(位置)。
类型run_balls.
%球= run_balls(n)%给定'n'球,运行模拟,直到球达到%完全停止(或者当系统没有移动能量时)。功能球= run_balls(n)%#codegen编码器.Extrinsic('fprintf');%版权所有2010-2013 MathWorks,Inc.%播种随机数发生器将保证每次调用此功能时,我们都会精确地相同的模拟。old_settings = rng(1283,'v4');%“CDATA”变量是表示Colordata位图的矩阵,其在每次步骤中都会呈现%。CDATA =零(400,600,'UINT8');%设置图窗口IM = setup_figure_window(cdata);%获得“N”球的初始配置。球= initialize_balls(cdata,n);能量= 2; % Something greater than 1 iteration = 1; while energy > 1 % Clear the bitmap cdata(:,:) = 0; % Apply one iteration of movement [cdata,balls,energy] = step_function(cdata,balls); % Render the current state cdata = draw_balls(cdata, balls); iteration = iteration + 1; if mod(iteration,10) == 0 fprintf(1, 'Iteration %d\n', iteration); end refresh_image(im, cdata); end fprintf(1, 'Completed iterations: %d\n', iteration); % Restore RNG settings. rng(old_settings);
首先,使用该命令生成一个MEX函数
后面跟着要编译的MATLAB文件的名称。传递一个示例输入(Codegen.
-Args 0.
)表示,将使用类型的输入调用生成的MEX函数。
Codegen.run_balls.- args.0.
这run_balls.
函数调用其他MATLAB函数,但您只需要在呼叫时指定入口点函数Codegen.
。
默认情况下,Codegen.
生成一个名为mex函数run_balls_mex.
在当前文件夹中。这允许您测试MATLAB代码和MEX函数并比较结果。
运行和时间原始run_balls.
功能后跟生成的mex函数。
tic,run_balls(50);t1 = toc;Tic,Run_Balls_Mex(50);t2 = toc;
迭代10迭代20迭代30迭代40迭代50迭代60迭代70迭代80迭代90迭代100迭代110迭代120迭代130迭代150迭代160迭代180迭代190迭代210迭代210迭代230迭代230迭代220迭代250迭代260迭代270迭代280次完成迭代:281迭代10迭代20迭代30迭代40迭代50迭代60迭代70迭代80迭代90次迭代100迭代110迭代120迭代130迭代140迭代150迭代160迭代170迭代180迭代190迭代200迭代210迭代220迭代230迭代240迭代250迭代260迭代270迭代280完成迭代:281
估计加速是:
FPRINTF(1,'加速:x〜%2.1f \ n',t1 / t2);
加速:x〜2.3