แกนกับเธรด: ฉันควรรันเธรดนี้บนเครื่องนี้กี่เธรด?


41

ฉันควรรันเธรดบนเครื่องนี้กี่เธรด

ของฉันlscpuบอกว่ามี 96 แกน เป็นแกนกายภาพเหล่านั้นหรือไม่ เธรดสูงสุดและดีที่สุดที่ฉันสามารถเรียกใช้บนเครื่องนี้คืออะไร

https://stackoverflow.com/a/10670440/610569แสดงว่าฉันสามารถเรียกใช้มากกว่า 20 เธรดต่อหนึ่งคอร์ ไม่เป็นไร เป็นสิ่งที่ดีที่สุด?

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

ให้อภัยความไร้สาระของฉันในแกน / หัวข้อ

คำตอบ:


52

นี่คือสิ่งที่คุณต้องการรู้

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

คุณมีซ็อกเก็ต CPU 4 ตัวแต่ละซีพียูสามารถมีได้ถึง 12 คอร์และแต่ละคอร์สามารถมีสองเธรด

จำนวนเธรดสูงสุดของคุณคือ 4 คอร์ x 12 คอร์ x 2 เธรดต่อคอร์ดังนั้น 12 x 4 x 2 คือ 96 ดังนั้นจำนวนเธรดสูงสุดคือ 96 และจำนวนคอร์สูงสุดคือ 48

อะไรดีกว่า ?

ขึ้นอยู่กับสิ่งที่คุณต้องการทำเธรดที่มากขึ้นหมายถึงความถี่ที่น้อยลง (เช่น 3 กิกะเฮิร์ตซ์จะแบ่งออกเป็นสองส่วน) แต่มัลติทาสกิ้งที่ดีขึ้น (เธรดที่มากขึ้น) และการใช้คอร์เต็มรูปแบบ เช่นเกม)

หวังว่านี่จะช่วยคุณได้


3
"กระทู้เพิ่มเติมหมายถึงความถี่น้อย" คำสั่งนี้ผิดมาก แม้จะมีการทำไฮเปอร์เธรด แต่กระบวนการเดียวก็สามารถใช้งานโปรเซสเซอร์ได้อย่างสมบูรณ์ ไฮเปอร์เธรดสามารถใช้ไพพ์ไลน์คำสั่งและรีจิสเตอร์ที่ไม่ได้ทำงานเพื่อทำการประมวลผลบางอย่างจากโพรเซส / เธรดต่าง ๆ ในแบบขนานเพิ่มปริมาณงานสูงสุดของโปรเซสเซอร์ในบางกรณี การเพิ่มประสิทธิภาพเป็นแอพพลิเคชั่น / การกำหนดค่ามาก หลังจาก P4 ไม่มีบทลงโทษประสิทธิภาพที่บันทึกไว้เมื่อเปิดใช้งาน HT (แกน P4 Gen มีปัญหาบางอย่างในบางกรณี)
NGRhodes

2
ฉันไม่เห็นว่าคำสั่งนี้ผิดมาก หากคุณรันสองกระบวนการในแกนเดียวความถี่ที่น้อยกว่าจะใช้ได้สำหรับแต่ละกระบวนการเมื่อเปรียบเทียบกับการรันแต่ละกระบวนการบนแกนของตัวเอง มันเป็นคำสั่งพื้นฐานและเรียบง่าย แต่ OP ไม่เคยขอรายละเอียดเกี่ยวกับการทำเกลียวมากเกินไปหรือวิธีการทำงาน แม้ว่าคุณจะถูกต้องการทำไฮเปอร์เธรดนั้นมาไกลและด้วย 48 คอร์ฉันแน่ใจว่าพวกเขาไม่ต้องการปิด
Mark Kirby

2
@NGRhodes: Intel HT นั้นละเอียดพอที่จะทับซ้อนการประมวลผลที่ไม่เป็นไปตามคำสั่งระหว่างสองเธรด นี่คือจุดรวมทั้งหมดของ HT เพื่อเปิดเผยความเท่าเทียมในระดับคำสั่งเพิ่มเติมให้กับแกนกลางที่ล้าสมัย (นั่นคือการรักษาหน่วยการดำเนินการเหล่านั้นที่ป้อนแม้ในขณะที่เธรดหนึ่งกำลังกู้คืนจากการคาดคะเนสาขาหรือรอแคชมิส) แบนด์วิธปัญหา Front-end จะแบ่ง 50/50 (ยกเว้นเมื่อเธรดหนึ่งหยุดทำงาน) ดังนั้นขึ้นอยู่กับชนิดของ คอขวดของคุณมีปัญหา HT อาจให้ปริมาณงานเพิ่มขึ้นเกือบสองเท่าหรือเกือบจะไม่มีปริมาณงานเพิ่ม (เช่น 15% สำหรับการเข้ารหัสวิดีโอ x264)
Peter Cordes

1
ดูagner.org/optimizeสำหรับรายละเอียด microarchitectural
Peter Cordes

1

cpu core thread แต่ละอัน (thread-based hardware) - หนึ่งใน 96 คอร์ของคุณได้อย่างมีประสิทธิภาพสามารถจัดการ 16 เธรด (เธรดซอฟต์แวร์ที่ใช้ fe C ++ thread.h) ในกรณีส่วนใหญ่ในความเห็นทางทฤษฎีของฉัน


1
คุณได้รับ "ประสิทธิภาพสามารถจัดการ 16 เธรด" ได้ที่ไหน การส่งออกกล่าวว่า "(s) กระทู้ต่อคอร์: 2"
committedandroider

0

คุณจะพบจำนวนเธรดที่คุณสามารถรันบนเครื่องของคุณโดยการรันคำสั่ง htop หรือ ps ที่ส่งคืนจำนวนของกระบวนการบนเครื่องของคุณ

คุณสามารถใช้ man page เกี่ยวกับคำสั่ง 'ps'

man ps

หากคุณต้องการคำนวณจำนวนกระบวนการของผู้ใช้ทั้งหมดคุณสามารถใช้หนึ่งในคำสั่งเหล่านี้:

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

การคำนวณจำนวนกระบวนการของผู้ใช้:

  1. ps --User root | wc -l

นอกจากนี้คุณยังสามารถใช้ "htop" [อ้างอิง] :

การติดตั้งบน Ubuntu หรือ Debian:

sudo apt-get install htop

การติดตั้งบน Redhat หรือ CentOS:

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

หากคุณต้องการที่จะรวบรวม htop จากซอร์สโค้ดคุณจะพบว่ามันนี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.