不同CPUS上的多线程应用程序

问题描述 投票:1回答:3

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

linux arm cpu multicore rtos
3个回答
1
投票

一般来说,单线程代码将始终在一个核心上运行。要利用多个核心,您需要拥有多个进程,多个线程或两者。

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

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


1
投票

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

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


0
投票

嗯,这一切都取决于软件,如果它想要利用其他核心(如果存在)。让我们以ARM的cortexA53为例。

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

© www.soinside.com 2019 - 2024. All rights reserved.