首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同CPUS上的多线程应用程序

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

Stack Overflow用户
提问于 2016-05-11 23:45:22
回答 3查看 94关注 0票数 1

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

EN

回答 3

Stack Overflow用户

发布于 2016-05-11 23:47:24

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

你的编译器在这方面帮不了你什么。这是一个架构方面的考虑。

例如,如果你有多个线程,如果你运行的操作系统被正确编译支持,那么大多数多核系统将在任何可用的核心上运行它们。运行一个只编译了单核的操作系统显然会限制你的选择。

票数 1
EN

Stack Overflow用户

发布于 2016-05-11 23:48:18

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

我误解了你的问题。如果应用程序中有多个线程,并且该应用程序与新的多核CPU是二进制兼容的,那么如果操作系统调度程序认为合适,那么这些线程实际上将被调度在不同的CPU上运行。

票数 1
EN

Stack Overflow用户

发布于 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文件中完成的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37167486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档