คำตอบยอดนิยมอื่น ๆ ทั้งหมดที่นำเสนอในที่นี้พูดถึงความแตกต่างที่แท้จริงระหว่าง FPGA และ CPU พวกเขาชี้ให้เห็นถึงลักษณะที่ขนานกันของ FPGA เทียบกับลักษณะตามลำดับของ CPU หรือให้ตัวอย่างว่าทำไมอัลกอริธึมบางอย่างอาจทำงานได้ดีบน FPGA ทั้งหมดนี้เป็นสิ่งที่ดีและจริง แต่ฉันขอแนะนำว่ามีความแตกต่างพื้นฐานระหว่าง CPU และ FPGA
ตัวหารร่วมระหว่าง FPGA และ CPU คืออะไร มันเป็นสิ่งที่พวกเขาทั้งสองสร้างขึ้นบนซิลิคอน และในบางกรณีแท้จริงกระบวนการซิลิกอนเดียวกัน
ความแตกต่างพื้นฐานคือสิ่งที่เราซ้อนทับอยู่บนซิลิคอน เป็นไปไม่ได้ที่มนุษย์คนหนึ่งจะเข้าใจรายละเอียดทั้งหมดของการออกแบบ CPU ที่ทันสมัยจากซิลิกอนไปจนถึง IC ที่บรรจุไว้ ในฐานะที่เป็นส่วนหนึ่งของกระบวนการทางวิศวกรรมเราแบ่งปัญหาที่ซับซ้อนออกเป็นปัญหาเล็ก ๆ ที่จัดการได้ซึ่งมนุษย์สามารถล้อมรอบ
พิจารณาสิ่งที่จะเปลี่ยนซิลิคอนให้เป็นซีพียูที่ใช้งานได้ ต่อไปนี้เป็นมุมมองที่ค่อนข้างง่ายของเลเยอร์ของสิ่งที่เป็นนามธรรมที่จำเป็นสำหรับเป้าหมายนั้น:
ก่อนอื่นเรามีวิศวกรที่รู้วิธีสร้างทรานซิสเตอร์จากซิลิคอน พวกเขารู้วิธีการออกแบบทรานซิสเตอร์ขนาดเล็กที่จิบพลังงานและเปลี่ยนในอัตรา 10 หรือ 100 กิกะเฮิร์ตซ์และพวกเขารู้วิธีการออกแบบทรานซิสเตอร์ขนาดเล็กที่สามารถขับสัญญาณที่มีพลังมากพอที่จะส่งพวกมันออกจากแพ็คเกจ IC และทั่ว PCB ไปยังชิปอื่น
จากนั้นเรามีนักออกแบบลอจิกดิจิตอลที่รู้วิธีนำทรานซิสเตอร์เหล่านั้นมารวมกันที่ห้องสมุดที่มีเซลล์ตรรกะต่าง ๆ นับร้อย ประตูลอจิก flops พลิก muxes และส่วนเสริมเพื่อชื่อไม่กี่ ทั้งหมดในการกำหนดค่าที่หลากหลาย
ต่อไปเรามีกลุ่มวิศวกรที่รู้วิธีนำบล็อกดิจิตอล (และบางครั้งอนาล็อก) เข้าด้วยกันเพื่อสร้างบล็อกการทำงานระดับสูงขึ้นเช่นเดียวกับตัวรับส่งสัญญาณความเร็วสูงตัวควบคุมหน่วยความจำตัวทำนายสาขา ALUs เป็นต้น
จากนั้นเรามีนักออกแบบ CPU เพื่อออกแบบ CPU ระดับสูงโดยดึงหน่วยการทำงานเหล่านั้นเข้าด้วยกันเป็นระบบที่สมบูรณ์
และไม่หยุดเพียงแค่นั้น ณ จุดนี้เรามีซีพียูที่ใช้งานได้ซึ่งเรียกใช้แอสเซมบลีโค้ด แต่นั่นไม่ใช่ภาษาที่โปรแกรมเมอร์ส่วนใหญ่เขียนถึงทุกวันนี้
- เราอาจมีคอมไพเลอร์ C ที่คอมไพล์ดังกล่าวเป็นรหัสแอสเซมบลี (อาจผ่านการเป็นตัวแทนระดับกลาง)
- เราสามารถเพิ่มสิ่งที่เป็นนามธรรมด้านบนของ C เพื่อให้ได้ภาษาเชิงวัตถุ
- เราอาจจะเขียนเครื่องเสมือนบน C หรือ C ++ เพื่อให้เราสามารถตีความสิ่งต่าง ๆ เช่นรหัส Java byte
และเลเยอร์นามธรรมสามารถไปจากที่นั่น จุดสำคัญที่นี่คือเลเยอร์สิ่งที่เป็นนามธรรมนั้นรวมกันเพื่อให้ได้ระบบที่ใช้ CPU ซึ่งมีขนาดใหญ่และมีราคาเพียงเล็กน้อยในการออกแบบซิลิคอนแบบกำหนดเอง
อย่างไรก็ตามจุดสำคัญที่ต้องทำที่นี่คือสิ่งที่เป็นนามธรรมแต่ละยังมีค่าใช้จ่ายเอง ผู้ออกแบบทรานซิสเตอร์ไม่ได้สร้างทรานซิสเตอร์ที่สมบูรณ์แบบสำหรับทุกกรณีการใช้งาน เขาสร้างห้องสมุดที่มีเหตุผลและบางครั้งก็มีการใช้ทรานซิสเตอร์ที่ใช้พลังงานมากกว่าเล็กน้อยหรือใช้ซิลิกอนมากกว่าที่จำเป็นสำหรับงานในมือ และในทำนองเดียวกันผู้ออกแบบลอจิกไม่ได้สร้างทุกเซลล์ลอจิกที่เป็นไปได้ พวกเขาอาจสร้างประตู NAND 4 อินพุตและประตู NAND 8 อินพุต แต่จะเกิดอะไรขึ้นเมื่อวิศวกรคนอื่นต้องการ NAND 6 อินพุต เขาใช้เกต NAND 8 อินพุตและเชื่อมต่ออินพุต 2 ตัวที่ไม่ได้ใช้ซึ่งส่งผลให้สูญเสียทรัพยากรซิลิกอนและพลังงานรอบเอว และมันก็ขึ้นอยู่กับสายของนามธรรม แต่ละเลเยอร์ทำให้เราสามารถจัดการกับความซับซ้อนได้
ตอนนี้เปรียบเทียบ abstractions เหล่านั้นกับสิ่งที่จำเป็นสำหรับ FPGA โดยพื้นฐานแล้ว abstractions FPGA หยุดที่ # 2 ในรายการด้านบน FPGA ช่วยให้นักพัฒนาสามารถทำงานในเลเยอร์ตรรกะแบบดิจิทัล มันค่อนข้างซับซ้อนกว่านั้นเพราะ CPU นั้น 'เข้ารหัสยาก' ที่เลเยอร์นี้และ FPGA จะต้องถูกกำหนดค่า ณ รันไทม์ (ซึ่ง BTW คือสาเหตุที่ CPU มักจะทำงานที่ความถี่สูงกว่ามาก) แต่ความจริงที่สำคัญที่สำคัญคืออยู่ไกล abstractions สำหรับ FPGAs น้อยกว่าสำหรับ CPU
ดังนั้นทำไม FPGA ได้เร็วกว่า CPU? ในสาระสำคัญเป็นเพราะ FPGA ใช้ abstractions น้อยกว่า CPU ซึ่งหมายความว่านักออกแบบทำงานใกล้ชิดกับซิลิคอน เขาไม่จ่ายค่าใช้จ่ายของเลเยอร์สิ่งที่เป็นนามธรรมมากมายซึ่งจำเป็นสำหรับซีพียู เขาใช้รหัสในระดับต่ำกว่าและต้องทำงานให้หนักขึ้นเพื่อให้ได้ฟังก์ชั่นการใช้งานที่กำหนด แต่รางวัลที่เขาได้รับมีประสิทธิภาพสูงกว่า
แต่แน่นอนว่ายังมีข้อเสียสำหรับ abstractions ที่น้อยลงเช่นกัน ซีพียูที่เป็นนามธรรมทั้งหมดนั้นมีเหตุผลที่ดี พวกเขาให้กระบวนทัศน์การเข้ารหัสที่ง่ายขึ้นมากซึ่งหมายความว่าผู้คนจำนวนมากสามารถพัฒนาได้ง่ายขึ้นสำหรับพวกเขา ในทางกลับกันหมายความว่ามีการออกแบบ CPU จำนวนมากที่มีอยู่และทำให้เราได้รับประโยชน์จากราคา / ขนาด / เวลาในการทำตลาดจากซีพียูจำนวนมาก
ดังนั้นคุณมีมัน FPGAs มี abstractions น้อยลงดังนั้นจึงสามารถเขียนโปรแกรมได้เร็วขึ้นและประหยัดพลังงาน แต่ยากที่จะตั้งโปรแกรม ซีพียูมีการออกแบบที่เป็นนามธรรมมากมายเพื่อให้ง่ายต่อการพัฒนาปรับขนาดได้และราคาถูก แต่พวกเขาก็ยอมแพ้ทั้งความเร็วและอำนาจในการแลกเปลี่ยนเพื่อผลประโยชน์