ALU หรือที่รู้จักในภาษาสเปนเป็นหน่วยลอจิกเป็นหน่วยภายใน a ซีพียู หรือ GPU ที่มีหน้าที่ในการคำนวณตัวเลขอย่างแท้จริงและดังนั้นจึงมีหน้าที่ในการคำนวณทางคณิตศาสตร์ทั้งหมดที่ดำเนินการหลายพันล้านครั้งต่อวินาทีในพีซีของเรา แต่มันทำงานอย่างไร มีประเภทใดบ้าง และความลับของหน่วย ALU คืออะไร อ่านต่อไปเพื่อหา.
ALU ตัวแรกที่เปิดตัวไม่ได้เป็นส่วนหนึ่งของ CPU แต่เป็นชิปซีรีส์ 7400 ที่มีอินเทอร์เฟซ TTL จาก Texas Instruments 74181 เป็น ALU ตัวแรกที่รวมอยู่ในชิปตัวเดียว มันเป็นเพียง 4 บิตเท่านั้นและถูกใช้ในมินิคอมพิวเตอร์หลายเครื่องในช่วงทศวรรษ 1960 ซึ่งถือเป็นการเปลี่ยนแปลงครั้งใหญ่ครั้งแรกในการคำนวณ
การสร้าง CPU ที่สมบูรณ์ครั้งแรกในช่วงทศวรรษที่ 70 และองค์ประกอบที่เกี่ยวข้องทั้งหมดเพื่อดำเนินการตามวงจรคำสั่งที่สมบูรณ์นั้น เห็นได้ชัดว่าต้องอาศัยการรวม ALU เพื่อคำนวณคำสั่งตรรกะและเลขคณิตภายในชิป
ประเภทของ ALU
เราสามารถแบ่ง ALU ออกเป็นสองส่วนย่อยที่แตกต่างกัน อันดับแรกคือตามประเภทของตัวเลขที่จะคำนวณ ดังนั้นหากดำเนินการด้วยจำนวนเต็มหรือจุดทศนิยม ซึ่งในกรณีหลังเรากำลังพูดถึงการดำเนินการกับทศนิยม การดำเนินการจุดทศนิยมเป็นไปตามกฎที่ระบุจำนวนบิตของตัวเลขที่สอดคล้องกับส่วนจำนวนเต็มและจำนวนส่วนที่เป็นเศษส่วน
มาตรฐานในทั้งสองกรณียังระบุด้วยว่าตัวเลขแรกเป็นเครื่องหมายหรือไม่ ตัวอย่างเช่น ตัวเลขที่เป็นจำนวนเต็ม 8 บิตสามารถแสดงตัวเลขตั้งแต่ 0 ถึง 255 หรือจาก -127 ถึง 127 ขึ้นอยู่กับรูปแบบที่ใช้
การจัดประเภทที่สองหมายถึงจำนวนข้อมูลและคำสั่งที่ ALU ดำเนินการพร้อมกัน รูปแบบที่ง่ายที่สุดคือสเกลาร์ ALU ที่การดำเนินการหรือคำสั่งดำเนินการโดยตัวถูกดำเนินการ นอกจากนี้เรายังมีหน่วย SIMD หรือเวกเตอร์ซึ่งดำเนินการคำสั่งเดียวกันกับตัวถูกดำเนินการต่างกันในเวลาเดียวกัน
ประเภทของการดำเนินการกับ 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
การลบหรือการลบสามารถหาได้จากสูตรต่อไปนี้:
A – B = A + ไม่ (B) +1
เคล็ดลับที่นี่ง่ายมาก โดยอาศัยความจริงที่ว่าเรากำลังทำงานกับจำนวนเต็มไบนารี ใช้ไม่ได้กับตัวเลขทศนิยม เราสามารถใช้กลไกเดียวกันกับที่ใช้ในการบวกเลขสองตัวเพื่อดำเนินการลบ สิ่งที่เราต้องทำคือกลับค่าของการดำเนินการที่สองผ่านชุดของเกท NOT และเพิ่ม 1 ให้กับผลลัพธ์สุดท้าย ต้องขอบคุณพวกเขาที่ทำให้เราสามารถใช้ฮาร์ดแวร์ตัวเดียวกันเพื่อทำการบวกเพื่อทำการลบได้
การคูณเลขฐานสองและการหารด้วยกำลังของ2
รูปแบบการคูณที่ง่ายที่สุดในระบบเลขฐานสองคือการคูณด้วยจำนวนทวีคูณของ 2 เป็นระบบเลขฐานสอง เราเพียงแต่ต้องใช้กลไกที่ข้อมูลป้อนเข้าถูกเลื่อนไปทางซ้ายหลายตำแหน่ง ถ้าเราคูณหรือไปทางซ้าย . ถูกต้องถ้าเราจะแบ่ง จำนวนตำแหน่ง? ขึ้นอยู่กับดัชนีกำลังของตัวคูณ 2 ดังนั้นหากเราคูณด้วย 8 ซึ่งเท่ากับ 2 ^ 3 เราจะต้องเลื่อนตำแหน่งหมายเลข 3 ไปทางซ้าย และหากหาร 3 ตำแหน่งไปทางขวา ด้วยเหตุนี้ ALU จึงรวมการดำเนินการเปลี่ยนบิตซึ่งเป็นพื้นฐานสำหรับการคูณหรือหารด้วยทวีคูณของ 2
แต่ถ้าเราพูดถึงการคูณตัวเลขประเภทอื่น เป็นการดีที่สุดที่จะย้อนกลับไปตอนที่เรายังเด็กอยู่
การคูณแบบไม่ยกกำลังของเลข 2 ตัว
เป็นเวลาหลายปีที่ 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 ทำงานอย่างไร อย่างน้อยก็ในแง่พื้นฐาน