กลับไปหน้าบทความ

อ่าน 5 นาที

การแสดงผลระดับกลางแบบพกพามาตรฐาน

Standard Portable Intermediate Representation ( SPIR ) เป็นภาษาตัวกลางสำหรับการประมวลผลแบบขนานและกราฟิกโดยKhronos Groupใช้ในสภาพแวดล้อมการทำงานหลายแบบ รวมถึงVulkan graphics...

การแสดงผลระดับกลางแบบพกพามาตรฐาน

สปิร-วี
นักพัฒนากลุ่มโครโนส
ปล่อย2015
เวอร์ชันเสถียร
SPIR-V 1.6 / 16 ธันวาคม 2564 ( 16 ธันวาคม 2021 )
ระบบปฏิบัติการข้ามแพลตฟอร์ม
แพลตฟอร์มข้ามแพลตฟอร์ม
พิมพ์ภาษาระดับกลาง
เว็บไซต์www .khronos .org /registry /SPIR-V

Standard Portable Intermediate Representation ( SPIR ) เป็นภาษาตัวกลางสำหรับการประมวลผลแบบขนานและกราฟิกโดยKhronos Groupใช้ในสภาพแวดล้อมการทำงานหลายแบบ รวมถึงVulkan graphics APIและOpenCL compute API เพื่อแสดงshaderหรือkernelนอกจากนี้ยังใช้เป็นภาษาแลกเปลี่ยนสำหรับการคอมไพล์ข้ามแพลตฟอร์ม[ 1 ] [ 2 ]

SPIR-Vเป็นเวอร์ชันใหม่ของ SPIR ซึ่งเปิดตัวในปี 2015 โดยKhronos Groupและได้เข้ามาแทนที่ SPIR รุ่นเดิมซึ่งเปิดตัวในปี 2012

เมื่อวันที่ 19 กันยายน 2024 ไมโครซอฟต์ได้ประกาศแผนการนำ SPIR-V มาใช้เป็น รูปแบบการแลกเปลี่ยน Direct3Dแทน DXIL โดยเริ่มรองรับตั้งแต่ Shader Model 7 เป็นต้นไป[ 3 ]

วัตถุประสงค์

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

ตัวอย่างเช่น SPIR-V อนุญาตให้Vulkan APIใช้ภาษาการแรเงา ใดก็ได้ รวมถึงGLSL และ HLSL [ 4 ] [ 5 ] SPIR -V สามารถถอดรหัสเป็นภาษาการแรเงาหลายภาษา ( GLSL , GLSL ES , MSL , HLSL ) โดยใช้ SPIRV-Cross เพื่อให้สามารถแปลงภาษาเหล่านี้ระหว่างกันได้[ 6 ]นอกจากนี้ยังมีเส้นทางไปยังและ/หรือจากWebGPU , OpenCL , SYCL , C++และRustด้วย

ในแพลตฟอร์มเป้าหมาย การนำ SPIR-V เข้ามาจะช่วยลดความจำเป็นในการสร้างคอมไพเลอร์ซอร์สโค้ดภาษาระดับสูงลงในไดรเวอร์อุปกรณ์ ซึ่งจะช่วยลดความซับซ้อนของไดรเวอร์[ 2 ]

เวอร์ชัน

SPIR เปิดตัวครั้งแรกในปี 2011 และ SPIR-V เปิดตัวในปี 2015

SPIR และ SPIR-V
สปิร 1.2 สปิร 2.0 SPIR-V 1.X
การโต้ตอบของ LLVMLLVM IRเวอร์ชัน 3.2 LLVM IRเวอร์ชัน 3.4
นิยามโดย Khronos 100%
การแปลงแบบไม่สูญเสียข้อมูลไป-กลับ
โครงสร้างการคำนวณเมตาเดตา/ค่าภายใน เมตาเดตา/ค่าภายใน พื้นเมือง
โครงสร้างกราฟิกเลขที่ เลขที่ พื้นเมือง
ภาษาที่รองรับและคุณสมบัติที่รองรับOpenCL C 1.2
OpenCL C 1.2
OpenCL C 2.0
OpenCL C 1.2 / 2.X
OpenCL C++
จีแอลเอสแอล
การนำเข้า OpenCLส่วนขยาย OpenCL 1.2 ส่วนขยาย OpenCL 2.0 OpenCL 2.1/2.2 Core
การนำเข้า API กราฟิกไม่มีข้อมูลไม่มีข้อมูล
วัลคาน 1.X
OpenGL 4.6 Core

เวอร์ชันที่ใช้ LLVM

SPIR ก่อนการเปิดตัว SPIR-V ในปี 2015 นั้นใช้พื้นฐานจากLLVM Intermediate Representationมีการประกาศข้อกำหนดชั่วคราวสำหรับ SPIR 1.0 ในปี 2012 [ 7 ]เมื่อวันที่ 22 กรกฎาคม 2013 มีการประกาศข้อกำหนดชั่วคราว SPIR 1.2 ในงานSIGGRAPH 2013 [ 8 ] ข้อกำหนด SPIR 1.2 ฉบับสุดท้ายได้รับการเผยแพร่ในงาน HiPEAC 2014 เมื่อวันที่ 21 มกราคม 2014 [ 9 ]เมื่อวันที่ 11 สิงหาคม 2014 มีการเผยแพร่ข้อกำหนดชั่วคราวสำหรับ SPIR 2.0 ในงานSIGGRAPH 2014 [ 10 ] SPIR -V ไม่ได้ใช้ LLVM [ 2 ]

สปิร-วี

SPIR-V 1.0 เป็นเวอร์ชันใหม่ของ SPIR ที่ประกาศในเดือนมีนาคม พ.ศ. 2558 [ 11 ]และวางจำหน่ายในวันที่ 16 พฤศจิกายน พ.ศ. 2558 [ 12 ]ปัจจุบันตระกูล SPIR ประกอบด้วยมาตรฐาน cross-API ที่แท้จริงซึ่งกำหนดโดย Khronos อย่างสมบูรณ์พร้อมการสนับสนุนแบบเนทีฟสำหรับคุณสมบัติของ shader และ kernel

โปรแกรมแยกต่างหากจาก Khronos Group ช่วยให้สามารถแปลงระหว่าง LLVM IR ได้[ 13 ]

การรองรับการนำเข้าข้อมูล SPIR-V นั้นถูกรวมอยู่ในข้อกำหนดหลักของ OpenCL 2.1, Vulkan APIและOpenGLเวอร์ชัน 4.6 แล้ว

SPIR-V เปิดตัวแล้ว
วันที่ เวอร์ชั่น หมายเหตุ
18 เมษายน 2559 1.1 เปิดตัวที่IWOCL 2016พร้อมกับ Provisional OpenCL 2.2 SPIR-V 1.1 เพิ่มการสนับสนุนสำหรับ OpenCL C++, โหมดการทำงานของฟังก์ชัน initializer/finalizer, ตัวกั้นที่มีชื่อ, การทำงานของกลุ่มย่อย, ท่อขอบเขตโปรแกรม และการจัดเก็บท่อ[ 14 ]
16 พฤษภาคม 2560 1.2 เปิดตัวที่IWOCL 2017พร้อมกับ OpenCL 2.2 SPIR-V 1.2 เพิ่มการสนับสนุนสำหรับการปรับแต่งพารามิเตอร์หลักใน OpenCL 2.2 ในขณะรันไทม์[ 15 ]
7 มีนาคม 2561 1.3 เผยแพร่พร้อมกับVulkan 1.1 SPIR-V 1.3 เพิ่มการสนับสนุนสำหรับการดำเนินการกลุ่มย่อยและเปิดใช้งานการเพิ่มประสิทธิภาพคอมไพเลอร์ที่ได้รับการปรับปรุง[ 16 ]
7 พฤษภาคม 2562 1.4 [ 1 ]
13 กันยายน 2020 1.5 [ 1 ]
16 ธันวาคม 2021 1.6 [ 1 ]

คุณสมบัติ

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

ความสามารถในการขยาย

SPIR-V สามารถขยายได้โดยการเขียนส่วนขยายเพื่อเพิ่มความหมาย หรือสงวนช่วงของค่าโทเค็นไว้สำหรับการใช้งานของฝ่ายต่างๆ ผู้ขายสามารถเพิ่มความหมายที่ต้องการลงใน SPIR-V ได้อย่างอิสระ[ 18 ]ชุดคำสั่งเพิ่มเติมที่ขยายแล้วสามารถจัดเตรียมได้ในข้อกำหนดแยกต่างหาก สามารถนำเข้าชุดคำสั่งหลายชุดได้โดยไม่มีปัญหา เนื่องจากคำสั่งที่ขยายแล้วจะใช้โดยการระบุ ID ของชุดและของคำสั่งภายในชุด[ 18 ]

เชเดอร์

โปรแกรมดีบักเกอร์ประกอบด้วยRenderDoc , SwiftShader และ Amber [ 19 ]

เชเดอร์กราฟิกใช้การควบคุมการไหลแบบมีโครงสร้างใน SPIR-V เพื่อระบุวิธีการซ้อนการควบคุมการไหล ซึ่งช่วยในการกำหนดการแยกตัวและการบรรจบกันของการควบคุมการไหลในสภาพแวดล้อมการประมวลผลแบบขนาน[ 20 ]การกำหนดเฉพาะทางช่วยลดจำนวนตัวแปรของเชเดอร์ที่ต้องแจกจ่าย[ 21 ]

การตรวจสอบความถูกต้อง

ข้อกำหนด SPIR-V ระบุถึงกฎที่ต้องปฏิบัติตามเพื่อให้โมดูล SPIR-V ถูกต้อง ซึ่งช่วยให้สามารถตรวจสอบความถูกต้องแบบออฟไลน์ได้ ไดรเวอร์ไม่จำเป็นต้องจัดการกับโมดูล SPIR-V ที่ไม่ถูกต้อง ในการทดสอบ การทดสอบความสอดคล้องจะตรวจสอบว่าไดรเวอร์ทำงานได้อย่างถูกต้องเมื่อใช้ SPIR-V ที่ถูกต้อง ในขณะที่ตัวตรวจสอบจะตรวจสอบว่าส่วนหน้าสร้าง SPIR-V ได้อย่างถูกต้อง[ 22 ]

การเชื่อมโยง

SPIR-V สามารถแสดงการเรียกใช้ฟังก์ชันในหน่วยการคอมไพล์ที่แตกต่างกันได้ เวอร์ชันมาตรฐานของ SPIR-V ใช้คุณสมบัตินี้สำหรับเคอร์เนลการคำนวณ OpenCL แต่ไม่ใช่สำหรับขั้นตอนเชเดอร์ ซึ่ง API กราฟิกต้องการให้เชื่อมโยงอย่างสมบูรณ์ในโมดูล SPIR-V เดียว[ 23 ]มีส่วนขยายที่พร้อมใช้งานเพื่อให้เครื่องมือสามารถใช้เชเดอร์และเคอร์เนลที่เชื่อมโยงบางส่วนได้ชั่วคราว[ 24 ]

ความสามารถ

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

SPIR-V สำหรับการคอมไพล์ข้ามแพลตฟอร์ม GLSL

SPIR-V ถูกใช้เพื่อช่วยจัดการกับภาษาระดับซอร์สโค้ดหลายเวอร์ชัน ตัวอย่างเช่น ภาษา OpenGL Shading Language (GLSL) หลายเวอร์ชันจำเป็นต้องมีการแจกจ่าย shaders หลายเวอร์ชัน เนื่องจากมีการใช้งานที่ผูกติดอยู่กับ GLSL เวอร์ชันเก่าที่เฉพาะเจาะจง เช่นWebGL 1.0และการใช้งาน OpenGL ของ Apple หนึ่งในกรณีการใช้งานที่โดดเด่นของ SPIR-V คือความสามารถในการใช้เป็นรูปแบบการแลกเปลี่ยนระหว่าง GLSL เวอร์ชันต่างๆ โดยใช้เครื่องมือที่ดูแลโดยKhronos Group สำหรับการ คอมไพล์ GLSL เป็น SPIR-V glslangValidator[ 26 ]การเพิ่มประสิทธิภาพ SPIR-V [ 22 ]และการคอมไพล์ข้ามแพลตฟอร์มเป็น SPIR-V สำหรับเป้าหมาย GLSL ที่แตกต่างกัน[ 27 ]spirv-optspirv-cross

อย่างไรก็ตาม ในฐานะรูปแบบ SPIR-V มีข้อจำกัดบางประการสำหรับการคอมไพล์ข้ามแพลตฟอร์ม รวมถึงข้อกำหนดที่ว่าโมดูล SPIR-V ทุกโมดูลต้องมีสัญลักษณ์จุดเริ่มต้นอย่างน้อยหนึ่งตัว ซึ่งทำให้รูปแบบนี้ไม่สามารถใช้สำหรับการคอมไพล์แยกกันได้ง่าย โดยที่เชเดอร์ที่ซับซ้อนสามารถประกอบขึ้นได้ด้วยชุดขั้นตอนการคอมไพล์บางส่วนตามด้วยขั้นตอนการเชื่อมโยง ซึ่งขัดแย้งกับเป้าหมายที่ระบุไว้ของเครื่องมือ SPIR-V บางอย่าง เช่นspirv-link[ 22 ] ซึ่งมีจุดมุ่งหมายเพื่อให้ฟังก์ชันการเชื่อมโยงแบบเต็มรูปแบบสำหรับโค้ดไบนารี SPIR-V

ดูเพิ่มเติม

  • หน้าเว็บ Khronos SPIR
  • ข้อมูลจำเพาะของ SPIR-V
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Standard_Portable_Intermediate_Representation&oldid=1304464686 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การแสดงผลระดับกลางแบบพกพามาตรฐาน

Standard Portable Intermediate Representation ( SPIR ) เป็นภาษาตัวกลางสำหรับการประมวลผลแบบขนานและกราฟิกโดยKhronos Groupใช้ในสภาพแวดล้อมการทำงานหลายแบบ รวมถึงVulkan graphics...

วัตถุประสงค์

จุดประสงค์ของ SPIR-V คือ การแสดงข้อมูลพื้นฐานที่จำเป็นสำหรับการประมวลผลและกราฟิกโดยตรง การแยกภาษาโปรแกรมระดับสูงออกจากส่วนติดต่อผู้ใช้สำหรับไดรเวอร์ประมวลผลและกราฟิก การเป็นรูปแบบการแจกจ่าย หรือแจกจ่ายไบนารีที่คอมไพล์เสร็จสมบูรณ์...

เวอร์ชัน

SPIR เปิดตัวครั้งแรกในปี 2011 และ SPIR-V เปิดตัวในปี 2015

เวอร์ชันที่ใช้ LLVM

SPIR ก่อนการเปิดตัว SPIR-V ในปี 2015 นั้นใช้พื้นฐานจาก LLVM Intermediate Representation มีการประกาศข้อกำหนดชั่วคราวสำหรับ SPIR 1.0 ในปี 2012 [ 7 ] เมื่อวันที่ 22 กรกฎาคม 2013 มีการประกาศข้อกำหนดชั่วคราว SPIR 1.2 ในงาน SIGGRAPH 2013 [ 8 ] ข้อกำหนด SPIR 1.