Saya tertarik pada load balancing untuk sistem CPU multicore. Jika Anda menggunakan 1 CPU dengan banyak core, apakah lebih hemat energi untuk menyeimbangkan beban pada beberapa core, atau mencoba mengisi satu core dan membiarkan orang lain menganggur.
Asumsi dasarnya adalah bahwa jumlah pekerjaan yang dilakukan dalam kedua kasus persis sama, dalam waktu yang bersamaan. Jadi, apakah lebih efisien menggunakan 4 core dalam CPU yang sama dengan masing-masing beban 25% atau 1 inti dengan beban 100%.
Saya akan menganggap 1 inti dengan beban 100% harus lebih efisien, tetapi karena saya mungkin salah, saya sedang mencari jawaban serius tentang masalah ini (tanpa tebakan).
cpu-usage
power-consumption
private_meta
sumber
sumber
Jawaban:
IMO pertanyaan ini tidak bisa dijawab dalam kasus umum.
Di meja saya, saya memiliki salah satu CPU yang diaktifkan Core i7-980x 6-core TurboBoost diaktifkan baru. Jika Anda memuat satu inti pada mesin ini, itu akan meningkatkan kecepatan clock inti itu, sehingga meningkatkan konsumsi daya CPU, sehingga akan membuat perbedaan besar. CPU ini dan juga CPU lainnya yang lebih modern dapat mengurangi daya inti yang tidak aktif, meningkatkan penghematan daya. Itu tidak benar pada model CPU yang lebih lama.
Perlu diingat bahwa pekerjaan yang harus Anda lakukan dengan satu inti tentu akan berbeda dari pekerjaan yang Anda lakukan dengan beberapa inti. Jika Anda dapat menyebarkan beban ke beberapa inti, Anda akan menemukan bahwa banyak waktu ekstra akan dihabiskan untuk inti tunggal yang melakukan pengalihan konteks mahal, dan kinerja Anda akan berkurang.
Bagaimanapun, masalahnya memiliki terlalu banyak variabel untuk dijawab. Seseorang dapat terus-menerus membahas tentang berbagai jenis muatan, dan siapa pun yang mencoba membuat tolok ukur untuk mendapatkan jawaban akan berakhir (mungkin secara tidak sengaja) membuat perbandingan apel dengan jeruk yang tidak berlaku pada kasus penggunaan lainnya.
Oh, dan satu hal lagi. Kebanyakan orang mungkin akan mengutip efisiensi dalam hal kekuatan . Anda tidak ingin jatuh ke dalam perangkap itu. Karena waktu untuk memproses beban tentu akan berbeda tergantung pada bagaimana beban seimbang, Anda harus mengintegrasikan hasilnya dari waktu ke waktu untuk menemukan jumlah bersih energi yang digunakan untuk menyelesaikan pekerjaan untuk mencapai hasil yang kredibel.
sumber
Saya melakukan beberapa tes hari ini menggunakan komputer ini (Intel C2D T8100) dan menggunakan aplikasi SETI @ Home yang dioptimalkan dari penginstal bahasa gila 0.36. Saya menggunakan M $ Joulmeter untuk menghitung konsumsi daya. Saya mengukur kali pohon konsumsi. Pertama, saya membiarkan BOINC mengambil core 100% dan waktu CPU 100% dan membiarkannya berjalan selama satu jam. Prosesor menghabiskan 20W dan grafik waktu CPU dari task manager datar pada 100%. Konsumsi daya rata-rata komputer saya adalah 45,05W dan naik dan saat ini saya berhenti menguji konsumsi daya adalah 46,18W.
Pada pengujian kedua, saya menetapkan BOINC untuk mengambil 50% dari core yang tersedia dan 100% dari waktu CPU dan membiarkannya berjalan selama satu jam. Konsumsi daya CPU bervariasi antara 12W dan 13W. Konsumsi rata-rata adalah 42,72 W dan terus meningkat. Saat ini saya menghentikan tes, konsumsi 44W. Untuk membuat grafik waktu CPU untuk inti yang ditargetkan menjadi garis datar, saya menetapkan afinitas program ke satu inti dan prioritas ke tinggi. Grafik untuk core lain menunjukkan penggunaan waktu CPU yang agak lebih tinggi dari biasanya.
Untuk pengujian ketiga saya mengatur BOINC untuk menggunakan 100% dari core yang tersedia dan 50% dari waktu CPU. Konsumsi daya bervariasi dalam lompatan besar antara 5W dan 17W. Konsumsi daya rata-rata setelah satu jam pengujian adalah 39,96W dan turun. Grafik waktu CPU seperti looled
/\/\/\/\/\/\/\/\/\/\/\/\/\
. Paku diperkirakan karena ukuran unit waktu yang digunakan oleh BOINC.Jadi saya percaya bahwa lebih efisien untuk menggunakan dua core yang berjalan pada setengah beban daripada menjalankan satu inti pada beban penuh.
Dan ya, saya tahu bahwa untuk penelitian yang tepat diperlukan lebih banyak sampel, tetapi pada saat itu saya tidak memiliki cukup komputer atau waktu untuk melakukan statistik yang tepat.
sumber
Jawaban atas pertanyaan Anda ada dua: Jika Anda menjalankan kode paralel yang sangat dapat diubah, maka menyeimbangkan beban lebih dari beberapa core selalu lebih efisien. Core akan berjalan pada beban yang lebih rendah melepaskan lebih sedikit panas daripada satu inti yang didorong ke batas itu. Di sisi lain, jika kode Anda tidak dapat diparalelkan, maka menjalankannya pada banyak core kurang efisien karena jumlah cache yang hilang yang akan terjadi karena ketergantungan antar kode. Ini mungkin masih menghasilkan lebih sedikit panas, tetapi pasti akan memakan waktu lebih lama untuk menyelesaikan tugas Anda dibandingkan menjalankannya pada satu inti.
sumber
Pertanyaan Anda saat ditanyakan memiliki terlalu banyak hal yang tidak diketahui. Apakah Anda bertanya tentang efisiensi waktu atau efisiensi energi? Kode tidak paralel atau kode paralel? Pekerjaan tunggal atau desktop multi-tasking? Jika Anda memiliki tagihan energi lebih dari $ 1000 / bulan untuk komputer Anda, maka mungkin perlu satu atau dua kekhawatiran. Kalau tidak, Anda tidak bisa menabung cukup untuk membuat masalah ini layak untuk diselesaikan. Menyenangkan untuk dibicarakan - tetapi jika Anda memiliki masalah serius, jawaban terbaik adalah: coba beberapa hal berbeda dan lihat apa yang berhasil.
sumber