Perusahaan saya baru saja membeli komputer baru untuk menggantikan mesin Windows XP 2GB yang lama. Seseorang di tim saya memperhatikan bahwa mereka datang dengan hyperthreading dinonaktifkan, dan menyuruh semua orang untuk reboot dan menyalakannya. Apakah ada manfaat untuk memprogram pada mesin dengan hipertensi yang dinonaktifkan?
13
Jawaban:
Ya saya telah bekerja pada aplikasi yang berkinerja lebih baik ketika menjalankan mesin dengan HT dinonaktifkan .
Apa yang terjadi adalah, kode asli akan membuat dua kali lebih banyak utas saat dijalankan pada mesin hipertread (yang Anda anggap semacam titik keseluruhan dari HT). Namun, throughput dari utas tersebut sangat sensitif terhadap jumlah cache yang tersedia untuk utas. Dengan dua kali lebih banyak utas yang berjuang untuk jumlah cache yang tetap, cache yang tersedia per thread terlalu rendah dan meronta-ronta terjadi: akan ada lebih banyak cache yang terlewat, banyak lebih banyak akses memori utama, dan kinerja mendapat pukulan besar dibandingkan dengan menjalankan dengan lebih sedikit utas dan lebih banyak cache per utas (yang Anda dapatkan jika Anda menjalankan aplikasi pada mesin dengan HT dinonaktifkan).
Perbaikan utama adalah membuat aplikasi memeriksa platform HW lebih baik dan mengambil ukuran cache dan jumlah cache yang dianggap perlu per thread ketika mempertimbangkan berapa banyak thread yang akan dibuat. Bagaimanapun masalah dengan cepat menghilang dengan generasi CPU berikutnya, yang menggandakan ukuran cache (dan kami benar-benar mulai melihat manfaat sederhana dari HT saat itu). Namun, seluruh episode meninggalkan warisan yang panjang dan langgeng untuk merekomendasikan HT selalu dinonaktifkan pada platform apa pun yang digunakan oleh SW kami, dan dengkuran " mesin yang tidak mengaktifkan HT, kan? " Merespons setiap masalah kinerja. (Saya pikir masalah mendasarnya adalah kebanyakan non-geeks tidak mengerti apa sebenarnya HT itu.)
sumber
Saya tidak tahu detail teknis, tetapi tampaknya jika aplikasi (atau OS) tidak dioptimalkan untuk hyper-threading, hyper-threading sebenarnya dapat menurunkan kinerja.
Bahkan Intel merekomendasikan untuk mematikannya dalam hal ini:
(Sumber: http://www.intel.com/support/processors/sb/CS-017343.htm )
Jadi mungkin pabrikan (atau pemasok) ingin berhati-hati.
sumber
Kemungkinan besar, OEM hanya bersikap konservatif. OEM sering dikirim dengan fitur lanjutan dinonaktifkan (seperti HT, No-Execute bit, vt, dll.) Dimatikan. Alasannya adalah bahwa beberapa keadaan langka mungkin membuat pengaturan tersebut gagal, dan orang yang benar-benar menginginkan fitur dapat dengan mudah menyalakannya.
Juga, beberapa bug langka di OS telah menyebabkan masalah keamanan potensial ketika beberapa fitur diaktifkan. teknologi virtualisasi, misalnya, pernah memiliki masalah seperti itu. Jadi, itu hanya vendor yang konservatif.
Hyperthreading umumnya berguna untuk desktop interaktif, seperti mesin pemrograman. Meskipun, beberapa orang mungkin ingin mematikannya jika aplikasi Anda akan berjalan di server tanpa HT. Hanya untuk mengurangi kemungkinan perbedaan perangkat keras.
sumber
Hyperthreading tidak menambahkan core baru ke CPU. Anda masih memiliki satu unit aritmatika / logika, satu unit floating point (...) per inti. Jadi, jika Anda memiliki banyak utas / proses yang melakukan hal yang sangat berbeda, HTT dapat meningkatkan kinerja. Tetapi jika Anda memiliki banyak utas yang melakukan hal-hal yang kurang lebih sama (tidak jarang pada aplikasi-aplikasi pengolah angka), kinerja sebenarnya dapat sangat buruk akibat HTT.
sumber
Mungkin masalah cache-koherensi dalam kode multithreaded besar-besaran? Jika Anda memiliki cache CPU yang terpisah, secara teori dimungkinkan dua utas memiliki data yang sama di-cache dan memodifikasinya secara bersamaan dengan nilai yang berbeda. Jika Anda memiliki cache terpadu di beberapa titik antara CPU dan memori utama (baik L2 atau L3), maka mungkin ada beberapa mekanisme yang akan mencegah hal ini, tetapi pada CPU kelas bawah dengan cache yang lebih kecil, mungkin tidak.
Sebagai alternatif, dimungkinkan bahwa mengaktifkan hiphreading pada chip yang tidak mendukungnya akan membuang kode selama POST, sehingga pemasok BIOS mengabaikannya karena mereka tidak tahu CPU seperti apa yang akan dimiliki sistem.
sumber
Satu alasan tidak untuk mematikan hyperthreading pada mesin pengembang adalah karena dapat menyembunyikan beberapa bug multi-threading yang halus. Tetapi ini hanya benar-benar berlaku pada mesin single-core single-core. Multi-core akan memunculkan lebih banyak bug multi-threading selama pengujian.
OTOH, saya ragu Anda akan melihat prosesor single-core dengan hyperthreading dinonaktifkan secara default. Pilihan saya ada pada jawaban Sleskes.
sumber
Banyak perangkat lunak lama ditulis pada mesin inti tunggal, dan mungkin ada bug di dalamnya ketika dijalankan pada mesin multicore. Mungkin instruksi itu benar-benar dimaksudkan untuk mengatakan "Ini tidak bekerja di mesin multicore", hanya saja untuk waktu yang lama hyperthreading adalah satu-satunya mesin multi-core yang mungkin Anda lihat dalam penggunaan umum.
sumber