2012 MacBook Proクアッドコアで期待どおりに動作する非常にCPU集中型のスレッドタスクを作成しました。20スレッドで緩め、Intel Power Gadgetで測定すると、スロットルを最小限に抑えて温度が約100°Cになります。
同じプログラムとデータファイルをデュアルコアマシンを搭載した2016 13インチMacBook Proに持ち帰って起動すると、温度が100°Cに近づくまで3.3-3.4 GHzを維持することが期待されます。上のコマンドはタスクを350%(各デュアルスレッド2コア)で示していますが、CPU周波数は1.6〜1-8 GHzにカットされ、温度は60℃程度でファンは静かになっています。シングルスレッドのCPUタスクでは、マシンは予想通りに動作し、100°Cに達しファンが回転するまで3.3-3.4 GHzを維持します。
両方のマシンは最新で、同じバージョンのgccを実行しています。稼働中のマシンからバイナリを取得して2016 Macに配置した場合でも、同じ問題が発生します。
3つまたは4つのCPUシングルスレッドを実行してマシンがフルスピードで動作し、スレッドプログラムを開始すると、周波数も低下します。
両方のマシンに16 GBのRAMがあります。
編集
コードをいじくり回した後、タスクがあまりにも多くのスレッドを作成すると、コードが調整されるのではないかと思います。このプログラムでは、読み取った各レコードを取得して、そのスレッドを作成します。私は一度に20程度のスレッドだけを許可するので、21を超えるスレッドはありませんが、30分以上処理される14,400,000のレコードがあるため、それらの各レコードは個別のスレッドによって処理されます。
CPU時間を浪費する簡単なpthreadプログラムを作成し、10個を実行に設定しました。問題のラップトップはそれを実行し、問題なく95Cにウォームアップしました。
それらを破壊して再起動する代わりに、同じスレッドを再利用するようにコードを書き直すと思います。
更新5/13/17
数時間の作業の後、n個のスレッドのみを作成して再利用するようになりましたが、役には立ちませんでした。CPU温度以外に、このマシンのスロットルを下げる原因は何ですか?