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?
sumber
Jawaban:
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
sumber
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.
sumber
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.
sumber
Terjadi pada saya dengan kontrol thread yang diimplementasikan dengan buruk, kesalahan saya. Hanya saja, jangan menjalankan terlalu banyak utas pada CPU dual core.
sumber