ทำไมคอมพิวเตอร์ถึงไม่มีฮาร์ดแวร์พิเศษเช่นเครือข่ายการเรียงลำดับ


10

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


2
ซื้อบอร์ด PCI FPGA และใช้งานส่วนขยายที่คุณต้องการ
SK-logic

ฮาร์ดแวร์ไม่ใช่เวทมนต์ มีหลายสิ่งที่ไม่สามารถเร่งความเร็วได้มาก (หรือเลย) โดยฮาร์ดแวร์พิเศษและแม้ว่ามันจะทำได้ฮาร์ดแวร์ที่มีอยู่มักจะต้องมีการดัดแปลง (หรืออย่างน้อยก็คอมไพล์ใหม่) ดูyosefk.com/blog/its-done-in-hardware-so-its-cheap.html

ที่เกี่ยวข้อง: programmers.stackexchange.com/questions/194204
Blrfl

3
@WorldEngineer ฉันไม่เห็นวิธีการที่เข้ามาในภาพ ผู้ใช้โดยเฉลี่ยของคุณไม่ทราบว่า 80% ของสิ่งต่าง ๆ ในซีพียูสมัยใหม่มีไว้เพื่ออะไรพวกเขามีความสุขเพราะได้รับการบอกว่าทำให้โปรแกรมของพวกเขาเร็วขึ้น (และนี่คือเคอร์เนลของความจริง) หากการเรียงลำดับเป็นเรื่องธรรมดาเหมือนกับ OP สมมติว่าและสามารถปรับให้เหมาะสมโดยฮาร์ดแวร์เฉพาะพวกเขาจะวางไว้ถัดจากตัวพยากรณ์สาขา ("นั่นคืออะไรทำสวน?") ออกแถลงข่าวว่าพวกเขาสร้างแอปพลิเคชัน X และ Y 5% เร็วขึ้นและขายมัน

1
สิ่งนี้ทำให้ฉันนึกถึงแนวคิดการอนุรักษ์ซึ่งเป็นเป้าหมายของการประหยัดพลังงานมากกว่าประสิทธิภาพสูงสุด
Paul A. Clayton

คำตอบ:


19

ครั้งแรกของทั้งหมดคอมพิวเตอร์มาพร้อมกับฮาร์ดแวร์เฉพาะ คอมพิวเตอร์แล็ปท็อปและเดสก์ท็อปทุกเครื่องที่จำหน่ายมาไม่กี่ปีมานี้มีหน่วยประมวลผลร่วมพิเศษซึ่งเป็นหน่วยประมวลผลกราฟิก คอมพิวเตอร์ขนาดใหญ่มาก ( เช่น "ซูเปอร์คอมพิวเตอร์" ของไอบีเอ็ม System z ในครอบครัว) มีความหลากหลายของโปรเซสเซอร์ความเชี่ยวชาญในการจัดการการประมวลผลเชิงตัวเลข ( "การประมวลผลแบบเวกเตอร์") ฯลฯ

ประการที่สองการเรียงลำดับเป็นหนึ่งในด้านการวิจัยที่ดีที่สุดของการประมวลผลและกลายเป็นเรื่องที่ซับซ้อนเกินกว่าจะสร้างเป็นฮาร์ดแวร์ได้มากกว่ากรณีที่ง่ายที่สุด การเรียงลำดับนั้นเกี่ยวกับความเร็วและความถูกต้อง ความเร็วขึ้นอยู่กับการเลือกอัลกอริทึมชนิดและความแปรปรวนของข้อมูลและปริมาณของข้อมูล ความถูกต้องขึ้นอยู่กับประเภทและบริบทของข้อมูล มันค่อนข้างเชิงบวกที่จะเรียงลำดับอาร์เรย์จำนวนเต็มขนาดกลางที่พอดีกับขนาดคำดั้งเดิมของ CPU ( เช่น, 31 หรือ 63 บิตพร้อมเครื่องหมาย) การเรียงลำดับสตริงอักขระที่มีมากกว่าค่า ASCII นั้นซับซ้อนมาก - IBM เผยแพร่หนังสือมากกว่า 500 หน้าเมื่อ 20 ปีที่แล้วเพียงแค่พูดถึงปัญหาของชุดอักขระในบริบทของขอบเขตของประเทศและการใช้งานทั่วไป แล้วมีคำถามของข้อมูลที่ไม่ต่อเนื่องกัน - การเรียงลำดับรายการที่เชื่อมโยงเกี่ยวข้องกับการไล่ล่าพอยน์เตอร์ทั่วหน่วยความจำ


10

ปัญหาหลักคืออัลกอริทึมการเรียงลำดับ (1) ต้องการความยืดหยุ่นมากและ (2) จะเร่งความเร็วได้ยากโดยใช้ฮาร์ดแวร์อย่างไรก็ตาม

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

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

ในทางตรงกันข้ามแอปพลิเคชั่นสื่อ (เสียงและกราฟิกโดยเฉพาะกราฟิก 3D) ใช้ประโยชน์จากโครงสร้างที่ซ้ำซ้อนบางอย่างแน่นอนว่ามันมีความยืดหยุ่น แต่มันถูกสร้างขึ้นบนรากฐานที่มีขนาดใหญ่ ที่ได้รับอนุญาตให้เร่งความเร็วกราฟิกเพื่อเริ่มต้นง่ายๆกับสิ่งต่าง ๆ เช่น Blitting (การดำเนินการคัดลอกบล็อกที่กำหนดค่าได้ แต่ยังมีโครงสร้างมาก) และการวาดเส้น / รูปหลายเหลี่ยม นั่นหมายความว่าเมื่อการประมวลผลกราฟิกและเสียงมีความซับซ้อนมากขึ้นการดำเนินงานของเวกเตอร์กลายเป็นเป้าหมายที่ชัดเจนสำหรับการปรับให้เหมาะสม - MMX แรก (เวกเตอร์จำนวนเต็ม) จากนั้น SSE (เวกเตอร์ของลอย) มันหมายถึงว่ามีโครงสร้างที่กำหนดไว้ค่อนข้างชัดเจนว่ากลไกกราฟิก 3D ทำงานอย่างไรเมื่อระบบกราฟิก 3D แบบเก่าที่ใช้ฟังก์ชั่นคงที่ถูกย้ายไปยังฮาร์ดแวร์กราฟิก 3D

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

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

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

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


3

แต่พวกเขาทำ! พวกเขาเรียกว่าส่วนขยายชุดคำสั่ง (สิ่งที่ชอบ SSE และไม่ชอบ)

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

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


ฉันจะต้อง google สำหรับ SSE แต่ล่วงหน้าการเรียงลำดับอาจเป็นสากล มันใช้กับระดับฮาร์ดแวร์หรือไม่
MaiaVictor

เอ๊ะอย่างที่เรามีคุณจะแนะนำหนังสือไหม
MaiaVictor

ฉันแค่พูดถึงการปรับแต่งเฉพาะงานที่ใช้กับโปรเซสเซอร์สไตล์ CPU โดยทั่วไปเนื่องจากเครือข่ายการเรียงลำดับถูกใช้เป็นตัวอย่าง ฉันไม่รู้ว่า SSE หรือชุดคำสั่งอื่น ๆ มีการเรียงลำดับการปรับแต่งเฉพาะหรือไม่ ฉันทำเครือข่ายการเรียงลำดับของ Google และเนื่องจากมีการใช้งานทั่วไปที่ดีที่สุดฉันคิดว่าการใช้งานซอฟต์แวร์สามารถทำงานได้ดีเช่นกันหากการใช้งานถูกต้อง
Onno

ฉันต้องชี้ให้เห็นว่าส่วนขยายชุดคำสั่งส่วนใหญ่ทำงานในระดับที่ต่ำกว่าจากนั้นเครือข่ายการเรียงลำดับที่คุณใช้เป็นตัวอย่าง แต่มันเป็นไปไม่ได้ที่จะคิดการเพิ่มประสิทธิภาพการลงทะเบียนหลายตัวที่สามารถเรียงลำดับด้วยวิธีนี้ แต่คำถามสำหรับผู้ผลิตซีพียูจะเป็น: "มันจะจ่ายเงินให้มากพอที่จะพิสูจน์ให้เห็นถึงต้นทุนหรือไม่"
Onno
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.