使用Dataflow域的多核执行
这个例子展示了如何在Simulink中使用数据流域加速模型的执行。我们使用数字上变换器和数字下变换器组来创建一个家庭无线电业务发射机和接收机。
简介
数据流执行域允许您在模拟计算密集型信号处理系统时使用多个核。
这个例子展示了如何指定数据流作为子系统的执行域,提高模型的仿真性能,并生成多核代码。
家庭无线电服务系统
本例使用数字上转换器(DUC)和数字下转换器(DDC)块创建家庭无线电服务(FRS)发射机和接收机。数字上转换器(DUC)块将复杂的数字基带信号转换为真实的通带信号。数字下变换器(DDC)块将数字化的真实信号转换回基带复杂信号。打开familyRadioServiceExample模型.
模拟模型并测量执行时间。使用sim命令的输出来测量执行时间,该命令返回模型的模拟执行时间。为了测量主要用于数据流子系统的时间,注释掉频谱分析器块和音频设备写入器块。
单线程模型的仿真执行时间= 5.80
指定数据流执行域
属性将数据流指定为子系统的执行域域参数数据流
使用属性检查器。若要访问属性检查器,请在“Simulink工具带”中,在“建模”选项卡上,在“设计图库”中选择“属性检查器”,或在“仿真”选项卡上,在“准备图库”上,选择“属性检查器”。在属性检查器中,可以设置域来数据流
通过选择设置域规格然后选择数据流
为域设置。您也可以使用DSP系统工具箱中的数据流库中的数据流子系统块来获得一个预先配置了数据流执行域的子系统。
数据流域的多核仿真
数据流域自动将您的模型划分为多个线程,以获得更好的性能。一旦你设置了域参数数据流
,你可以使用多核TAB分析来分析您的模型以获得更好的性能。的多核当模型中存在数据流域时,可以在工具条中使用TAB。了解更多关于多核选项卡,查看为数据流执行多核分析.
对于本例,多核TAB模式设置为仿真分析
用于仿真性能分析。
建议优化模型设置以获得最佳仿真性能。要接受所建议的模型设置,就多核选项卡上,单击优化.的下拉菜单优化按钮单独更改设置。在这个例子中,模型设置已经是最优的了。
在多核选项卡,单击运行分析按钮,启动数据流域的模拟性能分析。一旦分析完成,“分析报告和建议”窗口将显示数据流子系统在模拟过程中使用了多少线程。
在分析模型之后,Analysis Report and recommendations窗口显示了一个线程,因为模型中块之间的数据依赖关系阻止了块并发执行。通过流水线化依赖于数据的块,数据流子系统可以提高并发性以获得更高的数据吞吐量。“分析报告和建议”窗口显示了建议增加并发性的管道延迟数量。建议的延迟值被计算出来以提供最佳性能。
下图显示了分析报告和建议窗口,其中建议数据流子系统的延迟时间为2。
单击接受按钮,为数据流子系统使用推荐的延迟时间。此值也可以直接在属性检查器中输入延迟参数。Simulink显示了延迟参数值using数据流子系统输出端口上的标记。
分析报告和建议窗口现在显示线程数为2,这意味着数据流子系统内的块使用2个线程并行模拟。突出的线程方法中所示的基于线程分配的颜色突出显示块线程突出显示图例.显示管道延迟显示在使用的数据流子系统中插入管道延迟的位置标签。
补偿延迟
当数据流执行域中的延迟增加以打破块之间的数据依赖关系并创建并发时,需要在模型的其他部分考虑延迟。例如,与数据流子系统输出端口上的信号进行比较或组合的信号必须延迟,以便与数据流子系统输出端口上的信号及时对齐。在本例中,来自源块的音频信号必须延迟以与其他信号对齐。为了补偿在数据流子系统上指定的延迟,使用延迟块将该信号延迟2帧。对于这个信号,帧长是1000。在延迟块中设置一个延迟值2000,以对齐来自源的信号和经过数据流子系统处理的信号。
Dataflow仿真性能
模拟模型并测量模型执行时间。在测量模拟模型所花费的时间时,注释掉Spectrum Analyzer块和Audio Device Writer块,以测量主要用于数据流子系统的时间。执行时间是使用sim命令测量的,该命令返回模型的模拟执行时间。我们可以通过将使用多个线程的模型所花费的执行时间与原始模型所花费的执行时间相除来测量所获得的加速量。这个数字计算出来并显示在下面。
这些数据和分析是在一台Windows台式计算机上发布的,该计算机使用英特尔®至强®CPU E5-1650 v3 @ 3.4 GHz 6核12线程处理器。
多线程模型的仿真执行时间= 2.49s数据流的实际加速:2.3x
代码生成
代码生成需要Simulink Coder™或Embedded Coder®许可证。按Ctrl+B构建模型并为桌面目标生成单核代码。如果您的桌面机器是Windows或Linux,您可以为模型生成多核代码。要为模型启用多核代码生成,必须选择允许任务在目标上并发执行参数中的解算器窗格下解算器的细节.选择此参数允许:
模型中的每个速率在目标处理器上作为独立的并发任务执行
数据流子系统通过自动划分块来生成额外的并发任务
在生成的代码中,您可以观察到由数据流域创建并作为OpenMP节实现的每个并发任务的生成函数。
总结
本例展示了如何在模型中指定数据流作为执行域,以设计计算密集型信号处理系统,提高模型的仿真性能并生成多核代码。
附录
本例中使用了以下helper函数。