例如,假设有一个运行在单核CPU上嵌入式应用程序。然后该应用程序将被移植到多核CPU上。该应用程序将在单核还是多核上运行?更具体地说,我对ARM CPU (但不仅仅是)和工具链的细节感兴趣,例如标准C/C++库。这个问题的目的是这样的:CPU有责任“决定”在多核或编译器工具链、开发人员和特定库的标准平台上执行吗?再一次,我对其他系统的趋势也很感兴趣。有很多应用程序和RTOS (例如Linux)运行在不同的CPU上,但是架构相同,那么这是否意味着它们的编译方式不同?
发布于 2016-05-11 23:47:24
一般来说,单线程代码总是在一个核心上运行。要利用多核的优势,您需要有多个进程、多个线程或两者兼有。
你的编译器在这方面帮不了你什么。这是一个架构方面的考虑。
例如,如果你有多个线程,如果你运行的操作系统被正确编译支持,那么大多数多核系统将在任何可用的核心上运行它们。运行一个只编译了单核的操作系统显然会限制你的选择。
发布于 2016-05-11 23:48:18
单线程程序将在一个线程中运行。从理论上讲,可以将线程调度到不同的核心,但调度器不能将单个线程转换为多个线程,并为您提供任何并行处理。
我误解了你的问题。如果应用程序中有多个线程,并且该应用程序与新的多核CPU是二进制兼容的,那么如果操作系统调度程序认为合适,那么这些线程实际上将被调度在不同的CPU上运行。
发布于 2019-02-25 23:10:55
好吧,这完全取决于软件,如果它想要利用其他核心(如果存在)。让我们以运行在ARM的cortexA53上的Linux为例。
最初,供应商提供的引导加载程序在FSBL (第一状态引导加载程序)上运行。然后,它将控制权传递给Arm可信固件。然后,ATF运行uboot。所有这些都运行在一个内核上。然后,uboot加载linux内核并将控制权传递给它。然后,Linux初始化一些东西并查看一些选项,首先在启动目标中查找smp或nosmp标志。如果是smp,它将从dtb获得分配给它的CPU数量,然后使用SMC对ATF的调用,它将启动其他核心,然后将工作分配给这些核心,以提供多处理环境的真实感受。这通常被称为负载平衡,在linux中,它主要是在air.c文件中完成的。
https://stackoverflow.com/questions/37167486
复制相似问题