【问题标题】:Multithreded applications on different CPUS不同 CPU 上的多线程应用程序
【发布时间】:2016-09-07 03:23:06
【问题描述】:

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

【问题讨论】:

    标签: linux arm cpu multicore rtos


    【解决方案1】:

    一般而言,单线程代码将始终在一个内核上运行。要利用多核,您需要拥有多个进程、多个线程或两者兼有。

    您的编译器在这方面无能为力。这是架构方面的考虑。

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

    【讨论】:

    • ARM keil 编译器标准运行时库支持 rtos。有一些编译选项。但这是特定于工具链的,因此超出了此范围。
    • 实时考虑通常与多核完全不同。
    【解决方案2】:

    单线程程序将在一个线程中运行。理论上可以将线程调度到不同的核心,但是调度器不能将单个线程变成多个线程并给你任何并行处理。

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

    【讨论】:

    • 我没有提到应用程序本身是单线程的
    • @KarolisMilieška 啊,我误解了你的问题。修正了我的答案。
    • 是OS调度器还是cpu调度器?
    • @KarolisMilieška 操作系统负责将线程调度到不同的内核。所以这种行为完全取决于你的操作系统。另外需要注意的是,Linux 不是真正的 RTOS,即使有 RTLinux 扩展。
    • 'RTOS' 在我看来没有很好的定义。有一些配置和补丁可以使 Linux 更具确定性(可能以性能为代价)。最纯粹的是,即使启用缓存也会使某些事情变得非实时。页面错误等也是如此。这取决于您基于 RT 标准的上下文。即Linux下的FIQ处理程序可以是硬RT。最低优先级的任务不太可能是(在任何操作系统中)。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-10
      • 2015-12-17
      • 2016-08-10
      • 2013-12-10
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      相关资源
      最近更新 更多