我希望这个问题与SO相关。我在XDA开发者这样的Android论坛上发布了它,但我没有得到任何答案,同时,我相信我的问题是具体的,很难针对那些可能对此有所了解的人。
为了介绍我的问题的背景,我想我需要描述一下我的工作。我目前正在一家公司工作,需要将手机转换为运行我们的C / C ++库的IOT设备(如JanOS)。我们的想法是修改一部手机以取消屏幕,并且只保留其所需的所有功能(相机,wifi,SD卡,电池,USB连接器......)。 我自己是一名C / C ++开发人员,我优化了算法。我的工作基本上是使用OpenMP和NEON等库来提高速度,如果我在Android平台上工作的话。我目前正致力于两款扎根的手机:
我想在这些手机上为我们公司正在开发的图书馆做准备。问题是我永远无法使用C代码或bash脚本达到100%的CPU使用率。 CPU使用率不能高于50%,让我认为只使用了4个核心。这是我试图了解更多平台的地方。我认为每部手机都基于一个big.LITTLE ARM平台来优化电池节省(我对Honor 5C有疑问,因为它包含两个相同的核心,仅以不同的速度运行)。这个想法是构建4组2核(1大核和1小核),因此调度程序可以根据任务需要定位正确的CPU。但我的目标是克服这一点并使用所有核心,如经典的多核平台。
OpenMP可以在我的平台上看到8个核心。但似乎手机无法让线程从一组核心迁移到另一组核心。我的猜测是调度程序将核心视为成对,即使OpenMP可以看到8个核心,其中只有1个可以工作。我认为全局任务计划程序已被禁用,如果我理解它,它可以克服。但我不是Android开发的专家,所以我可能在这里错了。
有人知道如何启用全局任务计划程序吗?我怎么能知道它是否可以在我的平台上使用,是否真的被禁用了?或者我如何设置我的OpenMP pragma一次使用8个内核?
我基本上试图激活"演奏模式"直接在手机设置中,但它没有工作。这太简单了
[编辑]
我最近浏览了一些有趣的信息。我会与你分享他们,因为有人可能对他们感兴趣,并可能帮助我建立内核。
我在OpenKirin project中找到了这个git,我认为这有助于构建自定义Android内核。至少我可以看到可能配置的arm64
架构。
我还看到有一个名为CONFIG_SCHED_HMP
的保护检查,它似乎启用了异构多处理调度,我认为这是我的问题的主题。
此CONFIG_SCHED_HMP
应取决于配置。我认为名为arch/arm64/
的{{1}}下的那个是我应该修改的那个,似乎Kconfig
配置没有被激活。