为了
生成的代码中的循环并行迭代为了
循环可以在目标硬件上的多个核上同时运行。一段代码的并行化可能会显着提高所生成的代码的执行速度。看Paret-Lops如何提高执行速度。
从MATLAB生成C / C ++代码时®代码,您可以生成并行为了
自动循环。自动并行化是一个编译器转换,它将顺序代码转换为多线程代码而无需手动干预。
自动并行化为了
循环支持C金宝app / C ++目标的这些构建类型:MEX,静态库,动态链接库和可执行文件。
为了
循环通过使用马铃薯编码器应用程序启用自动并行化为了
循环,在Matlab Coder™应用程序,在生成代码步骤,选择更多设置>速度>启用自动并行化。
为了
循环在命令行您可以启用并行化为了
使用命令行界面循环。考虑该功能autoparexample.
:
功能x = autoparexample(x)%#codegen.为了i = 10:numel(x)x(i)= sqrt(x(i));结尾结尾
自动生成并行为了
循环,运行这些命令:
cfg = coder.config('lib');CFG.ENABLEAUTOPARALLINATIZATIZ = 1;x =兰特(1,2000);Codegen.-Config.CFG.autoparexample.- args.{X}-报告
代码成功:查看报告
打开并检查代码生成报告。
观察在上面产生的开放式多处理(OpenMP)Pragmas为了
循环。
void autoparexample(double x [2000]){int i;if(!isinitialized_autoparexample){autoparexample_initialize();}#pragma对num_threads的pations(op_get_max_threads())私有(i)for(i = 0; i <1991; i ++){x [i + 9] = sqrt(x [i + 9]);}}
循环旁边的绿色突出显示的沟槽显示了并行化的代码的一部分。
在里面代码见解标签,下面自动并行化问题,您可以查看有关的详细信息为了
在生成的代码中不行化的循环。
例如,要查看特定的代码洞察力,请再次生成代码autoparexample.
您在上一节中定义的功能。为输入参数指定较小尺寸。
cfg = coder.config('lib');CFG.ENABLEAUTOPARALLINATIZATIZ = 1;x = rand(1,1000);Codegen.-Config.CFG.autoparexample.- args.{X}-报告
生成的代码不包含并行为了
由于输入参数的大小小于自动并行化的阈值。打开报告并单击代码见解>自动并行化问题查看有关代码的非并行化部分的详细信息。
为了
环形如果在串行执行中更好地执行该循环,则可能希望禁用特定循环的自动并行化。防止特定的并行化为了
循环,放置Coder.Loop.Parallelize('从不')
Pragma立即在Matlab代码中的循环之前。这个pragma覆盖了EnableAutopar平行化
环境。此外,这个Pragma只支持那些金宝app为了
在MATLAB代码中明确定义的循环。有关显式和隐式循环的更多信息,请参阅下一节。
例如,代码生成器不行化此循环:
%pragma禁用用于循环的自动并行化Coder.Loop.Parallelize('绝不');为了i = 1:n y(i)= y(i)* sin(i);结尾
为了
循环示例功能autoparexample.
在上一节中使用的是明确的为了
环形。但您的MATLAB代码也可以包含隐式为了
在您作者的代码中没有明确出现的循环。例如,matlab函数m
将两个矩阵乘以,因此必须在矩阵元素上隐式地执行循环迭代。
自动并行化支持MATLAB代码中隐含的循环。金宝app例如,考虑此功能autoparexample_implicit.
。
功能y = autoparexample_implisic(y)%#codegen.Y = Y * 17;%生成隐式循环结尾
通过运行这些命令生成代码:
cfg = coder.config('lib');CFG.ENABLEAUTOPARALLINATIZATIZ = 1;y = rand(1,2000);Codegen.-Config.CFG.autoparexample_implicit.- args.{Y}-报告
打开报告并检查生成的代码。生成的代码包含用于乘法操作的循环并行。
void autoparexample_implisic(double y [2000]){int i;if(!isinitialized_autoparexample_implisic){autoparexample_implic_initialize();}#pragma对num_threads的pations(op_get_max_threads())私有(i)for(i = 0; i <2000; i ++){y [i] * = 17.0;}
执行缩减操作的循环不自动并行化
空循环和尽管
循环自动不行化
coder.codeConfig
|Coder.config.
|Coder.embeddedCodeConfig
|编码器.Loop.Parallelize.
|Coder.mexcodeConfig
|议案