ALU บน CPU และ GPU: ประเภท คุณลักษณะ และวิธีการทำงาน

ALU บน CPU และ GPU

ALU หรือที่รู้จักในภาษาสเปนเป็นหน่วยลอจิกเป็นหน่วยภายใน a ซีพียู หรือ GPU ที่มีหน้าที่ในการคำนวณตัวเลขอย่างแท้จริงและดังนั้นจึงมีหน้าที่ในการคำนวณทางคณิตศาสตร์ทั้งหมดที่ดำเนินการหลายพันล้านครั้งต่อวินาทีในพีซีของเรา แต่มันทำงานอย่างไร มีประเภทใดบ้าง และความลับของหน่วย ALU คืออะไร อ่านต่อไปเพื่อหา.

ALU ตัวแรกที่เปิดตัวไม่ได้เป็นส่วนหนึ่งของ CPU แต่เป็นชิปซีรีส์ 7400 ที่มีอินเทอร์เฟซ TTL จาก Texas Instruments 74181 เป็น ALU ตัวแรกที่รวมอยู่ในชิปตัวเดียว มันเป็นเพียง 4 บิตเท่านั้นและถูกใช้ในมินิคอมพิวเตอร์หลายเครื่องในช่วงทศวรรษ 1960 ซึ่งถือเป็นการเปลี่ยนแปลงครั้งใหญ่ครั้งแรกในการคำนวณ

การสร้าง CPU ที่สมบูรณ์ครั้งแรกในช่วงทศวรรษที่ 70 และองค์ประกอบที่เกี่ยวข้องทั้งหมดเพื่อดำเนินการตามวงจรคำสั่งที่สมบูรณ์นั้น เห็นได้ชัดว่าต้องอาศัยการรวม ALU เพื่อคำนวณคำสั่งตรรกะและเลขคณิตภายในชิป

ประเภทของ ALU

SIMD เอสคาลาร์

เราสามารถแบ่ง ALU ออกเป็นสองส่วนย่อยที่แตกต่างกัน อันดับแรกคือตามประเภทของตัวเลขที่จะคำนวณ ดังนั้นหากดำเนินการด้วยจำนวนเต็มหรือจุดทศนิยม ซึ่งในกรณีหลังเรากำลังพูดถึงการดำเนินการกับทศนิยม การดำเนินการจุดทศนิยมเป็นไปตามกฎที่ระบุจำนวนบิตของตัวเลขที่สอดคล้องกับส่วนจำนวนเต็มและจำนวนส่วนที่เป็นเศษส่วน

มาตรฐานในทั้งสองกรณียังระบุด้วยว่าตัวเลขแรกเป็นเครื่องหมายหรือไม่ ตัวอย่างเช่น ตัวเลขที่เป็นจำนวนเต็ม 8 บิตสามารถแสดงตัวเลขตั้งแต่ 0 ถึง 255 หรือจาก -127 ถึง 127 ขึ้นอยู่กับรูปแบบที่ใช้

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

ประเภทของการดำเนินการกับ ALU

ALU สุมา บินนาเรีย

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

ALU ที่อนุญาตให้โปรเซสเซอร์ประเภทใดก็ได้ ไม่ว่าจะเป็น CPU หรือ GPU ดำเนินการทางคณิตศาสตร์ด้วยเลขฐานสอง ดังนั้นจึงไม่มีอะไรมากไปกว่าเครื่องคำนวณเลขฐานสอง ซึ่งเป็น ALU ชนิดที่ง่ายที่สุดที่อนุญาตให้เพิ่มตัวเลขสองตัวแต่ละตัวได้ 1 บิต ซึ่งเป็นการดำเนินการที่จะเป็นดังนี้:

การดำเนินการ ผล การชักลาก
0 + 0 0 0
0 + 1 1 0
1 + 0 1 0
1 + 1 1 1

หากคุณดูสิ่งเหล่านี้ นี่คือข้อกำหนดของลอจิกเกตของประเภท OR แต่เราพบปัญหาที่ต้องดำเนินการเมื่อเพิ่ม 1 + 1 เนื่องจากผลลัพธ์ของการเพิ่มไบนารี 1 + 1 คือ 10 ไม่ใช่ 1 ดังนั้น เราต้องคำนึงว่า 1 ในการพกพาที่เราพกพา ดังนั้น OR แบบธรรมดาจึงไม่เพียงพอ โดยเฉพาะอย่างยิ่งถ้าเราต้องการทำงานด้วยความแม่นยำที่สูงขึ้นมากในบิต ดังนั้นจึงมีจำนวน ALU ที่ซับซ้อนมากขึ้นในจำนวนบิต

การลบไบนารีใน ALU

ALU เรสตาไบนาเรีย

การลบหรือการลบสามารถหาได้จากสูตรต่อไปนี้:

A – B = A + ไม่ (B) +1

เคล็ดลับที่นี่ง่ายมาก โดยอาศัยความจริงที่ว่าเรากำลังทำงานกับจำนวนเต็มไบนารี ใช้ไม่ได้กับตัวเลขทศนิยม เราสามารถใช้กลไกเดียวกันกับที่ใช้ในการบวกเลขสองตัวเพื่อดำเนินการลบ สิ่งที่เราต้องทำคือกลับค่าของการดำเนินการที่สองผ่านชุดของเกท NOT และเพิ่ม 1 ให้กับผลลัพธ์สุดท้าย ต้องขอบคุณพวกเขาที่ทำให้เราสามารถใช้ฮาร์ดแวร์ตัวเดียวกันเพื่อทำการบวกเพื่อทำการลบได้

การคูณเลขฐานสองและการหารด้วยกำลังของ2

การแบ่งแยก ALU multiplicación desplazamiento

รูปแบบการคูณที่ง่ายที่สุดในระบบเลขฐานสองคือการคูณด้วยจำนวนทวีคูณของ 2 เป็นระบบเลขฐานสอง เราเพียงแต่ต้องใช้กลไกที่ข้อมูลป้อนเข้าถูกเลื่อนไปทางซ้ายหลายตำแหน่ง ถ้าเราคูณหรือไปทางซ้าย . ถูกต้องถ้าเราจะแบ่ง จำนวนตำแหน่ง? ขึ้นอยู่กับดัชนีกำลังของตัวคูณ 2 ดังนั้นหากเราคูณด้วย 8 ซึ่งเท่ากับ 2 ^ 3 เราจะต้องเลื่อนตำแหน่งหมายเลข 3 ไปทางซ้าย และหากหาร 3 ตำแหน่งไปทางขวา ด้วยเหตุนี้ ALU จึงรวมการดำเนินการเปลี่ยนบิตซึ่งเป็นพื้นฐานสำหรับการคูณหรือหารด้วยทวีคูณของ 2

แต่ถ้าเราพูดถึงการคูณตัวเลขประเภทอื่น เป็นการดีที่สุดที่จะย้อนกลับไปตอนที่เรายังเด็กอยู่

การคูณแบบไม่ยกกำลังของเลข 2 ตัว

การคูณไบนารี ALU

เป็นเวลาหลายปีที่ ALU เป็นแบบธรรมดาและสามารถเพิ่มได้ เนื่องจากไม่มี ALU ที่มีไว้สำหรับการคูณ พวกเขาแสดงได้อย่างไร? ดำเนินการผลรวมที่ต่อกันหลาย ๆ อันซึ่งทำให้พวกมันหลายรอบ ตามความอยากรู้ทางประวัติศาสตร์ หนึ่งในซีพียูในประเทศแรกๆ ที่มีหน่วยการคูณคือ อินเทล 8086.

สมมติว่าเราต้องการคูณ 25 x 25 เมื่อเรายังเด็ก สิ่งที่เราทำมีดังนี้:

  • ขั้นแรก เราคูณ 25 x 5 และเขียนผลลัพธ์ ซึ่งก็คือ 125
  • อย่างที่สอง เราคูณ 25 x 2 ซึ่งให้ 50 และเราจดผลลัพธ์ แต่เลื่อนตำแหน่งไปทางซ้ายหนึ่งตำแหน่ง
  • เราบวกตัวเลขทั้งสอง เนื่องจากเราเลื่อนตัวเลขที่สองไปทางซ้าย ผลรวมจึงไม่ใช่ 175 แต่ 625 ซึ่งเป็นผลมาจากการคูณ 25 x 25 เป็นทศนิยม

ในไบนารี่ กระบวนการจะเหมือนกัน แต่ตัวเลข 25 ในกรณีนี้คือ 11001 ดังนั้นจึงเป็นตัวเลข 5 บิต ดังนั้นเลขฐานสองเราจะคูณ 11001 x 11001 และสำหรับสิ่งนี้เราจะต้องใช้ AND เกท

  • ขั้นแรก เราคูณ 11001 x 1 = 11001
  • ประการที่สอง เราคูณ 11001 x 0 = 0000 เราเขียนผลลัพธ์ทางซ้ายหนึ่งตำแหน่ง
  • ประการที่สาม เราคูณ 11001 x 0 = 0000 เราเขียนผลลัพธ์สองตำแหน่งทางซ้าย
  • ประการที่สี่ เราคูณ 11001 x 1 = 11001 เราเขียนผลลัพธ์ทางซ้ายสามตำแหน่ง
  • ประการที่ห้า เราคูณ 11001 x 1 = 11001 เราเขียนผลลัพธ์ทางซ้ายสี่ตำแหน่ง
  • โดยคำนึงถึงตำแหน่งของการดำเนินการแต่ละครั้งเราเพิ่มผลลัพธ์ซึ่งไม่ควรให้เป็นผล 01001110001

การคำนวณทางคณิตศาสตร์ที่ซับซ้อนมากขึ้น

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

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

ตำแหน่งที่ใช้ใน GPU ซึ่งเราเห็นประเภทของหน่วยที่เรียกว่าหน่วยฟังก์ชันพิเศษที่รับผิดชอบการดำเนินการสิ่งที่เราเรียกว่าการดำเนินการเหนือธรรมชาติเช่นอัตราส่วนตรีโกณมิติที่ใช้ในเรขาคณิต

ALU นำข้อมูลไปใช้งานที่ไหน?

ประวัติ

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

ในระบบที่ซับซ้อนกว่าบางระบบ มีการใช้รีจิสเตอร์มากกว่าหนึ่งรายการสำหรับการดำเนินการทางคณิตศาสตร์ และในบางกรณีอาจใช้รีจิสเตอร์พิเศษสำหรับคำสั่งบางอย่าง ซึ่งมีการจัดทำเป็นเอกสารเป็นส่วนใหญ่ แต่ในกรณีอื่นๆ เนื่องจากใช้ในคำแนะนำบางอย่างเท่านั้น จึงมักไม่มีการจัดทำเป็นเอกสาร

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

ด้วยเหตุนี้ จึงมีคำอธิบายว่า ALU ทำงานอย่างไร อย่างน้อยก็ในแง่พื้นฐาน