Tugas intensif multi-threaded CPU melambatkan jalan CPU sebelum batas suhu


21

Saya telah menulis tugas berulir intensif yang sangat CPU yang bekerja seperti yang diharapkan pada quad core MacBook Pro 2012 saya. Saya melepaskannya dengan 20 utas dan suhunya mencapai sekitar 100 ° C sebagaimana diukur dengan Intel Power Gadget dengan pembatasan minimal.

Bawa pulang program dan file data yang sama ke MacBook Pro 13 "2016 saya dengan mesin dual core dan mulai, saya akan berharap bahwa ia juga akan mempertahankan 3,3-3,4 GHz sampai suhu mendekati tanda 100 ° C. Perintah teratas menunjukkan tugas pada 350% (masing-masing 2 inti dua ulir), tetapi frekuensi CPU dipotong menjadi 1,6-1-8 GHz dengan suhu hanya pada 60 ° C atau lebih dengan kipas mati tenang. Jika saya mulai 4 terpisah tugas CPU ulir tunggal, mesin berperilaku seperti yang diharapkan dengan menjaga 3,3-3,4 GHz sampai mencapai 100 ° C dan penggemar mendapatkan engkol. Pertanyaannya adalah mengapa CPU saya dicekik?

Kedua mesin terbaru dan menjalankan versi gcc yang sama. Jika saya bahkan mengambil biner dari mesin yang bekerja dan menaruhnya di Mac 2016, ia memiliki masalah yang sama.

Jika saya menjalankan 3 atau 4 CPU single thread sehingga mesin berjalan dengan kecepatan penuh, kemudian memulai program berulir, itu akan memperlambat frekuensi juga.

Kedua mesin memiliki 16 GB RAM.

Edit

Setelah bermain-main dengan kode, saya curiga bahwa itu diperlambat ketika tugas membuat terlalu banyak utas. Dalam program ini, saya mengambil setiap catatan yang saya baca dan membuat utas untuknya. Saya hanya membiarkan 20 atau lebih utas berjalan sekaligus sehingga tidak ada waktu ada lebih dari 21 utas, tetapi ada 14.400.000 catatan yang akan diproses sehingga selama 30 menit atau lebih masing-masing rekaman tersebut akan diproses oleh utas terpisah.

Saya membuat program pthread sepele yang menyedot waktu CPU dan mengatur 10 di antaranya berjalan. Masalahnya laptop menjalankannya dan memanas hingga 95C tanpa masalah.

Saya kira saya akan menulis ulang kode saya untuk menggunakan kembali utas yang sama alih-alih menghancurkannya dan memulai kembali.

Perbarui 5/13/17

Setelah beberapa jam bekerja, sekarang hanya membuat n utas dan hanya menggunakannya kembali, itu tidak membantu. Selain suhu CPU, apa yang akan menyebabkan mesin ini melambat?


1
Saya suka pertanyaan ini! Bagaimana menjalankan tugas multithreaded spesifik yang berbeda? Saya sarankan menjalankan sesuatu seperti tugas ffmpeg (pada video 1080p atau 4K, untuk memastikan ia menggunakan semua sumber daya CPU yang tersedia) dan melihat apakah itu memperlambat. Ini mungkin mempersempit masalahnya menjadi: program Anda di mesin itu atau semua program multithreaded di mesin itu
NoahL

1
Jika saya menjalankan tolok ukur Cinebench R15, ia menggunakan tugas berulir dan berjalan seperti yang diharapkan, suhu naik hingga sekitar 100C dan kipas naik. Intel Power Gadget menunjukkan frekuensi CPU masih dekat 3,3 GHz. Jadi itu tidak terlihat seperti masalah perangkat keras. Semua kode hanya kode C dengan tidak ada yang suka menggunakan p_threads dan kunci Mutex minimal. Program ini sebagian besar pemrosesan urutan DNA dengan satu utas menarik sesuatu seperti 16 manggung data dan meneruskannya ke utas individu untuk angka-angka berat.
markatlnk

1
Itu terlihat seperti program lain dapat mencapai langit-langit yang Anda tuju? Jika masalahnya hanya dari kode khusus Anda, kami mungkin perlu info lebih lanjut tentang kode itu. Meskipun demikian, di mana data Anda akan diproses? Luar? Berapa banyak pekerjaan yang dilaporkan kernel_task? Sensor suhu lainnya?
LаngLаngС

1
CPU Anda memiliki 8 core logis, bukan 4, jadi 4 utas akan menunjukkan 50% total penggunaan CPU. Saya ingin tahu apakah itu memengaruhi estimasi beban sistem Anda.
sudo

Saya tidak tahu apakah Anda ingin melalui masalah, tetapi Anda bisa mencoba men-debug di tingkat kernel dengan menggunakan kernel debug. Anda bisa mendapatkannya jika mengeklik lebih banyak di unduhan di situs pengembang apel.
user3052786

Jawaban:


1

Ini mungkin sebuah kesimpulan panjang, tetapi mungkin perbedaan dalam kinerja single-core dan / atau kinerja cache antara paket cpu 2012 dan 2016 cukup besar sehingga core-nya kekurangan data dan melambat hingga mereka dapat bekerja lagi?

Saya membuat dugaan itu karena Anda mengindikasikan proses single-thread yang cukup dapat menjalankan kecepatan penuh pada semua core, dan program multi-thread yang sederhana dapat menjalankan kecepatan penuh pada semua core.

Itu membuat saya berpikir ada sesuatu dalam desain program dari beban kerja nyata Anda vs beban kerja multi-thread tes yang tidak membiarkan CPU bekerja sepanjang waktu


0

Ekstensi kernel /System/Library/Extensions/AppleACPIPlatform.kext mengontrol banyak perlindungan suhu dan CPU. Sudah dikompilasi, tentu saja, di sistem Anda, tetapi mungkin tersedia di https://opensource.apple.com (Saya tidak dapat menemukannya, tetapi saya hanya melihatnya sebentar). Tidak akan mengejutkan saya jika Apple memiliki pengaturan yang sangat konservatif pada kemampuan CPU.


3
AFAIK Apple kexts bukan open source. (Anehnya?) Sumber informasi terbaik untuk ini adalah komunitas Hackintoshing karena kebutuhan untuk menyuntikkan driver.
JMY1000

Tidak aneh sama sekali! Tinker memberikan nasihat terbaik karena mereka tahu lebih banyak daripada yang seharusnya mereka dapatkan. Adapun pengaturan CPU konservatif, jangan lupa bahwa MBP memiliki heatsink yang bagus untuk kinerja burst, tetapi tidak begitu bagus untuk siklus berkelanjutan. Kemungkinan besar masalah ini adalah ke Apple yang ingin secara pre-emptive menjaga kaki Anda dari dimasak. Saya mendengar tentang beberapa tuntutan hukum tentang hal itu dengan 2012MBP.
user1901982

0

Setiap kali os mengenali thread sebagai hal yang tidak dapat diprediksi dan di luar kendali, os akan turun untuk tetap menjaga stabilitas perangkat keras dan sistem, model 2012 berperilaku berbeda dan mungkin terkunci dalam kondisi terburuk. Terjadi pada saya dengan kontrol thread yang diimplementasikan dengan buruk, kesalahan saya. Hanya saja, jangan jalankan banyak thread pada dual core.


-2

Terjadi pada saya dengan kontrol thread yang diimplementasikan dengan buruk, kesalahan saya. Hanya saja, jangan menjalankan terlalu banyak utas pada CPU dual core.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.