主要内容

指定最大并行运行的线程数量循环在生成的代码

使用MATLAB®编码器™,您可以指定的最大数量的线程并行运行循环在生成的C / c++代码。你也可以保存代码,生成代码在主机硬件处理器和在目标硬件处理器上执行它。根据目标硬件平台,您可以指定线程的数量。

你可以设置线程的数量以不同的方式在生成的代码中。下表列出了这些选项的优先顺序。优先级决定了这些选项的执行顺序的MATLAB编码器设置线程的数量。如果这些选项的值等于默认值,优先顺序移动到下一个表中列出的选项。

如果你不设置这些选项,然后,默认情况下,生成的并行代码使用线程的最大数量可以在目标硬件在运行时。这个用的线程的最大数量是通过开放的多处理(OpenMP)编译指示omp_get_max_threads在生成的代码。

优先级 选项设置线程数量 命令设置线程数量
1

Parfor-loop指定的线程数量

% u指定线程的最大数量parfor(我= 1:10,u)
2

配置属性(默认值= 0):

NumberOfCpuThreads

cfg。NumberOfCpuThreads = 8;
3

目标处理器属性(默认值= 1):

NumberOfCores,

NumberofThreadsPerCore

处理器。NumberOfCores = 4;处理器。NumberOfThreadsPerCore = 2;

请注意

如果NumberOfCpuThreads= 1,然后自动并行化循环是禁用的。看到自动并行化的循环生成的代码

通过使用MATLAB编码器应用指定的线程数量

设置最大数量的CPU线程:

  1. 打开MATLAB编码器应用程序。

  2. 生成代码窗口中,单击更多的设置

  3. 速度选项卡上,输入最大数量的CPU线程

的价值最大数量的CPU线程适用于parfor循环并自动并行化循环启用的设置启用自动并行化

GUI CPU线程的最大数量

在命令行上指定的线程数量

考虑这些MATLAB函数parforExampleautoparExample

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配置cfgparforExamplearg游戏{n}报告

Parfor循环的最大线程数设置为6。

# 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配置cfgautoparExamplearg游戏{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配置cfgautoparExamplearg游戏{n}报告

的最大线程数设置为omp_get_max_threads ()

# pragma omp平行num_threads (omp_get_max_threads ())(b_i = 0;b_i <我;b_i + +) {y_data [b_i] = 1.0;}

创建自定义硬件处理器

添加一个目标处理器:

  1. 创建一个现有的目标处理器的副本。

    处理器= target.get (“处理器”,“手臂Compatible-ARM Cortex-A”);
  2. 更新内核的数量,每个核心的线程数量,新处理器的名称。

    处理器。NumberOfCores = 4;处理器。NumberOfThreadsPerCore = 2;处理器。Name =“4 coreprocessor”;
  3. 添加target.Processor对象内部数据库。

    target.add(处理器);
  4. 选择新的处理器作为目标处理器。

    cfg = coder.config (“自由”);cfg.HardwareImplementation.ProdHWDeviceType=手臂- > 4 coreprocessor兼容的;

MATLAB编码器应用程序,你可以选择自定义硬件处理器,您已经创建了命令行通过使用target.gettarget.add类。

或者,您可以创建一个目标处理器使用target.Processortarget.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;}

另请参阅

|||||

相关的话题