主要内容

多核编程的概念

多核编程基础

多核编程帮助您创建并发系统,以便部署在多核处理器和多处理器系统上。一个多核处理器系统是在一个芯片中具有多个执行核的单个处理器。相比之下,a多处理器系统在主板或芯片上有多个处理器。一个多处理器系统可能包括一个现场可编程门阵列(FPGA)。FPGA是包含可编程逻辑块阵列和可重构互连层次结构的集成电路。一个处理节点处理输入数据以产生输出。它可以是多核或多处理器系统中的处理器,也可以是FPGA。

多核编程方法可以在以下情况下提供帮助:

  • 您希望利用多核和FPGA处理来提高嵌入式系统的性能。

  • 您希望实现可伸缩性,以便部署的系统可以随着时间的推移利用不断增加的核心数量和FPGA处理能力。

使用多核编程创建的并发系统具有并行执行的多个任务。这被称为并发执行.当一个处理器执行多个并行任务时,它被称为多任务处理.CPU有一个称为调度器的固件,它处理并行执行的任务。CPU使用操作系统线程实现任务。您的任务可以独立执行,但它们之间有一些数据传输,例如数据采集模块和系统控制器之间的数据传输。任务之间的数据传输意味着有一个数据依赖

多核编程通常用于信号处理和设备控制系统。在信号处理中,你可以有一个并行处理多个帧的并发系统。在工厂控制系统中,控制器和工厂可以作为两个独立的任务执行。使用多核编程有助于将系统拆分为多个并行任务,这些任务同时运行,从而加快总体执行时间。

若要对并发执行系统建模,请参见分区指导方针

并行的类型

多核编程的概念是让多个系统任务并行执行。并行的类型包括:

  • 数据并行性

  • 任务并行性

  • 流水线

数据并行性

数据并行涉及到并行地独立处理多个数据。处理器对每条数据执行相同的操作。通过并行地输入数据来实现并行性。

图中显示了该并行度的时序图。输入被分成四个块,A, B, C和d。同样的操作F ()作用于每一块,输出是O一个阿,B阿,C,和OD分别。所有四个任务都是相同的,并且它们并行运行。

每个处理器周期所花费的时间,称为周期时间,为t = tF

总的处理时间也是特遣部队,因为这四个任务同时运行。在没有并行性的情况下,所有四个数据都由一个处理节点处理。循环时间为特遣部队对于每个任务,总的处理时间为4 *特遣部队,因为零件是连续加工的。

可以在可能独立处理每个输入数据片段的场景中使用数据并行。例如,具有独立数据集的web数据库用于处理或独立处理视频帧都是数据并行的良好候选者。

任务并行性

与数据并行性相反,任务并行性不分割输入数据。相反,它通过将应用程序拆分为多个任务来实现并行性。任务并行性涉及在应用程序中跨多个处理节点分布任务。有些任务可能依赖于其他任务,因此所有任务不会完全同时运行。

考虑一个包含四个功能的系统。函数F2a()和F2b()是并行的,也就是说,它们可以同时运行。在任务并行中,可以将计算分为两个任务。函数F2b()在从Task 1获取数据Out1后运行在单独的处理节点上,并输出回Task 1中的F3()。

图中显示了该并行度的时序图。任务2直到从任务1获得数据Out1才运行。因此,这些任务并不完全并行运行。每个处理器周期所花费的时间,称为周期时间,为

t = tF1 + max(tF2a, tF2b) + tF3。

您可以在工厂和控制器并行运行的场景中使用任务并行。

模型管道执行(管道)

使用模型管道执行(或流水线)来解决线程不能完全并行运行的任务并行问题。这种方法涉及修改系统模型,在有数据依赖关系的任务之间引入延迟。

在该图中,系统被分为三个任务,分别运行在三个不同的处理节点上,并在功能之间引入了延迟。在每个时间步骤中,每个任务都通过延迟从前一个时间步骤中获取值。

每个任务都可以在同一时间开始处理,如时序图所示。这些任务是真正并行的,它们不再在一个处理器周期中串行地相互依赖。循环时间没有任何附加内容,但它是所有任务的最大处理时间。

t = max(Task1, Task2, Task3) = max(tF1, tF2a, tF2b, tF3)。

你可以在任何你可以在并发执行系统中人为引入延迟的地方使用流水线。这种引入所产生的开销不能超过流水线所节省的时间。

并行系统分区

分区方法帮助您为并发执行指定系统区域。分区允许您独立于应用程序部署在其上的目标系统的具体细节创建任务。

考虑这个系统。F1-F6是系统中可以独立执行的函数。两个函数之间的箭头表示数据依赖关系。例如,F5的执行依赖于F3。

这些函数的执行被分配给目标系统中的不同处理器节点。灰色箭头表示要部署在CPU或FPGA上的功能的分配。CPU调度器决定单个任务何时运行。CPU和FPGA通过一个公共通信总线进行通信。

该图显示了分区的一种可能配置。通常,测试不同的配置并不断改进,直到获得应用程序的最佳任务分布。

多核编程中的挑战

在多核处理器或FPGA上手动编码应用程序所带来的挑战超出了手动编码所带来的问题。在并发执行中,你必须跟踪:

  • 在嵌入式处理系统多核处理器上执行的任务的调度

  • 不同处理节点之间的数据传输

金宝appSimulink管理任务的实现和任务之间的数据传输。它还生成为应用程序部署的代码。有关更多信息,请参见用Simulink进行多核编程金宝app

除了这些挑战之外,当您希望将应用程序部署到不同的体系结构以及希望改进部署的应用程序的性能时,还存在一些挑战。

可移植性:部署到不同的体系结构

运行已部署应用程序的硬件配置称为体系结构。它可以包含多核处理器、多处理器系统、fpga或这些的组合。将相同的应用程序部署到不同的体系结构可能需要付出努力,因为:

  • 架构上不同数量和类型的处理器节点

  • 体系结构的通信和数据传输标准

  • 每个体系结构中特定事件、同步和数据保护的标准

若要手动部署应用程序,必须将任务重新分配给每个体系结构的不同处理节点。如果每个体系结构使用不同的标准,您可能还需要重新实现应用程序。

金宝appSimulink通过提供跨架构的可移植性来帮助克服这些问题。有关更多信息,请参见Simu金宝applink如何帮助您克服多核编程中的挑战

部署效率

您可以通过平衡多核处理环境中不同处理节点的负载来提高已部署应用程序的性能。在分区期间,必须迭代和改进任务的分布,如上所述并行系统分区.这个过程包括在不同的处理节点之间移动任务并测试结果的性能。因为这是一个迭代的过程,所以需要时间来找到最有效的分布。

金宝appSimulink通过分析帮助您克服这些问题。有关更多信息,请参见Simu金宝applink如何帮助您克服多核编程中的挑战

循环数据依赖

系统的某些任务依赖于其他任务的输出。任务之间的数据依赖关系决定了它们的处理顺序。在一个循环中包含数据依赖项的两个或多个分区将创建一个数据依赖项循环,也称为代数循环

金宝appSimulink在部署前识别系统中的循环。有关更多信息,请参见Simu金宝applink如何帮助您克服多核编程中的挑战

相关的例子

更多关于