Apa alasan yang mungkin dimiliki seorang programmer untuk menginginkan hyperthreading dimatikan?

13

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?

Pops
sumber
1
Model Intel CPU apa yang Anda gunakan, mis. Core i5 atau i7?
JB King
@ JPK Pertanyaan bagus, saya tidak tahu, saya sendiri tidak punya salah satu mesin itu.
Pops
Pada notebook Pentium 4 lama, untuk mengurangi panas dan kebisingan kipas, dan mungkin membuat baterai bertahan beberapa menit lagi. Bukan jawaban karena itu harus menjadi hal sejarah kuno, dan seharusnya tidak berlaku dalam kasus Anda.
Steve314
Dalam permainan Lucasarts, Grim Fandango, mesin suara mengalami kondisi balapan saat berlari dengan hyperthreading.

Jawaban:

14

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.)

timday
sumber
11

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:

Sistem operasi desktop berikut tidak disarankan untuk digunakan dengan Teknologi Hyper-Threading. Jika Anda menggunakan salah satu sistem operasi desktop berikut, Anda disarankan untuk menonaktifkan Teknologi Hyper-Threading dalam program pengaturan BIOS sistem: [...]

(Sumber: http://www.intel.com/support/processors/sb/CS-017343.htm )

Jadi mungkin pabrikan (atau pemasok) ingin berhati-hati.

sleske
sumber
Ini juga diketahui membuat beberapa game berjalan lebih lambat daripada saat hyperthreading dinonaktifkan.
Klaim
4
Akan menarik jika mereka khawatir tentang kinerja permainan yang dimainkan di tempat kerja.
dietbuddha
Pada sistem multi-core, dua utas mungkin dialokasikan untuk dua hipertread pada inti yang sama, meninggalkan semua inti lainnya menganggur dan memberikan kinerja yang jauh lebih sedikit daripada menempatkan setiap utas pada inti yang berbeda. Sampai sistem operasi menyadari perbedaan antara core yang berbeda dan hyperthread yang berbeda pada core yang sama ...
Steve314
1
@ Steve314: Itu tentu saja terjadi pada Windows2000 (dan menonaktifkan HT jelas merupakan ide yang bagus jika Anda menjalankannya) tetapi Windows XP seharusnya HT aware (lihat mis. Download.microsoft.com/download/5/7/ 7 / ... ) dan tidak jatuh ke dalam perangkap seperti itu. Saya berasumsi logika serupa dibangun ke Linux dari beberapa versi kernel.
timday
6

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.

Erik Funkenbusch
sumber
2
Ini hampir selalu terjadi pada mesin yang datang dengan HT dimatikan. Kompatibilitas maksimum dan menyelamatkan vendor dari banjir panggilan dukungan yang aneh.
Patrick Hughes
5

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.

nikie
sumber
2

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.

TMN
sumber
Dugaan saya - ada mekanisme untuk menyelesaikan masalah koherensi ini, tetapi mungkin ada penalti kinerja yang signifikan. IIRC, halaman memori tertentu tidak dapat secara bebas dimuat ke sembarang halaman cache - biasanya ada mekanisme ini-alamat-peta-ke-satu-dari-beberapa-halaman-ini. Mungkin ada dua utas untuk memperebutkan beberapa halaman cache, membiarkan sisanya tidak digunakan? (mungkin bahkan dengan multi-core, meskipun agaknya dengan risiko lebih kecil).
Steve314
0

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.

Steve314
sumber
0

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.

JohnB
sumber