โปรเซสเซอร์ x64 รุ่นเก่าที่แพร่หลายโดยขาดคำสั่ง cmpxchg16b เป็นอย่างไร


8

คำสั่ง cmpxchg16b สำหรับการแลกเปลี่ยนหน่วยความจำแบบอะตอมมิก 128 บิตไม่ได้รับการสนับสนุนในโปรเซสเซอร์ x64 รุ่นเก่า แต่ดูเหมือนว่ารุ่นนี้ได้รับการสนับสนุนจากโปรเซสเซอร์รุ่นใหม่มาหลายปีแล้ว เป็นไปได้อย่างไรที่ฉันจะพบกับเครื่อง 64 บิตด้วยโปรเซสเซอร์เก่าที่ขาดคำสั่งนี้?


12
ลูกค้าที่สำคัญที่สุดของคุณอย่างแน่นอนมีหนึ่งในผู้ที่อยู่ในหนึ่งใน thats เซิร์ฟเวอร์การผลิตสำคัญของพวกเขาใช้เฉพาะสำหรับงานที่สำคัญทำงานในวันคริสต์มาสอีฟ แต่ไม่มีที่ไหนเลยอื่นและแน่นอนไม่ได้อยู่ในสภาพแวดล้อมการทดสอบ ...

7
ฉันไม่คิดว่าคำถามนี้ควรย้ายไปยัง superuser แล้ว มันช่วยให้มั่นใจได้ว่าผู้คนที่รู้คำตอบน้อยลงจะเห็นคำถามนี้
Christopher Barber

คำตอบ:


6

คุณกำลังดูโปรเซสเซอร์ AMD 64 บิตรุ่นแรกก่อน Rev F (ซึ่งเมื่อพวกเขาย้ายไปยังหน่วยความจำ DDR2) มีบาง Intel Doc Noconas ที่ก้าวไปเร็วเกินไปเช่นกันที่ไม่รองรับฉันคิดว่า แต่สิ่งเหล่านี้หายากกว่า


4

ฉันไม่มีข้อมูลเกี่ยวกับความชุกของซีพียูบางประเภทดังนั้นฉันจึงไม่สามารถตอบคำถามของคุณได้โดยตรง อย่างไรก็ตามคุณสามารถค้นหาว่า CPU รองรับได้CMPXCHG16Bหรือไม่โดยตรวจสอบว่าCPUID.01h.ECX.bit13มี1(ว่าง) หรือ0(ไม่พร้อมใช้)

นอกจากนี้โปรดทราบว่าคู่มือของ Intel ขอแนะนำว่าสำหรับการดำเนินการตามคำสั่งนี้โดยใช้อะตอมคุณต้องรวมกับLOCKคำนำหน้า


ใช่ฉันรู้วิธีตรวจสอบผลลัพธ์ cpuid ปัญหาคือสิ่งที่ต้องทำหากไม่รองรับ ฉันไม่อยากเสียเวลาทำงานกับการสอนที่ขาดหายไปถ้าฉันไม่เคยเห็นกรณีนี้ในทางปฏิบัติ
Christopher Barber

@Christopher Barber - CPUID ได้รับการสนับสนุนตั้งแต่ปลาย 486 โปรเซสเซอร์ซึ่งก็หมายความว่าโปรเซสเซอร์ x86 ที่มีความสามารถ 64- บิตทุกตัวจะรองรับ CPUID

2
@PhiS: ฉันค่อนข้างแน่ใจว่า Christopher กำลังพูดถึงการขาดการสนับสนุน cmpxchg16b จะทำอย่างไรถ้าสิ่งนั้นหายไป
Bahbar

3

การสนับสนุนใน CPU อาจไม่เพียงพอจริง ๆ เนื่องจากผู้ใช้ Core 2บางคนค้นพบในการเปิดตัว Windows 8.1โดยเฉพาะอย่างยิ่งผู้ที่มีเมนบอร์ด Intel DP35DP ฉันยังไม่แน่ใจว่าในเมนบอร์ดสามารถป้องกัน CMPXCHG16B ได้อย่างไร อาจเป็นไปได้ที่ไบออสตรวจจับบิตสามารถปิดการใช้งาน เพื่อสรุปสิ่งที่บล็อกของ Yuhong Bao กล่าวในที่นี้มีโปรเซสเซอร์ errata ในชิป Core 2 รุ่นแรก (E0 / R0 steppings ของ 45nm Core 2) ที่ทำให้คุณสมบัติของพวกเขาถูกรายงานผ่าน CPUID ผิด มันเป็นไปได้ที่จะหลีกเลี่ยงปัญหานี้ผ่านการอัพเดต BIOS / ไมโครโค้ดเท่าที่ฉันสามารถบอกได้


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