Jika inti virtual kedua diizinkan untuk berkontribusi ketika yang pertama dinyatakan macet, itu lebih baik daripada tidak , sehingga Anda mendapatkan (setidaknya) sedikit pekerjaan tambahan.
Pertanyaannya menjadi: kapan memiliki dua utas yang berbeda menyebabkan satu berjalan lebih buruk? Prediksi cabang dan dependensi antara instruksi tidak akan berubah. Menunggu akses memori sekarang ... dua utas bersaing atas akses memori, baik dalam pemanfaatan cache dan bandwidth.
Jika Anda memiliki beberapa CPU yang berjalan dengan HT dan yang lainnya tidak, apakah itu juga berarti Anda akan menetapkan utas tertentu untuk satu jenis atau yang lain? Saya kira tidak: program Anda akan menjalankan utasnya pada inti virtual acak. Jadi, bagaimana memecah konfigurasi membantu? Karena setiap CPU memiliki cache sendiri, satu-satunya pengaruh adalah karena bandwidth memori dan beban koheransi cache.
Secara umum, Anda mencapai titik di mana memiliki sesuatu yang lebih banyak yang dapat Anda lakukan lebih mahal daripada membiarkan beberapa unit eksekusi CPU menganggur. Ini tidak tergantung pada jumlah utas secara langsung, tetapi pada apa yang dilakukan ulir , dan arsitektur memori terperinci dan nuansa kinerja dari berbagai komponen.
Tidak ada jawaban sederhana. Bahkan dengan program khusus dalam pikiran, mesin mungkin berbeda dari orang-orang yang menghubungkan pengalaman mereka sendiri.
Anda harus mencobanya sendiri dan mengukur apa yang tercepat, dengan pekerjaan spesifik pada mesin itu. Dan bahkan kemudian, itu dapat berubah dengan pembaruan perangkat lunak dan menggeser penggunaan dari waktu ke waktu.
Lihatlah volume 3 karya Anger's magnum opus . Jika Anda melihat dengan cermat pada beberapa prosesor tertentu, Anda dapat menemukan sumber daya yang membatasi di antara saluran dalam dari banyak langkah yang diperlukan untuk mengeksekusi kode. Anda perlu menemukan kasus di mana komitmen berlebihan menyebabkannya mengeksekusi lebih lambat, sebagai lawan dari tidak mengambil lebih banyak pekerjaan. Secara umum itu berarti semacam caching; dan di mana sumber daya dibagi di antara utas.
Apa yang dimaksud dengan meter CPU: ini melaporkan semua waktu yang tidak dihabiskan untuk menjalankan utas menganggur. Kedua utas logis yang ditugaskan ke inti tidak akan menganggur meskipun pekerjaan aktual yang dilakukan pada salah satu dari mereka mungkin kecil. Waktu yang dihabiskan dengan pipa macet selama beberapa siklus sampai hasilnya siap, memori diambil, operasi atom dipagari, dll. Juga tidak menyebabkan thread disimpan sebagai "tidak siap" sehingga tidak akan diam, dan waktu masih menunjukkan sedang digunakan. Menunggu RAM tidak akan ditampilkan sebagai siaga. Hanya sesuatu seperti I / O yang akan membuat thread thread dan berhenti mengisi waktu ke arahnya. Mutex sistem operasi secara umum akan melakukannya, tetapi dengan munculnya sistem multicore itu tidak lagi menjadi hal yang pasti, karena "spinlock" tidak akan membuat utas kembali ke rak.
Jadi, meteran CPU 100% tidak berarti semuanya lancar, jika CPU sering macet menunggu memori. Semakin sedikit inti logis yang menunjukkan 90% sangat mungkin menyelesaikan lebih banyak pekerjaan, karena selesai dengan angka-angka dan sekarang menunggu pada disk.
Jadi jangan khawatir tentang meteran CPU. Lihatlah kemajuan aktual yang dibuat, hanya .