【问题标题】:Android Gradle Build not using all my M1 Pro CPU coresAndroid Gradle Build 没有使用我所有的 M1 Pro CPU 内核
【发布时间】:2022-01-06 12:41:59
【问题描述】:

有什么方法可以设置我的 Android gradle 项目以使用我的 CPU 的所有(更多)内核构建?

我有 MBP M1 Pro,正如您在执行Rebuild Project 时所附图片中看到的那样,它并没有以相同的方式使用我的所有内核。

我的 M1 Pro 有 10 个 CPU 核心,其中 2 个是低性能和 8 个性能。我想 AS 使用所有 8 个性能核心来构建我的项目。

有我的gradle.properties 设置:

org.gradle.caching=true
android.useAndroidX=true
android.enableR8.fullMode=true
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.configureondemand=true

我也玩过org.gradle.workers.max 和org.gradle.parallel.threads,但我没有看到CPU 使用率有任何变化。但也许我只是误解了它的工作原理并设置了不正确的值。

【问题讨论】:

  • 你不能在这方面做任何事情,因为当前的 Android Studio 没有针对基于 Arm 的处理器进行优化。
  • 你确定?似乎比 AS 更多的是 gradle 问题。我也在使用 Android Studio ARM 版本。不知道什么时候会优化?
  • 如您所知,长期以来,许多 mac os 应用程序开发人员都在努力使他们的应用程序针对 mac os 进行优化,因此谷歌可能很快就会推出兼容的应用程序。

标签: android gradle build.gradle apple-m1 apple-silicon


【解决方案1】:

Rebuild Project 代表很多 Gradle 任务和一些 IDE 作业,例如文件索引,我认为您的屏幕截图是在中间阶段捕获的,因此我认为影响 CPU 负载平衡的因素是 Gradle。

但是,由于某些限制,Gradle 不能保证充分利用您的 CPU:

  1. --parallel 用于不同模块的任务并行运行,效果取决于“Decoupled Projects”前提条件,您可能需要检查项目状态/依赖关系。
  2. worker 用于将一个任务分成几个子“作品”,AGP 从 4.x 开始采用它并积极使用它(将任务分成微小的作品),如果项目有很多模块(假设 >50)和资源,8核可能比4核还要慢,因为workers太多(例如,一个工作可以在0.1ms内完成,但是Lock Contention浪费更多时间)。使用最新的 AGP 可能会解决问题,您可以检查 AGP 版本并尝试减少核心数。
  3. 这是一个线程使用截图,扫描了build scan的开源项目tivi构建过程,它显示了并行运行任务的前几帧,我猜它比你的略好,但最终CPU内核不是完全占据。您可以使用相同的工具分析构建。

【讨论】:

    猜你喜欢
    • 2015-08-11
    • 2016-05-31
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2014-01-15
    相关资源
    最近更新 更多