Berapa banyak speedup yang diberikan thread hyper? (dalam teori)

38

Saya bertanya-tanya apa speedup teoretis dari CPU hyper threaded. Dengan asumsi 100% paralelisasi, dan 0 komunikasi - dua CPU akan memberikan kecepatan 2. Bagaimana dengan CPU hyper threaded?

Mikhail
sumber

Jawaban:

59

Seperti yang dikatakan orang lain, ini sepenuhnya tergantung pada tugas.

Untuk mengilustrasikan ini, mari kita lihat tolok ukur yang sebenarnya:

masukkan deskripsi gambar di sini

Ini diambil dari tesis master saya (saat ini tidak tersedia online).

Menunjukkan ini relatif kecepatan-up 1 dari algoritma pencocokan string (setiap warna adalah algoritma yang berbeda). Algoritma dieksekusi pada dua prosesor Intel Xeon X5550 quad-core dengan hyperthreading. Dengan kata lain: ada total 8 core, yang masing-masing dapat mengeksekusi dua utas perangkat keras (= “hyperthreads”). Oleh karena itu, patokan menguji kecepatan hingga 16 utas (yang merupakan jumlah maksimum utas bersamaan yang dapat dieksekusi konfigurasi ini).

Dua dari empat algoritma (biru dan abu-abu) berskala lebih atau kurang linier pada seluruh rentang. Artinya, manfaat dari hyperthreading.

Dua algoritma lainnya (dalam warna merah dan hijau; pilihan yang tidak menguntungkan untuk orang buta warna) skala secara linear hingga 8 thread. Setelah itu, mereka mandek. Ini jelas menunjukkan bahwa algoritma ini tidak mendapat manfaat dari HyperThreading.

Alasannya? Dalam kasus khusus ini memuat memori; dua algoritma pertama membutuhkan lebih banyak memori untuk perhitungan, dan dibatasi oleh kinerja bus memori utama. Ini berarti bahwa sementara satu utas perangkat keras menunggu memori, yang lainnya dapat melanjutkan eksekusi; case-use utama untuk utas perangkat keras.

Algoritme lain membutuhkan lebih sedikit memori dan tidak perlu menunggu bus. Mereka hampir seluruhnya menghitung terikat dan hanya menggunakan bilangan bulat aritmatika (operasi bit, pada kenyataannya). Oleh karena itu, tidak ada potensi untuk eksekusi paralel dan tidak ada manfaat dari pipa instruksi paralel.


1 Yaitu faktor percepatan 4 berarti bahwa algoritme berjalan empat kali lebih cepat seolah-olah dijalankan hanya dengan satu utas. Maka, menurut definisi, setiap algoritma yang dijalankan pada satu utas memiliki faktor percepatan relatif 1.

Konrad Rudolph
sumber
Jawaban terbaik :-)
Sklivvz
1
Berapa kecepatan sebenarnya dari algoritma, diplot terhadap jumlah core? Yaitu apa kenaikan kecepatan untuk algoritma tercepat dalam tes ini? Hanya ingin tahu :).
crazy2be
@ crazy2be Untuk garis biru ( algoritma Horspool ), waktu berjalan dari 4,16 detik menjadi 0,35 detik dengan 16 utas. Jadi kecepatannya adalah 11,74. Namun, itu dengan hyper-threading. Ketika diplot terhadap jumlah core, kecepatan dari algoritma ini adalah 7.17 pada 8 core.
Konrad Rudolph
5
satu-satunya masalah dengan jawaban ini adalah saya hanya dapat mengunggahnya sekali. Ini adalah jawaban yang sangat obyektif untuk pertanyaan subyektif;)
Journeyman Geek
20

Masalahnya, itu tergantung tugas.

Gagasan di balik hyperthreading pada dasarnya adalah bahwa semua CPU modern memiliki lebih dari satu masalah eksekusi. Biasanya lebih dekat ke selusin sekarang. Dibagi antara Integer, floating point, SSE / MMX / Streaming (apa pun namanya hari ini).

Selain itu, setiap unit memiliki kecepatan yang berbeda. Yaitu Diperlukan siklus matematika integer unit 3 untuk memproses sesuatu, tetapi pembagian floating point 64 bit mungkin membutuhkan 7 siklus. (Ini adalah angka mitos yang tidak didasarkan pada apa pun).

Eksekusi out of order membantu banyak dalam menjaga berbagai unit selengkap mungkin.

Namun setiap tugas tidak akan menggunakan setiap unit eksekusi tunggal setiap saat. Bahkan memisahkan benang pun bisa membantu sepenuhnya.

Dengan demikian teori menjadi dengan berpura-pura ada CPU kedua, utas lain dapat berjalan di atasnya, menggunakan unit eksekusi yang tersedia tidak digunakan dengan mengatakan Audio transcoding Anda, yang merupakan 98% SSE / MMX stuff, dan unit int dan float benar-benar menganggur kecuali untuk beberapa hal.

Bagi saya, ini lebih masuk akal di dunia CPU tunggal, ada memalsukan CPU kedua memungkinkan untuk thread untuk lebih mudah melewati ambang batas itu dengan sedikit (jika ada) pengkodean tambahan untuk menangani CPU kedua palsu ini.

Di dunia inti 3/4/6/8, memiliki CPU 6/8/12/16, apakah itu membantu? Tidak tahu Sebanyak? Tergantung pada tugas yang dihadapi.

Jadi untuk benar-benar menjawab pertanyaan Anda, itu akan tergantung pada tugas-tugas dalam proses Anda, unit eksekusi mana yang digunakan, dan dalam CPU Anda, unit eksekusi mana yang menganggur / kurang dimanfaatkan dan tersedia untuk CPU palsu kedua.

Beberapa 'kelas' dari hal-hal komputasi dikatakan menguntungkan (samar-samar secara umum). Tetapi tidak ada aturan yang keras dan cepat, dan untuk beberapa kelas, itu memperlambat segalanya.

geoffc
sumber
2
Walaupun saya sedang mencari sesuatu seperti "1.7 kali percepatan" jawaban ini sangat bagus karena tidak menampar tampilan hitam dan putih pada masalah ini.
Mikhail
@Mikhail: Intinya adalah bahwa tidak ada faktor sederhana - tergantung, seperti sering dalam hidup :-).
sleske
4
Intinya benar. Satu berdalih, meskipun: tidak ada alasan apriori mengapa satu inti harus mendapat manfaat lebih dari hyperthreading daripada beberapa core. Untuk tugas yang salah, tidak ada untung. Untuk tugas yang tepat, keduanya untung dengan faktor yang sama.
Konrad Rudolph
@Konrad: Saya pikir maksud saya, adalah perbedaan antara satu inti dan dua inti mungkin lebih berharga daripada perbedaan antara 4 dan 8 atau 2 dan 4. Yaitu memiliki inti kedua, untuk aplikasi yang berulir buruk mungkin membantu sedikit lagi.
geoffc
“Untuk aplikasi yang berurutan buruk” - itulah bagian penting. Tetapi secara realistis, sebagian besar dukungan threading aplikasi buruk sehingga Anda benar.
Konrad Rudolph
5

Saya punya beberapa bukti anekdotal untuk ditambahkan ke jawaban geoffc karena saya sebenarnya memiliki CPU Core i7 (4-core) dengan hyperthreading dan telah memainkan sedikit dengan transcoding video, yang merupakan tugas yang membutuhkan sejumlah komunikasi dan sinkronisasi tetapi memiliki cukup paralelisme yang Anda dapat secara penuh memuat sistem.

Pengalaman saya dengan bermain dengan berapa banyak CPU yang ditugaskan untuk tugas umumnya menggunakan 4 "ekstra" core hyphreaded disamakan dengan setara dengan sekitar 1 tambahan CPU senilai daya pemrosesan. Core 4 "hyperthreaded" tambahan menambahkan tentang jumlah yang sama dari kekuatan pemrosesan yang dapat digunakan dengan pergi dari 3 ke 4 core "nyata".

Memang ini bukan semata-mata tes yang adil karena semua utas pengkodean kemungkinan akan bersaing untuk sumber daya yang sama di CPU tetapi bagi saya itu memang menunjukkan setidaknya dorongan kecil dalam kekuatan pemrosesan keseluruhan.

Satu-satunya cara nyata untuk menunjukkan apakah itu benar-benar membantu atau tidak adalah dengan menjalankan beberapa tes tipe Integer / Floating Point / SSE yang berbeda pada saat yang sama pada suatu sistem dengan diaktifkan dan dimatikannya hyperthreading dan melihat seberapa banyak daya pemrosesan yang tersedia dalam terkontrol. lingkungan Hidup.

Mokubai
sumber
1
Nah poin yang jelas - itu tergantung aplikasi. Saya yakin komputasi komunikasi yang tinggi dapat dipercepat karena core 0 dan core 0-h akan berkomunikasi melalui cache yang sama, tanpa menggunakan RAM yang lambat.
Mikhail
1
@Mikhail, maka masalahnya adalah jika kedua utas membutuhkan daya pemrosesan dalam jumlah besar maka keduanya akan bersaing untuk sumber daya yang sama dan akan jauh lebih baik berkomunikasi melalui CPU L3 cache bersama (i7 memiliki cache L1 & L2 per inti dan cache L3 bersama) atau bahkan memori sistem dan melakukan tugas mereka secara terpisah. Ini semua adalah latihan ayunan dan putaran besar ...
Mokubai
3

Itu sangat tergantung pada CPU dan beban kerja seperti yang dikatakan orang lain.

Intel mengatakan :

Kinerja yang terukur pada prosesor Intel® Xeon® MP dengan Teknologi Hyper-Threading menunjukkan peningkatan kinerja hingga 30% pada tolok ukur aplikasi server umum untuk teknologi ini

(Ini agak konservatif bagiku.)

Dan ada lagi kertas lain (yang belum saya baca semuanya) dengan lebih banyak nomor di sini . Satu hal yang menarik dari makalah itu adalah bahwa HyperThreading dapat membuat thins lebih lambat untuk beberapa tugas.

Arsitektur Bulldozer AMD bisa jadi menarik . Mereka menggambarkan setiap inti secara efektif 1,5 core. Ini semacam hyperthreading ekstrim atau multi-core sub-standar tergantung pada seberapa yakin Anda terhadap kinerjanya. Angka-angka dalam bagian itu menyarankan percepatan komentar antara 0,5x dan 1,5x.

Akhirnya, kinerja juga tergantung pada sistem operasi. OS akan, semoga, mengirim proses ke CPU nyata dalam preferensi untuk HyperShread yang hanya menyamar sebagai CPU. Kalau tidak, dalam sistem dual-core, Anda mungkin memiliki satu CPU idle dan satu core yang sangat sibuk dengan dua benang meronta-ronta. Saya ingat bahwa ini terjadi pada Windows 2000, tentu saja, semua OS modern mampu.

Stephen Darlington
sumber
1
OS harus memastikan bahwa utasnya tidak menghalangi satu sama lain :)
Mikhail