如何利用 Apple Silicon 上的高性能内核

问题描述 投票:0回答:3

我开发了一个 macOS 应用程序,它严重依赖多线程(呼叫中心模拟器)。它在我的 iMac 2019 上运行良好,并很好地填充了所有核心。在我的测试场景中,它模拟了应用程序。 1.4 米奥。总共 100 次迭代中的电话呼叫,每次迭代作为并行调度队列上的调度项。

Core usage on Intel iMac

现在我买了一台配备 M1 Apple Silicon 的新 Mac mini,我很想看看该测试机的性能如何发展。嗯,还不错,但没有我想象的那么好:

系统 持续时间
iMac 2019,英特尔 6 核 i5,3.0 GHz,Catalina macOS 10.15.7 19.95秒
Mac mini、M1 8 核、Big Sur macOS 11.2、Rosetta2 26.85秒
Mac mini,M1 8 核,Big Sur macOS 11.2,原生 ARM 17.07 秒

进一步调查,我注意到在模拟开始时,M1 Mac 的所有 8 个核心都被正确填满,但几秒钟后,只剩下 4 个高效核心被使用。

Core usage on M1 Mac mini

我已阅读 Apple 文档“使用性能和效率核心优化 Apple Silicon”,并仔细检查了迭代的调度队列是否设置正确:

let simQueue = DispatchQueue.global(qos: .userInitiated)

但没有成功。运行几秒钟后,高性能核心显然不再被利用。我什至尝试将队列的 qos 设置为

.userInteracive
,但这也没有帮助。我还用适当的服务质量标记了调度项目,但这并没有改变任何东西。在我看来,其他应用程序(例如 XCode)确实使用高性能核心,甚至更长时间。

有人知道如何强制 M1 Mac 使用高性能核心吗?

multithreading macos performance apple-m1
3个回答
5
投票

“M1 8核心”真是“M1 4性能+4个省电核心”。我预计它的性能会比 Intel 6 核心高一些,但也不会高很多。您确实看到了,比 6 个英特尔内核快 15%,或者大约与 7 个英特尔内核一样快。当前的 M1 芯片是“低端”处理器。 “比Intel六核好一点”还是不错的 您的代码

必须

在性能核心上运行,否则根本没有机会接近英特尔的性能。在该图中,没有任何信息告诉您使用了哪些核心。 最有可能发生的情况是所有内核开始运行,每个内核都尝试完成八分之一的工作,大约 8 秒后性能内核完成其工作。然后节能核心将其工作转移到性能核心。您只是将图像误解为只有低性能核心在完成工作。


0
投票
  1. 设置活动核心数:

    sudo sysctl -w kern.smp.cpus=N

    在此命令中,
    N

    是您要激活的核心数量。要激活所有核心,您可以使用系统中可用的核心数量。

    
    

  2. 使用nice设置进程优先级:

    sudo nice -n -20 [command]

    使用此命令,您可以将进程(命令)的优先级设置为最大可能。此命令需要 root 访问权限。

  3. 使用renice更改进程优先级:

    sudo renice -n -20 -p [PID]

    此命令使用进程 ID (PID) 调整进程的优先级。您可以使用 
    top

    ps
    命令查找 PID。
    
    

  4. 使用taskset设置CPU亲和性:

    sudo taskset -c -a [command]

    使用此命令,您可以将进程(命令)分配给特定的CPU核心。

  5. 显示处理器信息:

    cat /proc/cpuinfo

    此命令显示有关系统处理器的信息,包括内核数量及其功能。

  6. 应谨慎使用这些命令,并在必要时使用 root 访问权限。另请注意,重新启动系统后,对系统参数所做的更改可能会丢失。


-1
投票

© www.soinside.com 2019 - 2024. All rights reserved.