マルチスレッドCPU集中タスクは、温度制限の前にCPUを調整します


21

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温度以外に、このマシンのスロットルを下げる原因は何ですか?


1
この質問が大好きです!別の特定のマルチスレッドタスクを実行してはどうですか?ffmpegタスク(1080pまたは4Kビデオで、利用可能なすべてのCPUリソースを確実に使用するため)のようなものを実行し、それが減速するかどうかを確認することをお勧めします。これにより、問題はそのマシンのプログラムまたはそのマシンのすべてのマルチスレッドプログラムに
絞り込まれます-NoahL

1
Cinebench R15ベンチマークを実行すると、スレッド化されたタスクが使用され、予想どおりに実行され、温度が約100℃に達し、ファンが起動します。Intel Power Gadgetは、CPU周波数がまだ3.3Ghzに近いことを示しています。したがって、ハードウェアの問題のようには見えません。すべてのコードは、Cコードであり、p_threadsと最小限のMutexロックを使用しているだけではありません。このプログラムの大部分はDNAシーケンス処理であり、1つのスレッドが16ギガのデータのようなものを引き込み、大量の処理のためにn個の個別のスレッドに渡します。
-markatlnk

1
それは他のプログラムがあなたが目指している上限に達することができるように見えますか?問題があなたの特別なコードだけにある場合、そのコードに関する詳細情報が必要になるかもしれません。とはいえ、データはどこで処理されますか?外部?kernel_taskはどのくらいの作業を報告しますか?他の温度センサー?
ロングラング

1
CPUには4つではなく8つの論理コアがあるため、4つのスレッドは合計CPU使用率の50%と表示されます。それがシステムの負荷推定に影響するのではないかと思います。
須藤

トラブルを解決するかどうかはわかりませんが、代わりにデバッグカーネルを使用してカーネルレベルでデバッグを試すことができます。Apple Devサイトのダウンロードで[詳細]をクリックすると、取得できます。
user3052786

回答:


1

これは長い時間になる可能性がありますが、おそらく2012年と2016年のCPUパッケージのシングルコアパフォーマンスやキャッシュパフォーマンスの違いは十分に大きいため、コアはデータ不足になり、再び動作できるようになるまでスロットルを下げますか?

十分なシングルスレッドプロセスがすべてのコアでフルスピードで実行でき、単純なマルチスレッドプログラムですべてのコアでフルスピードで実行できることを示しているため、私はその推測をしています。

それは、実際のワークロードとテストマルチスレッドワークロードのプログラム設計に、CPUを常に動作させない何かがあると思うようにする


0

カーネル拡張機能/System/Library/Extensions/AppleACPIPlatform.kextは、多くの温度とCPUの保護手段を制御します。システム上ですでにコンパイルされていることは明らかですが、https://opensource.apple.comで入手できる場合があります(見つけることができませんが、簡単に確認しただけです)。AppleがCPU能力に関して非常に保守的な設定をしていたとしても、私は驚かないでしょう。


3
知る限り、Apple kextsはオープンソースではありません。(奇妙なことですか?)これについての情報のための最良のリソースは、ドライバーを注入する必要があるため、Hackintoshingコミュニティです。
JMY1000

まったく奇妙ではありません!いじくりをする人は、彼らが最初に手に入れるべき以上に多くのことを知っているので、最高のアドバイスをします。控えめなCPU設定については、MBPにはバーストパフォーマンスのための優れたヒートシンクがありますが、持続的なサイクルにはそれほど優れていないことに注意してください。この問題は、脚が調理されないように先制的にAppleが望んでいる可能性が高いと考えられます。私は2012MBPでそれをめぐるいくつかの訴訟について聞いた。
user1901982

0

OSがスレッドを予測不可能で制御不能であると認識するたびに、ハードウェアとシステムの安定性を維持するためにスロットルが減速し、2012モデルは異なる動作をし、最悪の場合ロックアップする可能性があります。不完全に実装されたスレッド制御、私のせいで私に起こりました。デュアルコアでそれほど多くのスレッドを実行しないでください。


-2

不完全に実装されたスレッド制御、私のせいで私に起こりました。デュアルコアCPUであまりにも多くのスレッドを実行しないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.