24
Oct
2022

ภาษาโปรแกรมสำหรับตัวเร่งฮาร์ดแวร์

กฎของมัวร์ต้องการการกอด วันของการบรรจุทรานซิสเตอร์บนชิปคอมพิวเตอร์ซิลิกอนตัวเล็ก ๆ นั้นถูกนับและแพชูชีพ – เครื่องเร่งฮาร์ดแวร์ – มีราคา

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

ตอนนี้ นักวิทยาศาสตร์จาก Computer Science and Artificial Intelligence Laboratory (CSAIL) ของ MIT ได้สร้างภาษาการเขียนโปรแกรมใหม่ที่เรียกว่า “Exo”สำหรับการเขียนโค้ดประสิทธิภาพสูงบนตัวเร่งฮาร์ดแวร์ Exo ช่วยวิศวกรระดับต่ำในการแปลงโปรแกรมง่ายๆ ที่ระบุสิ่งที่พวกเขาต้องการคำนวณ เป็นโปรแกรมที่ซับซ้อนมากซึ่งทำสิ่งเดียวกับข้อกำหนด แต่เร็วกว่ามากโดยใช้ชิปตัวเร่งพิเศษเหล่านี้ ตัวอย่างเช่น วิศวกรสามารถใช้ Exo เพื่อเปลี่ยนการคูณเมทริกซ์อย่างง่ายให้กลายเป็นโปรแกรมที่ซับซ้อนมากขึ้น ซึ่งรันลำดับความสำคัญได้เร็วกว่าโดยใช้ตัวเร่งพิเศษเหล่านี้

ต่างจากภาษาโปรแกรมและคอมไพเลอร์อื่น ๆ Exo สร้างขึ้นจากแนวคิดที่เรียกว่า “Exocompilation” Yuka Ikarashi นักศึกษาระดับปริญญาเอกด้านวิศวกรรมไฟฟ้าและวิทยาการคอมพิวเตอร์ และบริษัทในเครือ CSAIL ซึ่งเป็นผู้เขียนหลักในบทความใหม่เกี่ยวกับ Exo กล่าวว่า “ตามเนื้อผ้าการวิจัยจำนวนมากมุ่งเน้นไปที่การทำให้กระบวนการเพิ่มประสิทธิภาพสำหรับฮาร์ดแวร์เฉพาะเป็นไปโดยอัตโนมัติ “สิ่งนี้ยอดเยี่ยมสำหรับโปรแกรมเมอร์ส่วนใหญ่ แต่สำหรับวิศวกรด้านประสิทธิภาพ คอมไพเลอร์จะเข้ามาขวางทางได้บ่อยเท่าที่จะช่วยได้ เนื่องจากการปรับแต่งคอมไพเลอร์เป็นไปโดยอัตโนมัติ จึงไม่มีวิธีที่ดีในการแก้ไขเมื่อทำงานผิดพลาดและให้ประสิทธิภาพ 45 เปอร์เซ็นต์แทนที่จะเป็น 90 เปอร์เซ็นต์”

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

“ภาษา Exo เป็นคอมไพเลอร์ที่มีการกำหนดพารามิเตอร์เหนือฮาร์ดแวร์ที่เป็นเป้าหมาย คอมไพเลอร์ตัวเดียวกันสามารถปรับให้เข้ากับตัวเร่งความเร็วฮาร์ดแวร์ต่างๆ ได้” Adrian Sampson ผู้ช่วยศาสตราจารย์ในภาควิชาวิทยาการคอมพิวเตอร์แห่งมหาวิทยาลัย Cornell กล่าว “ แทนที่จะเขียนโค้ด C++ ที่ยุ่งเหยิงเพื่อคอมไพล์สำหรับตัวเร่งความเร็วใหม่ Exo ให้วิธีการที่เป็นนามธรรมและสม่ำเสมอในการเขียน ‘รูปร่าง’ ของฮาร์ดแวร์ที่คุณต้องการกำหนดเป้าหมาย จากนั้น คุณสามารถใช้คอมไพเลอร์ Exo ที่มีอยู่ซ้ำเพื่อปรับให้เข้ากับคำอธิบายใหม่นั้น แทนที่จะเขียนสิ่งใหม่ทั้งหมดตั้งแต่ต้น ผลกระทบที่อาจเกิดขึ้นจากการทำงานเช่นนี้มีมากมาย: หากนักประดิษฐ์ฮาร์ดแวร์สามารถหยุดกังวลเกี่ยวกับค่าใช้จ่ายในการพัฒนาคอมไพเลอร์ใหม่สำหรับแนวคิดฮาร์ดแวร์ใหม่ ๆ ทุกคนก็สามารถทดลองใช้และจัดส่งแนวคิดเพิ่มเติมได้

ชิปคอมพิวเตอร์ที่มีประสิทธิภาพสูงสุดในปัจจุบัน เช่น TPU ของ Google, Neural Engine ของ Apple หรือ Tensor Cores ของ NVIDIA การประมวลผลทางวิทยาศาสตร์ที่ทรงพลังและแอปพลิเคชันการเรียนรู้ของเครื่องโดยการเร่งบางสิ่งที่เรียกว่า “โปรแกรมย่อยที่สำคัญ” เคอร์เนล หรือการประมวลผลประสิทธิภาพสูง (HPC) ) รูทีนย่อย

ศัพท์แสงที่ไม่เป็นระเบียบ โปรแกรมมีความจำเป็น ตัวอย่างเช่น สิ่งที่เรียกว่า Basic Linear Algebra Subroutines (BLAS) คือ “ไลบรารี” หรือชุดของรูทีนย่อยดังกล่าว ซึ่งมีไว้สำหรับการคำนวณพีชคณิตเชิงเส้นโดยเฉพาะ และเปิดใช้งานงานการเรียนรู้ของเครื่องหลายอย่าง เช่น โครงข่ายประสาท การพยากรณ์อากาศ การคำนวณแบบคลาวด์ และการค้นพบยา . (BLAS มีความสำคัญมากจนได้รับรางวัล Jack Dongarra the Turing Award ในปี 2021) อย่างไรก็ตาม ชิปใหม่เหล่านี้ ซึ่งต้องใช้วิศวกรหลายร้อยคนในการออกแบบ ดีพอๆ กับไลบรารีซอฟต์แวร์ HPC เหล่านี้เท่านั้น

แม้ว่าในปัจจุบันนี้ การเพิ่มประสิทธิภาพประเภทนี้ยังคงทำด้วยมือเพื่อให้แน่ใจว่ามีการใช้การคำนวณรอบสุดท้ายบนชิปเหล่านี้ รูทีนย่อยของ HPC มักจะทำงานที่ประสิทธิภาพตามทฤษฎีสูงสุด 90 เปอร์เซ็นต์ และวิศวกรฮาร์ดแวร์พยายามอย่างเต็มที่เพื่อเพิ่มความเร็วอีก 5 หรือ 10 เปอร์เซ็นต์ให้กับพีคเชิงทฤษฎีเหล่านี้ ดังนั้น หากซอฟต์แวร์ไม่ได้รับการปรับให้เหมาะสมที่สุด งานหนักทั้งหมดก็จะสูญเปล่า ซึ่งเป็นสิ่งที่ Exo ช่วยหลีกเลี่ยงได้อย่างแท้จริง

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

“ใน Exo เราเปลี่ยนคำจำกัดความของแบ็กเอนด์เฉพาะฮาร์ดแวร์จาก exocompiler สิ่งนี้ทำให้เราแยกความแตกต่างระหว่าง Exo ซึ่งเป็นโครงการโอเพนซอร์ซและรหัสเฉพาะฮาร์ดแวร์ได้ดีขึ้น ซึ่งมักเป็นกรรมสิทธิ์ เราได้แสดงให้เห็นว่าเราสามารถใช้ Exo เพื่อเขียนโค้ดที่มีประสิทธิภาพเทียบเท่ากับ Math Kernel Library ที่ปรับแต่งด้วยมือของ Intel ได้อย่างรวดเร็ว เรากำลังทำงานร่วมกับวิศวกรและนักวิจัยในหลายบริษัทอย่างแข็งขัน” Gilbert Bernstein, postdoc จาก University of California at Berkeley กล่าว

อนาคตของ Exo เกี่ยวข้องกับการสำรวจ meta-language ของการจัดกำหนดการที่มีประสิทธิภาพยิ่งขึ้น และการขยายความหมายของมันเพื่อรองรับโมเดลการเขียนโปรแกรมแบบขนานเพื่อนำไปใช้กับตัวเร่งความเร็วที่มากขึ้น ซึ่งรวมถึง GPU

Ikarashi และ Bernstein เขียนบทความนี้ร่วมกับ Alex Reinking และ Hasan Genc ทั้งนักศึกษาปริญญาเอกที่ UC Berkeley และผู้ช่วยศาสตราจารย์ Jonathan Ragan-Kelley ของ MIT

งานนี้ได้รับการสนับสนุนบางส่วนโดยศูนย์ Applications Driving Architectures ซึ่งเป็นหนึ่งในหกศูนย์ของ JUMP ซึ่งเป็นโครงการ Semiconductor Research Corporation ซึ่งได้รับการสนับสนุนจากสำนักงานโครงการวิจัยขั้นสูงของกระทรวงกลาโหม Ikarashi ได้รับการสนับสนุนจาก Funai Overseas Scholarship, Masason Foundation และ Great Educators Fellowship ทีมงานนำเสนอผลงานในการประชุม ACM SIGPLAN Conference on Programming Language Design and Implementation 2022

หน้าแรก

Share

You may also like...