ซอฟต์แวร์สมัยใหม่ใช้คุณสมบัติของซีพียูที่แตกต่างกันหรือไม่


2

ตัวอย่างเช่นหนึ่งสามารถมีปฏิบัติการที่ใช้คุณสมบัติสำหรับโปรเซสเซอร์ Core 2 และจากนั้นเลือกใช้คุณสมบัติอื่น ๆ สำหรับโปรเซสเซอร์เก่า? หรือมันเป็นความต้องการในการรวบรวมปฏิบัติการที่แตกต่างกัน? และถ้าไม่เป็นเช่นนั้นจริงหรือ?


3
ในระยะสั้นใช่ คุณจะมีหลายเส้นทางรหัสขึ้นอยู่กับชุดคุณลักษณะที่มีอยู่ (เช่น MMX, SSE, ... ) นอกจากนี้คุณยังสามารถรวบรวมเวอร์ชันที่แตกต่างกันของ executable ซึ่งเป็นรุ่นที่ต้องการชุดคุณสมบัติและรุ่นที่ไม่ได้ใช้จากนั้นคุณสามารถลบการตรวจสอบคุณสมบัติออกจากพา ธ โค้ดภายใน
Der Hochstapler

คำตอบ:


4

เป็นไปได้ทั้งหมดขึ้นอยู่กับคุณสมบัติที่คุณอ้างอิงถึงวิธีการนั้นแตกต่างกันเล็กน้อย

ตัวอย่างเช่นสำหรับแอปพลิเคชันคณิตศาสตร์คุณสามารถตรวจสอบจำนวนโปรเซสเซอร์และ / หรือแกนประมวลผลจากนั้นให้แต่ละแกนจัดการส่วนต่าง ๆ ของการคำนวณ ส่วนที่ยากคือการทำให้แน่ใจว่าข้อมูลข้อมูลซิงโครนัสหรืออะซิงโครนัสขึ้นอยู่กับงานในมือ

และตามที่ระบุไว้ก่อนสิ่งต่าง ๆ เช่น MMX, SSE2 สามารถตรวจสอบได้และจากนั้นเรียกใช้ผ่านเส้นทางรหัสที่แตกต่างกันเช่น:

if (CPU.Supports SSE2) {then use SSE2 Libraries}
else if (CPU.Supports SSE) {Then use SSE Libraries}
else {use pre-SSE LIbraries}

นอกจากนี้สำหรับสิ่งต่าง ๆ เช่นการจัดวางองค์ประกอบ (x86 กับ x64) มีวิธีการเล็กน้อยที่สามารถจัดการได้ หากคุณใช้ JAVA หรือ C # ตัวอย่างเช่น JIT คอมไพเลอร์สามารถปรับโค้ดให้เหมาะสมสำหรับสถาปัตยกรรมทั้งสองเมื่อแอปพลิเคชันเปิดใช้งานมันอาจไม่เร็วเท่าแอปพลิเคชัน C ++ ที่เนทีฟและเหมาะสม แต่การแลกเปลี่ยนคือ C ++ คุณ เพื่อแยก x64 และ x86 ออกจากกัน


2

คุณสามารถเรียกใช้งานได้หนึ่งไฟล์ซึ่งรันไทม์ตรวจจับซีพียูที่ใช้แล้วเลือกวิธีที่ดีที่สุดในการใช้งาน Ofc แต่ละวิธี 'ที่ดีที่สุด' เหล่านี้จะถูกรวบรวมไว้ล่วงหน้า ดังนั้นคุณจึงใช้โปรแกรมที่เตรียมไว้เพื่อใช้โปรเซสเซอร์ / ชุดคำสั่งที่เลือกสรรอย่างเหมาะสมที่สุด

มีโปรแกรมไม่มากที่ดูเหมือนจะทำหรืออย่างน้อยไม่มากที่บอกผู้ใช้เกี่ยวกับมัน ยังคงมีอย่างน้อยสองสามอย่างเช่นไฟล์dnetc ที่เรียกใช้งานได้


หากคุณต้องการคุณสามารถเปรียบเทียบกับหนังสือหรือแผ่นพับโดยมีดัชนีระบุ:
หน้า 10-20:
หน้าอังกฤษ21-42: ดัตช์
หน้า 43-54: US อังกฤษ
หน้า 55-70: เดนมาร์ก
...

คุณจะต้องเขียนในภาษาที่เหมาะสม / ชุดคำสั่งสำหรับแต่ละเหล่านั้น


. net ไม่ได้ทำเช่นนี้ แต่แทนที่จะเป็นไฟล์เอ็กซเรย์คอมไพล์ล่วงหน้าหลายตัวให้ใช้รูปแบบกรรมสิทธิ์เพื่อแค็ปซูลซอร์สโค้ดในและคอมไพล์มันทันที
MarcusJ

มันสามารถทำสิ่งนี้เพื่อบางสิ่งเท่านั้น หากคุณนำเข้า SSE2 ตัวอย่างเช่น. NET ไม่สามารถรู้วิธีการใช้ SSE ได้ตลอดเวลาอาจมีคลาส / วิธีการใหม่ในไลบรารีที่ใหม่กว่า และในทางกลับกันเวอร์ชันใหม่อาจตัดเมธอดที่เลิกใช้แล้วจาก SSE ดั้งเดิม
Austin T French

Mplayer มีคุณสมบัติตรวจจับ CPU และบอกผู้ใช้เกี่ยวกับมัน
ЯрославРахматуллин

0

เคอร์เนล Linux ใช้เทคนิคที่น่ากลัวเช่นการแพ็ตช์เคอร์เนลที่ทำงานอยู่เพื่อเลือกอัลกอริทึมที่ดีที่สุดสำหรับฟังก์ชั่นที่ใช้งานมาก


เมื่อคุณคอมไพล์เคอร์เนล Linux บน X86 คุณยังมีตัวเลือกในการเลือก CPU ปลายทาง (เช่น 386, P6, ... ) วิธีนี้เป็นส่วนหนึ่งของเคอร์เนลที่ได้รับการปรับให้เหมาะสมก่อนที่จะรัน
Hennes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.