指定最大并行运行的线程数量为
循环在生成的代码
使用MATLAB®编码器™,您可以指定的最大数量的线程并行运行为
循环在生成的C / c++代码。你也可以保存代码,生成代码在主机硬件处理器和在目标硬件处理器上执行它。根据目标硬件平台,您可以指定线程的数量。
你可以设置线程的数量以不同的方式在生成的代码中。下表列出了这些选项的优先顺序。优先级决定了这些选项的执行顺序的MATLAB编码器设置线程的数量。如果这些选项的值等于默认值,优先顺序移动到下一个表中列出的选项。
如果你不设置这些选项,然后,默认情况下,生成的并行代码使用线程的最大数量可以在目标硬件在运行时。这个用的线程的最大数量是通过开放的多处理(OpenMP)编译指示omp_get_max_threads
在生成的代码。
优先级 | 选项设置线程数量 | 命令设置线程数量 |
---|---|---|
1 | Parfor-loop指定的线程数量 |
% u指定线程的最大数量parfor(我= 1:10,u) |
2 | 配置属性(默认值= 0):
|
cfg。NumberOfCpuThreads = 8; |
3 | 目标处理器属性(默认值= 1):
|
处理器。NumberOfCores = 4;处理器。NumberOfThreadsPerCore = 2; |
请注意
如果NumberOfCpuThreads
= 1,然后自动并行化循环是禁用的。看到自动并行化的循环生成的代码。
通过使用MATLAB编码器应用指定的线程数量
设置最大数量的CPU线程:
打开MATLAB编码器应用程序。
在生成代码窗口中,单击更多的设置。
在速度选项卡上,输入最大数量的CPU线程。
的价值最大数量的CPU线程适用于parfor
循环并自动并行化为
循环启用的设置启用自动并行化。
在命令行上指定的线程数量
考虑这些MATLAB函数parforExample
和autoparExample
。
的parforExample
函数使用parfor
循环的最大线程数设置为6。
函数y = parforExample (n)% # codegeny = 1 (1, n);parfor(6)i = 1: n y (i) = 1;结束结束
的autoparExample
函数使用一个为
循环。
函数y = autoparExample (n)% # codegeny = 1 (1, n);为i = 1: n y (i) = 1;结束结束
使用MATLAB函数之前指定,该表列出了不同的例子设置线程的数量在并行生成的代码。
命令来生成代码 | 描述 | 生成的代码 |
---|---|---|
n = 1000;cfg = coder.config (“自由”);cfg。NumberOfCpuThreads = 8;codegen配置cfg…parforExamplearg游戏{n}报告 |
|
# pragma omp num_threads平行(6 > omp_get_max_threads () ?omp_get_max_threads (): 6)(我= 0;我< = ub_loop;我+ +){y_data[我]= 1.0;}
|
n = 1000;cfg = coder.config (“自由”);cfg。EnableAutoParallelization = true;cfg。NumberOfCpuThreads = 8;codegen配置cfg…autoparExamplearg游戏{n}报告 |
配置属性的最大线程数设置为8。 |
# pragma omp num_threads平行(8 > omp_get_max_threads () ?omp_get_max_threads (): 8)(b_i = 0;b_i <我;b_i + +) {y_data [b_i] = 1.0;}
|
n = 1000;cfg = coder.config (“自由”);cfg。EnableAutoParallelization = true;codegen配置cfg…autoparExamplearg游戏{n}报告 |
的最大线程数设置为 |
# pragma omp平行num_threads (omp_get_max_threads ())(b_i = 0;b_i <我;b_i + +) {y_data [b_i] = 1.0;}
|
创建自定义硬件处理器
添加一个目标处理器:
创建一个现有的目标处理器的副本。
处理器= target.get (“处理器”,“手臂Compatible-ARM Cortex-A”);
更新内核的数量,每个核心的线程数量,新处理器的名称。
处理器。NumberOfCores = 4;处理器。NumberOfThreadsPerCore = 2;处理器。Name =“4 coreprocessor”;
添加
target.Processor
对象内部数据库。target.add(处理器);
选择新的处理器作为目标处理器。
cfg = coder.config (“自由”);cfg.HardwareImplementation.ProdHWDeviceType=手臂- > 4 coreprocessor兼容的;
在MATLAB编码器应用程序,你可以选择自定义硬件处理器,您已经创建了命令行通过使用target.get
和target.add
类。
或者,您可以创建一个目标处理器使用target.Processor
和target.LanguageImplementation
类。有关更多信息,请参见注册新硬件设备。
命令来生成代码 | 描述 | 生成的代码 |
---|---|---|
n = 1000;cfg = coder.config (“自由”);cfg。EnableAutoParallelization = true;cfg.HardwareImplementation.ProdHWDeviceType……= "手臂兼容- > 4 coreprocessor”;codegen配置cfgautoparExamplearg游戏{n}报告 |
目标处理器的最大线程数设置为4。 |
# pragma omp num_threads平行(4 > omp_get_max_threads () ?omp_get_max_threads (): 4)(b_i = 0;b_i <我;b_i + +) {y_data [b_i] = 1.0;}
|
n = 1000;cfg = coder.config (“自由”);cfg。EnableAutoParallelization = true;cfg。NumberOfCpuThreads = 2;cfg.HardwareImplementation.ProdHWDeviceType……= "手臂兼容- > 4 coreprocessor”;codegen配置cfgautoparExamplearg游戏{n}报告 |
配置属性的最大线程数设置为2。 |
# pragma omp num_threads平行(2 > omp_get_max_threads () ?omp_get_max_threads (): 2)(b_i = 0;b_i <我;b_i + +) {y_data [b_i] = 1.0;}
|
另请参阅
parfor
|coder.config
|coder.MexCodeConfig
|coder.CodeConfig
|coder.EmbeddedCodeConfig
|目标