主要内容

在多核优化和部署目标

这一主题展示了如何使用一个模型,使用明确的分区配置为并发执行并将其部署到一个目标上。建立模型的并发执行,明白了为并发执行配置您的模型。指定目标架构,明白了指定一个目标体系结构。使用明确的分区并发执行的模型建立,明白了使用明确的分区分区模型

生成代码

生成代码的模型配置为并发执行,在应用程序选项卡的仿真软件金宝app®编辑器中,选择金宝app仿真软件编码器。在C代码选项卡上,选择构建。生成的代码包括:

  • C代码的部分模型映射到任务并发执行对话框和触发器。C代码生成需要金宝app仿真软件编码器™许可证。有关更多信息,请参见代码生成(金宝app仿真软件编码器)从仿真软件模型生成代码金宝app(嵌入式编码)

  • HDL代码部分的模型映射到硬件节点并发执行对话框。高密度脂蛋白HDL代码生成需要一个编码器™许可证。有关更多信息,请参见HDL代码生成模型金宝app(高密度脂蛋白编码器)

  • 代码来处理并发任务和触发器之间的数据传输和接口的硬件和软件组件。

为每个任务生成的C代码包含一个函数中定义或触发系统。并触发任务决定了函数的名称:

空白< TriggerName > _TaskName(无效);

内容对于每一次这样的功能由独立于目标C代码,除了:

  • 相应的代码块,实现有针对性的功能

  • 定制,包括那些来自自定义存储类(见参数数据组织成一个结构通过使用结构体存储类(嵌入式编码))或代码替换库(金宝app仿真软件编码器)

  • 生成的代码来处理多任务之间的数据传输。特别是,金宝app仿真软件编码器使用有针对性的互斥的实现原语和数据同步信号量来实现数据传输的伪代码如下表所述。

数据传输 初始化 读者 作家

数据完整性只

BufferIndex = 0;使用集成电路初始化缓冲[1]
开始互斥Tmp = 1 - BufferIndex;结束相互exclusiton读缓冲区(Tmp);
写缓冲区(BufferIndex);开始互斥BufferIndex = 1 - BufferIndex;结束互斥

确保决定论(最大延迟)

WriterIndex = 0;ReaderIndex = 1;使用集成电路初始化缓冲[1]
读取缓冲区(ReaderIndex);ReaderIndex = 1 - ReaderIndex;
写缓冲区(WriterIndex) WriterIndex = 1 - WriterIndex;

确保决定论(最小延迟)

N /一个

dataReady等;读取数据;帖子readDone;
等待readDone;写数据;dataReady后;

数据完整性只

C-HDL接口

金宝app仿真软件编码器和高密度脂蛋白编码器产品利用下载188bet金宝搏有针对性的沟通实现和设备处理硬件和软件组件之间的数据传输。

生成的高密度脂蛋白HDL代码包含一个项目为每个硬件节点。

建立在桌面

金宝app仿真软件编码器和嵌入式编码®目标提供了一个例子来生成目标代码窗口®,Linux®Mac OS操作系统。它被称为原生线程的例子,用于将您的模型部署到桌面的目标。桌面可能不是你的最终目标,但可以帮助剖析和优化模型部署它之前,可以在另一个目标。

如果你有指定的嵌入式编码的目标,进行以下更改配置参数对话框。

  1. 选择代码生成>模板>主程序生成一个例子复选框。

  2. 代码生成>模板>目标操作系统列表中,选择NativeThreadsExample

  3. 点击好吧保存您的更改并关闭配置参数对话框。

  4. 这些设置应用于所有引用的模型在你的模型。

一旦你建立了模型,出版社Ctrl-B构建和部署到您的桌面。本机线程的例子说明了如何金宝app仿真软件编码器和嵌入式编码器使用有针对性的线程api和数据管理原语,如所示线程api使用的原生线程的例子。兼任执行任务的行为描述之间的数据传输数据传输方案。编码器产品上使用的a下载188bet金宝搏pi支持这种行为,目标中描述金宝app数据保护和同步api使用的原生线程的例子

线程api使用的原生线程的例子

方面的并发执行 Linux实现 窗口实现 Mac OS实现

周期性的触发事件

POSIX计时器

Windows计时器

不适用

非周期触发事件

POSIX实时信号

Windows事件

POSIX实时信号

非周期触发

块映射到一个非周期任务:线程等待一个信号

块映射到一个非周期触发:信号行动

线程等待一个事件

块映射到一个非周期任务:线程等待一个信号

块映射到一个非周期触发:信号行动

线程

POSIX®

窗户

POSIX

线程优先级

分配基于样本时间:最快的优先级最高的任务

优先级类继承自父进程。

分配基于样本时间:最快最快的任务优先级最高的前三个任务。剩下的份额最低优先级的任务。

分配基于样本时间:最快的优先级最高的任务

被检测的例子

是的

是的

没有

数据保护和同步api使用的原生线程的例子

API Linux实现 窗口实现 Mac OS实现
数据保护API
  • pthread_mutex_destroy

  • pthread_mutex_lock

  • pthread_mutex_unlock

  • CreateMutex

  • CloseHandle

  • WaitForSingleObject

  • ReleaseMutex

  • pthread_mutex_destroy

  • pthread_mutex_lock

  • pthread_mutex_unlock

同步API
  • sem_init

  • sem_destroy

  • sem_wait

  • sem_post

  • CreateSemaphore

  • CloseHandle

  • WaitForSingleObject

  • ReleaseSemaphore

  • sem_open

  • sem_unlink

  • sem_wait

  • sem_post

在桌面配置文件和评估明确分区模型

概要文件的执行你的代码的目标使用多核概要文件报告窗格中并发执行的对话框。您可以配置文件使用金宝app仿真软件编码器(GRT)和嵌入式编码(ERT)目标。分析可帮助您识别的领域模型中执行的瓶颈。您可以分析每个任务的执行时间,找到最需要的任务的执行时间。例如,您可以比较的平均执行时间的任务。如果一个任务是计算密集型的,或不满足实时要求和超支,你可以把它变成任务,计算密集程度较低,可以并发运行。

当你生成一个配置文件报告,软件:

  1. 构建模型。

  2. 生成的代码模型。

  3. 将工具生成的代码添加到收集数据。

  4. 在目标系统上执行生成的代码和收集数据。

  5. 整理数据,生成一个HTML文件(model_name_ProfileReport.html)在当前文件夹,并显示的HTML文件概要文件报告窗格中并发执行的对话框。

    请注意

    如果一个HTML概要报告存在的模型,概要文件报告窗格中显示该文件。生成一个新的概要文件报告,点击

部分 描述

总结

总结了模型执行统计数据,如总执行时间和概要文件创建时间报告。它还列出主机内核的总数。

任务执行时间

显示了执行时间以微秒为单位,每个任务在饼图的颜色编码的任务。

可见在Windows、Linux和Mac OS平台。

任务关联处理器核心

平台相关的。对于每个时间步和任务,模型显示处理器核心数量的任务开始执行金宝app的时间步,颜色编码的处理器。

如果没有任务安排在一个特定的时间步长,NR会显示出来。

可见在Windows和Linux平台。

分析概要报告后,考虑改变的映射模型块多核系统上有效地使用可用的并发性(见块映射到任务、触发器和节点)。

生成配置文件报告

这一主题假设先前配置的模型可以描述并发执行。有关更多信息,请参见为并发执行配置您的模型

  1. 在并发执行对话框中,单击概要文件报告节点。

    配置文件工具查找一个文件命名model_name_ProfileReport.html。如果文件不存在当前模型,概要文件报告窗格显示如下。

    请注意

    如果一个HTML概要报告存在的模型,概要文件报告窗格中显示该文件。生成一个新的概要文件报告,点击

  2. 输入你想要的数量的时间步的分析器来收集数据模型执行。

  3. 单击生成任务执行概要报告按钮。

    这一行动构建模型,生成代码,将数据收集工具添加到代码中,并执行目标,也生成一个HTML文件报告。这个过程可能需要几分钟时间。当这个过程完成时,出现在配置文件的内容报告概要文件报告窗格。例如:

    总结分析报告显示,执行时间为每一个任务,每个任务的映射处理器核心。我们看到任务1和2上运行核心0,在任务3和4核心1上运行。的任务执行时间部分的报告表明,任务1和任务3花最多的时间运行。3注意的任务是任务1和2的两倍,和task 4的时期是task 3的两倍。

  4. 分析概要报告。如果需要创建和修改您的模型或任务映射,并重新生成概要报告。

在命令行生成概要报告。或者,您可以生成一个配置文件报告模型配置为并发执行的命令行。使用金宝appSimulink.architecture.profile函数。

例如,要创建一个概要文件报告的模型slexMulticoreSolverExample:

openExample (“slexMulticoreSolverExample”);金宝appSimulink.architecture.profile (“slexMulticoreSolverExample”);

创建一个概要文件报告的特定数量的样品(100)模型slexMulticoreSolverExample:

金宝appSimulink.architecture.profile (slexMulticoreSolverExample, 120);

函数创建一个概要文件报告命名slexMulticoreSolverExample_ProfileReport.html在当前文件夹。

自定义生成的C代码

生成的代码适用于许多不同的应用程序和开发环境。以满足您的需要,您可以自定义生成的C代码中描述以发展为目标(嵌入式编码)。除了这些定制功能,对于多核和异构的目标可以进一步自定义生成的代码如下:

  • 你可以注册您的首选的实现互斥使用代码替换库和数据同步原语。

  • 您可以定义一个自定义的目标架构文件允许您指定目标的具体属性和触发器的任务并发执行对话框。有关更多信息,请参见定义一个自定义架构文件

相关的例子

更多关于