กลับไปหน้าบทความ

อ่าน 3 นาที

อันตราย (สถาปัตยกรรมคอมพิวเตอร์)

ในขอบเขตของการออกแบบหน่วยประมวลผลกลาง (CPU) อันตรายคือปัญหาเกี่ยวกับไปป์ไลน์คำสั่งในสถาปัตยกรรมไมโคร ของ CPU...

อันตราย (สถาปัตยกรรมคอมพิวเตอร์)

ในขอบเขตของการออกแบบหน่วยประมวลผลกลาง (CPU) อันตรายคือปัญหาเกี่ยวกับไปป์ไลน์คำสั่งในสถาปัตยกรรมไมโคร ของ CPU เมื่อคำสั่งถัดไปไม่สามารถดำเนินการได้ในรอบสัญญาณนาฬิกาถัดไป[ 1 ]และอาจนำไปสู่ผลลัพธ์การคำนวณที่ไม่ถูกต้อง อันตรายทั่วไปสามประเภท ได้แก่ อันตรายด้านข้อมูล อันตรายด้านโครงสร้าง และอันตรายด้านการควบคุม (อันตรายด้านการแตกแขนง) [ 2 ]

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

พื้นหลัง

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

ประเภท

อันตรายจากโครงสร้าง

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

ตัวอย่าง: สถานการณ์ที่คำสั่งหลายคำสั่งพร้อมที่จะเข้าสู่ขั้นตอนการประมวลผล แต่มีหน่วยคำนวณและตรรกะ (ALU) เพียงหน่วยเดียว วิธีแก้ปัญหาข้อจำกัดด้านทรัพยากรนี้คือการเพิ่มทรัพยากรที่มีอยู่ โดยการมีพอร์ตหลายพอร์ตไปยังหน่วยความจำหลักและมี ALU หลายหน่วย

ควบคุมอันตราย (อันตรายจากกิ่งไม้ หรืออันตรายจากคำแนะนำ)

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

ท่อส่งน้ำมันกำลังเดือด

การหยุดชะงักของไปป์ไลน์ (Bubbling the pipeline)หรือที่เรียกว่าการหยุดไปป์ไลน์ (pipeline break ) หรือการหยุดชั่วคราวของไปป์ไลน์ (pipeline stall ) เป็นวิธีการป้องกันอันตรายจากข้อมูล โครงสร้าง และการแตกแขนง (branch hazards) ขณะที่ดึงคำสั่งต่างๆ ตรรกะควบคุมจะตรวจสอบว่าอาจเกิดอันตรายขึ้นหรือไม่ หากเป็นเช่นนั้น ตรรกะควบคุมจะแทรก คำ สั่งที่ไม่ก่อให้เกิดการดำเนินการใดๆ ( NOP ) เข้าไปในไปป์ไลน์ ดังนั้น ก่อนที่คำสั่งถัดไป (ซึ่งจะทำให้เกิดอันตราย) จะทำงาน คำสั่งก่อนหน้าจะมีเวลาเพียงพอที่จะเสร็จสิ้นและป้องกันอันตรายได้ หากจำนวนNOPเท่ากับจำนวนขั้นตอนในไปป์ไลน์ โปรเซสเซอร์จะถูกล้างคำสั่งทั้งหมดและสามารถดำเนินการต่อได้โดยปราศจากอันตราย การหยุดชะงักทุกรูปแบบจะทำให้เกิดความล่าช้าก่อนที่โปรเซสเซอร์จะสามารถกลับมาทำงานต่อได้

การล้างไปป์ไลน์เกิดขึ้นเมื่อคำสั่งกระโดดไปยังตำแหน่งหน่วยความจำใหม่ ทำให้ขั้นตอนก่อนหน้าทั้งหมดในไปป์ไลน์ไม่ถูกต้อง ขั้นตอนก่อนหน้าเหล่านี้จะถูกล้าง ทำให้ไปป์ไลน์สามารถดำเนินการต่อที่คำสั่งใหม่ที่ระบุโดยการกระโดดได้[ 3 ] [ 4 ]

อันตรายของข้อมูล

มีวิธีการแก้ปัญหาและอัลกอริทึมหลักหลายอย่างที่ใช้ในการจัดการกับภัยคุกคามทางข้อมูล:

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

ในกรณีที่การประมวลผลไม่เป็นไปตามลำดับอัลกอริทึมที่ใช้สามารถเป็นได้ดังนี้:

ภารกิจในการขจัดความสัมพันธ์ระหว่างข้อมูลสามารถมอบหมายให้คอมไพเลอร์ทำได้ โดยคอมไพเลอร์จะแทรก คำสั่ง NOP จำนวนที่เหมาะสม ระหว่างคำสั่งที่มีความสัมพันธ์กันเพื่อให้มั่นใจว่าการทำงานถูกต้อง หรือจัดเรียงลำดับคำสั่งใหม่หากเป็นไปได้

การส่งต่อตัวดำเนินการ

ตัวอย่าง

ในตัวอย่างต่อไปนี้ ค่าที่คำนวณได้จะแสดงเป็นตัวหนาส่วนตัวเลขในรีจิสเตอร์จะไม่เป็น ตัวหนา

ตัวอย่างเช่น การเขียนค่า 3 ลงในรีจิสเตอร์ 1 (ซึ่งมีค่า 6 อยู่แล้ว) จากนั้นบวก 7 ลงในรีจิสเตอร์ 1 และเก็บผลลัพธ์ไว้ในรีจิสเตอร์ 2 ดังนี้:

i0: R1 = 6 i1: R1 = 3 i2: R2 = R1 + 7 = 10

หลังจากดำเนินการเสร็จสิ้น ค่าในรีจิสเตอร์ 2 ควรเป็น10อย่างไรก็ตาม หาก i1 (เขียน3ลงในรีจิสเตอร์ 1) ไม่ได้ออกจากไปป์ไลน์อย่างสมบูรณ์ก่อนที่ i2 จะเริ่มทำงาน นั่นหมายความว่า R1 ไม่มีค่า3เมื่อ i2 ทำการบวก ในกรณีเช่นนี้ i2 จะบวก7เข้ากับค่าเดิมของรีจิสเตอร์ 1 ( 6 ) ดังนั้นรีจิสเตอร์ 2 จึงมีค่าเป็น13แทน กล่าวคือ:

i0: R1 = 6 i2: R2 = R1 + 7 = 13 i1: R1 = 3

ข้อผิดพลาดนี้เกิดขึ้นเนื่องจาก i2 อ่าน ค่า จากรีจิสเตอร์ 1 ก่อนที่ i1 จะบันทึก/จัดเก็บผลลัพธ์ของการเขียนค่าลงในรีจิสเตอร์ 1 ดังนั้นในขณะที่ i2 กำลังอ่านค่าจากรีจิสเตอร์ 1 ค่าในรีจิสเตอร์ 1 ยังคงเป็น6ไม่ใช่3

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

การส่งต่อ (Forwarding) ที่นำมาใช้ในตัวอย่างนี้หมายความว่าไม่มีการรอให้มีการยืนยัน/จัดเก็บผลลัพธ์ของ i1 ในรีจิสเตอร์ 1 (ในตัวอย่างนี้คือ3 ) ก่อนที่จะทำให้ผลลัพธ์นั้นพร้อมใช้งานสำหรับคำสั่งถัดไป (ในกรณีนี้คือ i2)ผลที่ได้คือ i2 จะใช้ค่าที่ถูกต้อง (ค่าล่าสุด) ของรีจิสเตอร์ 1: การยืนยัน/จัดเก็บเกิดขึ้นทันทีและไม่ได้ดำเนินการแบบไปป์ไลน์

เมื่อเปิดใช้งานการส่งต่อแล้ว ขั้นตอน การถอดรหัส/ประมวลผลคำสั่ง (ID/EX) ของไปป์ไลน์จะมีอินพุตสองตัว ได้แก่ ค่าที่อ่านได้จากรีจิสเตอร์ที่ระบุ (ในตัวอย่างนี้คือค่า6จากรีจิสเตอร์ 1) และค่าใหม่ของรีจิสเตอร์ 1 (ในตัวอย่างนี้คือค่า3 ) ซึ่งส่งมาจากขั้นตอนถัดไปคือการประมวลผลคำสั่ง/การเข้าถึงหน่วยความจำ (EX/MEM) มีการใช้ตรรกะควบคุมเพิ่มเติมเพื่อกำหนดว่าจะใช้อินพุตใด

ควบคุมอันตราย (อันตรายจากกิ่งไม้)

เพื่อหลีกเลี่ยงอันตรายจากการควบคุม สถาปัตยกรรมไมโครสามารถ:

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

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

เทคนิคอื่นๆ

ความหน่วงของหน่วยความจำเป็นอีกปัจจัยหนึ่งที่นักออกแบบต้องให้ความสนใจ เนื่องจากความล่าช้าอาจลดประสิทธิภาพลง หน่วยความจำประเภทต่างๆ มีเวลาในการเข้าถึงหน่วยความจำที่แตกต่างกัน ดังนั้น การเลือกประเภทของหน่วยความจำที่เหมาะสมจะช่วยให้นักออกแบบสามารถปรับปรุงประสิทธิภาพของเส้นทางข้อมูลแบบไปป์ไลน์ได้[ 5 ]

ดูเพิ่มเติม

  • "การ สร้างไปป์ไลน์อัตโนมัติจากข้อกำหนดเส้นทางข้อมูลธุรกรรม" (PDF) . สืบค้นเมื่อ23 กรกฎาคม 2557
  • ทัลเซน, ดีน (18 มกราคม 2548). "อันตรายจากท่อส่ง" (PDF )
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Hazard_(computer_architecture)&oldid=1341147485#Read_after_write_(RAW) "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ อันตราย (สถาปัตยกรรมคอมพิวเตอร์)

ในขอบเขตของการออกแบบหน่วยประมวลผลกลาง (CPU) อันตรายคือปัญหาเกี่ยวกับไปป์ไลน์คำสั่งในสถาปัตยกรรมไมโคร ของ CPU...

พื้นหลัง

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

อันตรายจากโครงสร้าง

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

ควบคุมอันตราย (อันตรายจากกิ่งไม้ หรืออันตรายจากคำแนะนำ)

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