我已经编写了一个基本的光线跟踪器并使用Grand Central Dispatch来并行计算像素,使用4个独立的渲染块。
这在Yosemite 10.10.1下的2014 MacBook Pro上运行良好。现在,我第一次在新的iMac上启动相同的应用程序来检查速度的提高。 (两个系统上的CPU都有4个核心。)突然间,我在控制台日志中看到消息“线程抓住了CPU”:
28.11.14 03:19:45,000内核[0]:进程edXCG_hw3-Cocoa [510] 线程50878抓住了刻录CPU!它使用了超过50%的CPU(实际最近 用法:97%)超过180秒。线程生命周期cpu使用率90.016272 秒,(89.714813用户,0.301459系统)分类帐信息:余额: 90003522038点数:90003522038借记:0限制:90000000000(50%) 期间:自上次补充以来的18亿次(ns):91932078384
28.11.14 03:19:45,832 spindump [486]:为edXCG_hw3-Cocoa版本1.0(1)保存了cpu_resource.diag报告 /Library/Logs/DiagnosticReports/edXCG_hw3-Cocoa_2014-11-28-031945_Chriss-iMac.cpu_resource.diag
(我当时退出了申请。)
现在我想知道......
答案 0 :(得分:1)
重型热循环会缩短机器的使用寿命,而与内部核心是否能够处理热量无关。
所以,我猜你对#34;最佳表现感兴趣"在适合机器设计的热参数范围内。
尝试将问题分解成更小的块并使用较低的Grand Central Dispatch"服务质量"设置,如QOS_CLASS_UTILITY或QOS_CLASS_BACKGROUND。
较小的调度块和较低的服务质量"设置将允许操作系统通过适当地限制所需的队列调度速率来管理相互关联的能量/热量/ CPU负载。
WWDC2015 Session 718 "Building Responsive and Efficient Apps with GCD"简要讨论了相对于第一台无风扇Mac的上述方法。
想象一下,你有一个应用程序......使用大量能源来驱动机器,我们需要帮助控制这些能量,以使机器保持在合理的温度。
嗯,我们可以做的是我们可以开始在不太重要的服务质量等级上挤压我们要做的工作量。