Cores vs Threads: Berapa banyak utas yang harus saya jalankan di mesin ini?


41

Berapa banyak utas yang harus saya jalankan di mesin ini?

lscpuKata saya ada 96 core. Apakah itu inti fisik? Berapakah utas maksimum dan optimal yang dapat saya jalankan di mesin ini?

https://stackoverflow.com/a/10670440/610569 menunjukkan bahwa saya dapat menjalankan lebih dari 20 utas per inti. Apakah itu tidak apa apa? Apakah itu optimal?

alvas@server:~$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                96
On-line CPU(s) list:   0-95
Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             4
NUMA node(s):          4
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 62
Model name:            Intel(R) Xeon(R) CPU E5-4657L v2 @ 2.40GHz
Stepping:              4
CPU MHz:               2700.000
CPU max MHz:           2900.0000
CPU min MHz:           1200.0000
BogoMIPS:              4801.91
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              30720K
NUMA node0 CPU(s):     0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92
NUMA node1 CPU(s):     1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93
NUMA node2 CPU(s):     2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94
NUMA node3 CPU(s):     3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63,67,71,75,79,83,87,91,95

Maafkan noobiness saya di core / utas.

Jawaban:


52

Ini yang ingin kamu tahu

Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             4

Anda memiliki 4 soket CPU, setiap CPU dapat memiliki hingga 12 core dan setiap core dapat memiliki dua utas.

Jumlah utas maksimum Anda adalah, 4 CPU x 12 inti x 2 utas per inti, jadi 12 x 4 x 2 adalah 96. Oleh karena itu jumlah utas maksimal adalah 96 dan jumlah utas inti adalah 48.

Apa yang lebih baik

Itu tergantung pada apa yang ingin Anda lakukan, lebih banyak utas berarti lebih sedikit frekuensi (yaitu 3 GHz menjadi terbagi menjadi dua) tetapi multi-tasking yang lebih baik (lebih banyak utas) dan menggunakan inti penuh (tanpa hyper-threading) lebih baik untuk tugas penggunaan CPU yang tinggi ( yaitu game).

Semoga ini bisa membantu Anda.


3
"lebih banyak utas berarti frekuensi lebih sedikit", pernyataan ini sangat salah. Bahkan dengan hyperthreading, proses tunggal dapat menggunakan prosesor secara lengkap. Hyperthreading dapat menggunakan pipa instruksi dan register yang jika tidak digunakan melakukan beberapa eksekusi dari berbagai proses / utas secara paralel, meningkatkan throughput maksimum prosesor dalam kasus tertentu. Keuntungan kinerja sangat aplikasi / konfigurasi. Setelah P4 tidak ada hukuman kinerja yang didokumentasikan dengan HT diaktifkan (inti gen P4 memiliki beberapa masalah dalam kasus-kasus tertentu)
NGRhodes

2
Saya tidak melihat pernyataan ini sangat salah. Jika Anda menjalankan dua proses pada satu inti, frekuensi yang lebih sedikit tersedia untuk setiap proses, jika dibandingkan dengan menjalankan setiap proses pada inti masing-masing. Ini adalah pernyataan yang sangat mendasar dan sederhana, tetapi OP tidak pernah meminta detail tentang hyper-threading atau cara kerjanya. Meskipun Anda benar, hyper-threading telah datang jauh dan dengan 48 core saya yakin mereka tidak ingin mematikannya.
Mark Kirby

2
@NGRhodes: Intel HT cukup halus untuk tumpang tindih eksekusi out-of-order antara dua utas. Ini pada dasarnya adalah inti dari HT, untuk mengekspos lebih banyak paralelisme tingkat instruksi ke inti out-of-order. (yaitu menjaga agar unit-unit eksekusi tersebut tetap diumpankan bahkan ketika satu utas pulih dari salah duga cabang atau menunggu kehilangan cache.) Bandwidth front-end terbelah 50/50 (kecuali ketika satu utas macet), jadi tergantung pada jenis apa bottleneck kode Anda mengalami, HT mungkin memberi Anda throughput hampir dua kali lipat, atau hampir tidak ada throughput tambahan. (Seperti 15% untuk penyandian video x264.)
Peter Cordes

1
Lihat agner.org/optimize untuk detail mikroarsitektur.
Peter Cordes

1

Setiap utas inti cpu (utas berbasis perangkat keras) - salah satu dari 96 inti Anda secara efisien dapat menangani 16 utas (utas berbasis perangkat lunak fe C ++ thread.h) dalam kebanyakan kasus menurut pendapat teoretis saya.


1
dari mana Anda mendapatkan "secara efisien dapat menangani 16 utas"? Outputnya mengatakan "Utas (s) per inti: 2"
commitandroider

0

Anda akan menemukan berapa banyak utas yang dapat Anda jalankan di mesin Anda dengan menjalankan perintah htop atau ps yang mengembalikan jumlah proses pada mesin Anda.

Anda dapat menggunakan halaman manual tentang perintah 'ps'.

man ps

Jika Anda ingin menghitung jumlah semua proses pengguna, Anda dapat menggunakan salah satu dari perintah ini:

  1. ps -aux| wc -l
  2. ps -eLf | wc -l

Menghitung jumlah proses pengguna:

  1. ps --User root | wc -l

Anda juga dapat menggunakan "htop" [Referensi] :

Menginstal di Ubuntu atau Debian:

sudo apt-get install htop

Menginstal di Redhat atau CentOS:

yum install htop
dnf install htop      [On Fedora 22+ releases]

Jika Anda ingin mengkompilasi htop dari kode sumber, Anda akan menemukannya di sini .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.