งงกันมั้ย?

งงกันมั้ย?
ผมเขียนโปรแกรมนึง ซึ่งทำงานแบบ Multi Threading

โดยทั้ง 2 Thread จะ while เพื่อนับรอบ Loop เป็นเวลา 5 วินาที
และนำรอบทั้งหมดมาหาร 5 (หารอบต่อวินาที)

ทดสอบบนเครื่อง CPU 1 Core (รัน 1 Thread)
ROPs: 132332990.8 Rps

ทดสอบบนเครื่อง CPU 1 Core (รัน 2 Thread)
Thread1 ROPs: 70476239.4 Rps
Thread2 ROPs: 72902260.6 Rps

ต่อไป มาทดสอบอีกเครื่องกันนะครับ (เครื่องนี้ค่อนข้างแรงกว่าเครื่องแรก)

ทดสอบบนเครื่อง CPU 4 Core (รัน 1 Thread)
ROPs: 192289914 Rps

ทดสอบบนเครื่อง CPU 4 Core (รัน 2 Thread)
Thread1 ROPs: 38434024.6 Rps
Thread2 ROPs: 38854396.6 Rps

ทดสอบบนเครื่อง CPU 4 Core (รัน 2 Thread + Affinity only CPU 0)
Thread1 ROPs: 83144022.2 Rps
Thread2 ROPs: 69798122.2 Rps

งงกันมั้ยครับ? ว่าทำไม 2 Thread แบบกระจายการประมวลผลไปทุก Core ถึงทำงานช้ากว่า แบบ 2 Thread แต่กระจุกอยู่แค่ Core เดียว??

ผมก็งงครับ

หมายเหตุ: Rps = Rop per second หรือ รอบต่อวินาที

ใส่ความเห็น