不同CPUS上的多线程应用

时间:2016-05-11 15:45:22

标签: linux arm cpu multicore rtos

例如,如果有一个让我们说嵌入式应用程序在unicore CPU上运行的话。然后该应用程序将被移植到多核CPU上。该应用程序是在单核还是多核上运行? 更具体地说,我对ARM CPU(但不仅仅是)和工具链细节e感兴趣。 G。标准C / C ++库。 这个问题的目的是:CPU是否有责任决定""在多个核心或编译器工具链,开发人员和标准平台上执行特定的库?而且,我也对其他系统感兴趣。那里的倾向。 有很多应用程序和RTOS(例如Linux)在不同的CPU上运行但是具有相同的体系结构,这是否意味着它们的编译方式不同?

3 个答案:

答案 0 :(得分:1)

一般来说,单线程代码总是在一个核心上运行。要利用多个核心,您需要拥有多个进程,多个线程或两者兼而有之。

您的编译器无法帮助您。这是一个建筑考虑因素。

如果您有多个线程,例如,如果正在运行的操作系统已正确编译以支持,那么大多数多核系统将在可用的任何内核上运行它们。运行仅编译为单核的操作系统显然会限制您的选择。

答案 1 :(得分:1)

单线程程序将在一个线程中运行。从理论上讲,可以将线程调度为移动到不同的核心,但调度程序无法将单个线程转换为多个线程并为您提供任何并行处理。

修改 我误解了你的问题。如果应用程序中有多个线程,并且该应用程序与新的多核CPU二进制兼容,那么如果OS调度程序认为合适,则确实会将线程安排在不同的CPU上运行。

答案 2 :(得分:0)

这完全取决于软件是否要利用其他内核(如果有)。让我们以ARM cortexA53上的Linux为例。

最初,供应商提供的引导加载程序在FSBL(第一状态引导加载程序)上运行。然后,它将控制权传递给Arm信任的固件。然后ATF运行uboot。所有这些都在单个内核上运行。然后,uboot加载linux内核并将控制权传递给它。然后,Linux初始化一些东西,并寻找一些选项,首先在bootargs中查找smp或nosmp标志。如果是smp,它将从dtb中获取分配给它的CPU数量,然后使用SMC调用ATF,它将启动其他内核,然后为这些内核分配工作,以提供真正的多处理环境。这通常称为负载平衡,在Linux中,通常是在fair.c文件中完成的。