CPU สามารถส่งคำสั่งมากกว่าหนึ่งคำสั่งต่อรอบได้อย่างไร


41

คำแนะนำของวิกิพีเดียต่อวินาทีหน้าบอกว่า i7 3630QM ให้ความถี่ประมาณ 110,000 MIPS ~ 110,000 MIPS; มันจะเป็น (110 / 3.2 คำสั่ง) / 4 คอร์ = ~ 8.6 คำแนะนำต่อรอบต่อคอร์! แกนเดี่ยวสามารถส่งคำสั่งมากกว่าหนึ่งคำสั่งต่อรอบได้อย่างไร

เพื่อความเข้าใจของฉันไปป์ไลน์ควรจะสามารถส่งผลลัพธ์เดียวต่อนาฬิกา

นี่คือความคิดของฉัน:

  • ความถี่ภายในนั้นสูงกว่า 3.2 GHz
  • บางส่วนของซีพียูไม่ตรงกันในแบบที่มนุษย์ถ่อมใจอย่างที่ฉันไม่เข้าใจ
  • มีหลายท่อพร้อมกันต่อหนึ่งคอร์
  • ไปป์ไลน์สามารถส่งมอบมากกว่าผลลัพธ์ต่อนาฬิกาคำสั่งสามารถข้ามขั้นตอนไปป์ไลน์และมี prefetcher หลายตัวเพื่อให้ทัน
  • ฉันขาดอะไรไป

1
ส่งมอบให้กับ 110,000 Dhrystone MIPS ดังนั้น DMIPS ไม่ใช่ MIPS เป็นสิ่งที่ฉันเห็นโดยตรง - นี่อาจทำให้เกิดความแตกต่างได้ ดูen.wikipedia.org/wiki/Dhrystone

คำตอบ:


44

ก่อนอื่นตามความเห็นของ Keelanและคำตอบของ Turbo Jชี้ให้เห็นว่าการวัดอยู่ที่ 113,093 Dhrystone MIPS ไม่ใช่MIPS ดั้งเดิม

สถาปัตยกรรมขนาดเล็กของ Ivy Bridge ของ i7 3630QM สามารถส่งสัญญาณได้ 4 ครั้งต่อวงจรเท่านั้นแม้ว่าจะสามารถประมวลผลได้ 6 ไมโครวินาทีต่อรอบ (จำนวนฟิวชั่น µops ในร่องรอยของรหัสเท่ากับจำนวนคำสั่งโดยคร่าว ๆคำสั่งที่ซับซ้อนบางคำสั่งจะถูกถอดรหัสเป็นหลาย µops ที่ไม่ได้ถูกหลอมรวม ตามด้วยการกระโดดตามเงื่อนไข)

การคาดเดาสองอย่างของคุณเกี่ยวกับวิธีการดำเนินการหลายคำสั่งในรอบเดียวนั้นค่อนข้างถูกต้องและถูกใช้ในโปรเซสเซอร์จริง การคาดเดาครั้งแรกของคุณที่ใช้นาฬิกาภายในที่เร็วกว่านั้นถูกใช้ใน ALUs "fireball" ดั้งเดิมของ Pentium 4 ALUs เหล่านี้ถูกโอเวอร์คล็อกที่ความถี่ของส่วนที่เหลือของแกนที่สองซึ่งค่อนข้างสูงแล้ว

(สิ่งนี้ทำได้โดยใช้ ALU ที่เซซึ่งครึ่งล่างของการเพิ่มถูกทำในหนึ่งรอบการอนุญาตให้การดำเนินการแบบพึ่งพานั้นใช้ครึ่งล่างของผลลัพธ์ในรอบถัดไปสำหรับการดำเนินการเช่น add, xor หรือ shift shift ด้านซ้าย ซึ่งต้องการเพียงครึ่งล่างของตัวถูกดำเนินการในการสร้างครึ่งล่างของผลลัพธ์อย่างเต็มรูปแบบเช่นที่รู้จักกันในชื่อความกว้างของการวางท่อช่วยให้เกิดความหน่วงของผลลัพธ์รอบเดียวเช่นเดียวกับปริมาณงานรอบเดียว)

HyperSPARC ใช้เทคนิคที่เกี่ยวข้องกันบ้างซึ่งเรียกว่า ALUs HyperSPARC ป้อนผลลัพธ์จาก ALU สองตัวเป็น ALU ที่สาม สิ่งนี้อนุญาตให้มีการดำเนินการสองอย่างอิสระและการดำเนินการขึ้นอยู่กับสามในรอบเดียว

การเก็งกำไรของคุณที่ "มีหลายท่อพร้อมกันต่อแกน" เป็นเทคนิคอื่น ๆ ที่มีการใช้ ประเภทของการออกแบบนี้เรียกว่า superscalar และเป็นวิธีที่พบมากที่สุดในการเพิ่มจำนวนของการดำเนินการในรอบเดียว

นอกจากนี้ยังมีอัตราต่อรองและจุดสิ้นสุดอื่น ๆ ของการดำเนินการคำสั่งที่อาจคุ้มค่ากับการสังเกต การดำเนินการบางอย่างสามารถทำได้อย่างมีประสิทธิภาพมากขึ้นนอกหน่วยปฏิบัติการปกติ เทคนิคการกำจัดการเคลื่อนย้ายใช้ประโยชน์จากการใช้การเปลี่ยนชื่อรีจิสเตอร์ในตัวประมวลผลที่ไม่เป็นไปตามใบสั่งเพื่อดำเนินการย้ายระหว่างการเปลี่ยนชื่อรีจิสเตอร์ การย้ายเพียงคัดลอกหมายเลขลงทะเบียนทางกายภาพจากตำแหน่งหนึ่งในตารางการเปลี่ยนชื่อ (เรียกว่าตารางนามแฝงลงทะเบียน) ไปยังตำแหน่งอื่น สิ่งนี้ไม่เพียงเพิ่มความกว้างของการเรียกใช้งานได้อย่างมีประสิทธิภาพเท่านั้น แต่ยังช่วยลดการพึ่งพา เทคนิคนี้ใช้ในช่วงต้นกับ x87 แบบกองซ้อน แต่ตอนนี้มีการใช้อย่างกว้างขวางในโปรเซสเซอร์ x86 ที่มีประสิทธิภาพสูงของ Intel (การใช้คำแนะนำแบบทำลายสองคำสั่งใน x86 ทำให้การกำจัดแบบเคลื่อนที่มีประโยชน์มากกว่าที่เป็นใน RISC ทั่วไป)

เทคนิคที่คล้ายกับการย้ายการกำจัดคือการจัดการคำแนะนำการลงทะเบียนเป็นศูนย์ในระหว่างการเปลี่ยนชื่อ ด้วยการระบุชื่อรีจิสเตอร์ที่ให้ค่าเป็นศูนย์คำสั่งการล้างข้อมูลรีจิสเตอร์ (เช่น xor หรือลบด้วยตัวถูกดำเนินการทั้งสองที่เป็นทะเบียนเดียวกัน) สามารถแทรกชื่อนั้นลงในตารางการเปลี่ยนชื่อ (RAT)

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

นอกจากนี้ยังเป็นไปได้ที่จะรวมคำสั่งไว้ในการดำเนินการเดียวที่ซับซ้อนยิ่งขึ้น ในขณะที่กระบวนการย้อนกลับของการแยกคำสั่งออกเป็นหลาย ๆ การดำเนินงานที่ง่ายกว่านั้นเป็นเทคนิคเก่า แต่การรวมคำสั่ง (ซึ่งเงื่อนไขของฟิวชั่นมาโคร - ออปชันของอินเทล) สามารถอนุญาตให้การนำไปใช้เพื่อสนับสนุนการดำเนินการที่ซับซ้อนยิ่งกว่า

ในทางทฤษฎีแล้วมีการเสนอเทคนิคอื่น ๆ ค่าคงที่ขนาดเล็กอื่นที่ไม่ใช่ศูนย์สามารถรองรับได้ใน RAT และการดำเนินการอย่างง่ายบางอย่างที่ใช้หรือสร้างค่าเล็ก ๆ น้อย ๆ เช่นนั้นสามารถจัดการได้ แต่เนิ่นๆ ("การลงทะเบียนทางกายภาพ", Mikko H. Lipasti และคณะ, 2004, แนะนำให้ใช้ RAT เป็นวิธีการลดจำนวนการลงทะเบียน แต่ความคิดสามารถขยายเพื่อรองรับการโหลดขนาดเล็กทันทีและการดำเนินการอย่างง่ายบนตัวเลขขนาดเล็ก)

สำหรับแคชการติดตาม (ซึ่งเก็บลำดับของคำสั่งภายใต้สมมติฐานเฉพาะของโฟลว์ควบคุม) อาจมีโอกาสที่จะรวมการดำเนินการที่คั่นด้วยสาขาและลบการดำเนินการที่ให้ผลลัพธ์ที่ไม่ได้ใช้ในการติดตาม การแคชการออปติไมซ์ในแคชการติดตามยังสามารถส่งเสริมการปรับให้เหมาะสมเช่นการรวมคำสั่งซึ่งอาจไม่คุ้มค่าหากต้องทำทุกครั้งที่สตรีมคำสั่งถูกเรียก

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


! น่ากลัว ขอบคุณสำหรับข้อมูลที่มีค่า คุณช่วยแนะนำหนังสือที่ฉันสามารถอ่านเทคนิคสถาปัตยกรรมเหล่านี้ได้ไหม?
Workless

@ ไม่ทำงานเมื่อคุณได้รับเหนือกว่าพื้นฐานของ pipelining และ out-of-order superscalar execution (ซึ่งจะกล่าวถึงในตำราสถาปัตยกรรมคอมพิวเตอร์ส่วนใหญ่) แหล่งข้อมูลที่ดีที่สุดน่าจะเป็นคำอธิบายของ microarchitectures ของตัวประมวลผลเฉพาะ (เช่นบทความบน Haswell linked ในคำตอบ gnasher729 ของ ) และเอกสารทางวิชาการ (Isca และ MICRO [ประชุม] โดยทั่วไปมีเอกสารที่ดี HPCA, อนุสัญญา ASPLOS และบางทีบางคนอื่น ๆ ยังมีชื่อเสียงที่ดี) Andy Glew (อาจมีชื่อเสียงมากที่สุดสำหรับงานของเขาใน Pentium Pro) ...
Paul A. Clayton

1
... ได้ทำงานในวิกิพีเดีย CompArch ซึ่งจะนำเสนอแนวคิดที่ทันสมัยมากขึ้น แต่ความคืบหน้าได้ช้าและมันก็เห็นได้ชัดว่าถูกแฮ็กในขณะที่ที่ผ่านมาและตอนนี้เพียง แต่ช่วยให้ข้อผิดพลาด ( semipublic.comp-arch.net/wiki ) เขาตั้งใจจะคืนสถานะวิกิ (ข้อความต้นฉบับได้รับการเก็บรักษาไว้) โดยใช้ซอฟต์แวร์วิกิที่แตกต่างกัน (เขามีปัญหาบางอย่างกับซอฟต์แวร์ที่เขาใช้และกำลังใช้โอกาสนี้ในการปรับปรุง) แต่ "จะไม่นาน"
Paul A. Clayton

ตัวอย่างที่ดีของความสำเร็จของสถาปัตยกรรม superscalar คือ HyperThreading ของ Intel ด้วยการปรับให้เหมาะสมทั้งหมดวิศวกรของ Intel พบว่าประมาณ 30% ของ ALU นั้นไม่ได้ใช้งานเป็นส่วนใหญ่เนื่องจากหน่วยความจำไม่สามารถไหลได้เร็วพอหรือ ไม่สามารถเติมเต็มไปป์ไลน์ได้อย่างมีประสิทธิภาพเพียงพอ HyperThreading ช่วยให้คุณได้งานมากมายฟรีในสถานการณ์ที่ดีที่สุด มันน้อยกว่าการมีคอร์ใหม่แยกต่างหาก แต่ก็ยังถูกกว่ามาก (และสามารถรวมกับมัลติคอร์ด้วย)
Luaan

@ PaulA.Clayton - การจับภาพสองหน้าใน Wayback 20 ธันวาคม 2013และ14 กุมภาพันธ์ 2014 ฉันไม่ทราบว่าสิ่งเหล่านั้นจับประเด็นปัญหาของหน้านั้นได้หรือไม่ น่าเสียดายที่เมื่อฉันพยายามเยี่ยมชมหน้าเหล่านั้นบน Wayback ฉันได้รับ " Bummerเครื่องจักรที่ให้บริการไฟล์นี้หยุดทำงานเรากำลังดำเนินการ " ข้อความดังนั้นฉันไม่แน่ใจว่าจะเห็นอะไรในหน้าเหล่านั้น .
Kevin Fegan

10

เวทมนต์ดำเกิดขึ้นภายในโปรเซสเซอร์ที่ทันสมัย ​​แต่ความคิดของคุณอยู่ในแนวที่ถูกต้อง

กุญแจสำคัญในการทำความเข้าใจประสิทธิภาพของโปรเซสเซอร์ที่ทันสมัยคือการตระหนักว่าพวกเขาเป็นซุปเปอร์คาร์ จาก Wikipedia (เหมืองที่เน้น):

สถาปัตยกรรมซีพียู superscalar ใช้รูปแบบของการขนานที่เรียกว่าขนานระดับการเรียนการสอนภายในโปรเซสเซอร์เดียว ดังนั้นจึงช่วยให้ปริมาณงานของ CPU เร็วขึ้นกว่าที่เป็นไปได้ในอัตรานาฬิกาที่กำหนด

โปรเซสเซอร์ที่ทันสมัยเหล่านี้มีหน่วยดำเนินการหลายหน่วยต่อคอร์ตามที่คุณคาดเดา การทำไฮเปอร์เธรดนั้นน่าสนใจที่จะพิจารณาบางส่วนของไปป์ไลน์มีการทำซ้ำ แต่บางอันไม่ได้

การดำเนินการที่ไม่เป็นไปตามคำสั่งนั้นน่าสนใจเช่นกัน แต่ไม่ตอบคำถามของคุณโดยตรง มันลดจำนวนรอบของ CPU "ที่สูญเปล่า"

ประสิทธิภาพยังได้รับผลกระทบจากสิ่งอื่น ๆ มากมายที่อาจทำให้แผงภายในโปรเซสเซอร์รวมถึง (แต่ไม่ จำกัด เฉพาะ):

  • ผลลัพธ์ของคำแนะนำก่อนหน้านี้ไม่พร้อมใช้งาน
  • Cache คิดถึง
  • การแยกรหัสซึ่งจะทำให้คำสั่งที่ดึงมาแล้วใช้ไม่ได้ (อ่านเกี่ยวกับการคาดคะเนสาขาที่นี่และที่นี่ )

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

สำหรับคำอธิบายอ่านมนุษย์ของท่อ CPU ที่ทันสมัยดูการเดินทางผ่านท่อซีพียู สำหรับคำอธิบายที่ค่อนข้างเทคนิคเพิ่มเติมโปรดดูที่ Agner หมอกMicroarchitectureกระดาษ


ขอบคุณสำหรับคำอธิบายและลิงค์ที่น่าสนใจมาก ในฐานะโน้ตมือถือดูน่าสนใจมากฉันรอคอยที่จะศึกษาเพิ่มเติมเกี่ยวกับสถาปัตยกรรมซีพียู ^ _ ^ "" x86 ใช้ "superpipeline" ตามที่อธิบายไว้ข้างต้น ตระกูล Cell ใช้แนวทาง "เสริมฤทธิ์" ที่เกี่ยวข้องกับ mini-cpus เก้า มันเป็นความจริงว่าแต่ละมินิซีพียูดังนี้ท่อส่วนใหญ่ในการสั่งซื้อมินิซีพียูมีหลายท่อ superscalar ขนานมากกว่าท่อเดียว """.
Workless

3

คุณคิดอย่างไรกับสิ่งที่เกิดขึ้น: วิศวกรทุกคนของ Intel, AMD และ IBM อ่านว่าท่อส่งผลเพียงหนึ่งรอบเท่านั้นและพวกเขากล่าวว่า "โอเคใช่แล้วไม่สามารถทำให้โปรเซสเซอร์เหล่านี้เร็วขึ้นได้" หรือพวกเขาอ่านข้อความนี้และพูดว่า: "ไม่สามารถส่งผลลัพธ์มากกว่าหนึ่งรายการต่อรอบได้หรือไม่เราจะเห็นเกี่ยวกับสิ่งนั้น!"

สำหรับการแนะนำที่ดีเกี่ยวกับสถาปัตยกรรม Haswell เช่นคุณสามารถไปที่ลิงค์นี้http://www.realworldtech.com/haswell-cpu/หรือคุณสามารถไปที่เว็บไซต์ของ Intel และคุณจะพบเอกสารเล็กน้อย

แต่ละแกนหลักของหน่วยประมวลผล Haswell มีหน่วยดำเนินการจำนวนมากซึ่งสามารถดำเนินการเป็นอิสระจากกันดังนั้นจึงสามารถดำเนินการหลายอย่างพร้อมกันได้ ถัดไปตัวประมวลผล Haswell มีหน่วยดำเนินการหลายอย่างที่จัดการการดำเนินงานเวกเตอร์ขนาด 256 บิต การดำเนินการแบบเวกเตอร์สามารถทำได้เช่นการดำเนินการจุดสี่จุดที่มีความแม่นยำสองเท่าหรือการดำเนินการจุดลอยตัวความแม่นยำเดียวแปดจุดในการดำเนินการแบบเวกเตอร์เดียว และสุดท้ายโปรเซสเซอร์ Haswell รองรับ "fused multiply-add" ซึ่งหมายความว่าการคำนวณ a ครั้ง b บวก c เป็นเพียงการดำเนินการเพียงครั้งเดียว

สูงสุดทางทฤษฎีเนื่องจาก Haswell มีหน่วยที่สามารถหลอมรวมเพิ่มได้สองหน่วยคือการดำเนินการคูณเพิ่มเข้าด้วยกันสองครั้งต่อรอบแต่ละการดำเนินการทำการคูณด้วยความแม่นยำเดียวแปดบวกเพิ่มหรือ 32 จุดลอยตัวที่มีความแม่นยำเดี่ยว

โปรเซสเซอร์ 3630 ไม่ได้อยู่ในรายการราคาล่าสุดของ Intel แต่มีหลายรุ่นเช่น 3740QM ที่มีสี่คอร์ ดังนั้นแทนที่จะเป็น 32 คุณจะได้รับการดำเนินการจุดลอยตัว 128 จุดต่อรอบสัญญาณนาฬิกา นี่คือค่าสูงสุดทางทฤษฎี การบรรลุเป้าหมายครึ่งหนึ่งในชีวิตจริงนั้นเป็นเรื่องท้าทาย แต่ก็เป็นไปไม่ได้สำหรับงานที่เหมาะสม มีหน่วยประมวลผลอื่น ๆ ที่มีมากถึง 15 คอร์ (สำหรับราคาที่ไม่ต้องเสียเงินกับแฟนเกมที่คลั่งไคล้มากที่สุด)

ดังนั้นคุณมีการรวมกันของตัวคูณหลายตัว:

  1. หลายคอร์ต่อโปรเซสเซอร์
  2. (ไฮเปอร์เธรดที่ไม่ได้กล่าวถึงก่อนหน้าช่วยให้คุณเข้าใกล้ขีด จำกัด ทางทฤษฎีมากขึ้น)
  3. การดำเนินการเพิ่มทวีคูณแบบผสมการดำเนินการทางคณิตศาสตร์สองการดำเนินการนับเป็นหนึ่งเดียวเท่านั้น
  4. เวกเตอร์ 256 บิตที่ดำเนินการ 8 การดำเนินการนับเป็นหนึ่งเดียวเท่านั้น
  5. หน่วยประมวลผลเวคเตอร์สองหน่วยที่สามารถจัดการการเพิ่มแบบผสม - คูณได้

การดำเนินการ 8.6 ต่อรอบนั้นไม่ยากเกินกว่าจะทำได้ แม้แต่การดำเนินการ 8.6 ต่อรอบต่อคอร์ก็ไม่ยากเกินไป


ฉันสงสัยว่ามันจะใช้งานได้จริงหรือเป็นประโยชน์ในการออกแบบ CPU ที่มีคอร์บางตัวที่รัน x86 และบางตัวที่รันชุดคำสั่งซึ่งได้รับการปรับให้เหมาะกับพฤติกรรมของซุปเปอร์คาร์ ฉันรู้ว่า Intel และ AMD ทำสิ่งที่น่าอัศจรรย์ในการจัดการกับข้อ จำกัด ในชุดคำสั่ง x86 แต่ในบางกรณีฉันคิดว่าการรู้บางสิ่งที่ชุดคำสั่งปัจจุบันไม่สามารถแสดงออกได้จะเป็นประโยชน์ ตัวอย่างเช่นADDคำแนะนำในเวอร์ชันที่แตกต่างกันโดยพิจารณาว่าควรปล่อยให้โอเวอร์โฟลว์ไม่ได้รับผลกระทบหรือควรตั้งค่าเมื่อเกิดโอเวอร์โฟลว์ (และตั้งค่าไว้หากไม่ได้ตั้งค่าไว้)
supercat

1
ฉันพบว่าตัวเองเสียใจที่ในวันนี้และอายุหลายภาษาเริ่มต้นที่จะไม่ตรวจสอบล้น ฉันรู้ว่า Java ค่อนข้างติดอยู่กับความต้องการทางความหมาย แต่ในภาษาอย่าง C # ซึ่งรวมถึงตัวดำเนินการทางคณิตศาสตร์ทั้งกับดักและไม่ติดกับดักเหตุผลเดียวที่ฉันไม่เห็นว่ามีการล้นของแทร็บ ในปัจจุบันการตรวจสอบล้นสามารถกำหนดบทลงโทษความเร็วที่สำคัญ แต่ถ้าภาษาเครื่องได้รับการออกแบบรอบความคิดที่ว่าการวางกับดักล้นไม่จำเป็นต้องแม่นยำตราบใดที่รหัสสามารถมั่นใจได้ว่าไม่มีการล้นเกินก่อนการทำงาน ...
supercat

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

... ที่ดูเหมือนว่าจะช่วยลดการพึ่งพาการดำเนินการ
supercat

2

มาตรฐาน Drystone มาจากปี 1984 และเครื่องจักร 1 MIPS VAX ที่สอดคล้องกันนั้นมีประสิทธิภาพไม่มากนักในแง่ที่ทันสมัย แม้แต่ Cortex M3 ก็ให้ 1,25 DMPIS / MHz

โปรเซสเซอร์ Intel Core achitectureสามารถทำงานได้หลายคำสั่งพร้อมกันในแกนเดียวเพราะมีหน่วยประมวลผลหลายหน่วยอยู่ในปัจจุบัน


1

ฉันได้เรียนรู้อย่างมากมายจาก Jon "Hannibal" ของ Ars Technica ทำให้บทความที่ยอดเยี่ยมและกว้างขวางเกี่ยวกับสถาปัตยกรรมไมโครโปรเซสเซอร์ บทความมีวันที่เล็กน้อย (ดูเหมือนจะมาจากประมาณปี 2004) แต่ก็ยังมีความเกี่ยวข้องมาก

ลิงก์ไปยังส่วนถัดไปของบทความบางส่วนเสียหาย แต่ดูเหมือนว่าคุณสามารถแก้ไขได้ด้วยตนเองโดยการเปรียบเทียบ URL ของส่วนแรกและ URL ที่เสียหายของหน้าถัดไปอย่างระมัดระวัง (เช่นการเพิ่มm-Somwehere ใน URL)

(ใช่นี่เป็นคำตอบสำหรับลิงค์เดียวที่น่าสรรเสริญขอโทษบทความดีเกินไปที่จะไม่พูดถึง)

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