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?
sumber
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?
Seperti yang dikatakan orang lain, ini sepenuhnya tergantung pada tugas.
Untuk mengilustrasikan ini, mari kita lihat tolok ukur yang sebenarnya:
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.
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.
sumber
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.
sumber
Itu sangat tergantung pada CPU dan beban kerja seperti yang dikatakan orang lain.
Intel mengatakan :
(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.
sumber