تمثيل وسيط محمول قياسي
| المطور(ون) | مجموعة كرونوس |
|---|---|
| الإصدار الأولي | 2015 |
| إصدار مستقر | SPIR-V 1.6 / 16 ديسمبر 2021 |
| نظام التشغيل | متعدد المنصات |
| منصة | متعدد المنصات |
| يكتب | لغة متوسطة |
| موقع إلكتروني | www.khronos.org/registry/SPIR-V |
SPIR هي لغة وسيطة للحوسبة المتوازية والرسومات من إنتاج مجموعة Khronos . تُستخدم في بيئات تنفيذ متعددة، بما في ذلك واجهة برمجة تطبيقات الرسومات Vulkan وواجهة برمجة تطبيقات الحوسبة OpenCL ، لتمثيل برنامج تظليل أو نواة . تُستخدم أيضًا كلغة تبادل للتجميع المتقاطع. [ 1] [2]
SPIR-V هو إصدار جديد من SPIR تم تقديمه في عام 2015 بواسطة مجموعة Khronos ، ومنذ ذلك الحين حل محل SPIR الأصلي، والذي تم تقديمه في عام 2012.
في 19 سبتمبر 2024، أعلنت شركة Microsoft عن خططها لاعتماد SPIR-V كتنسيق Direct3D Interchange بدلاً من DXIL، وبدء الدعم من Shader Model 7 وما بعده. [3]
غاية
تتمثل أغراض SPIR-V في تمثيل العناصر الأساسية المطلوبة للحوسبة والرسومات بشكل أصلي؛ وفصل اللغة عالية المستوى عن واجهة برامج تشغيل الحوسبة والرسومات؛ لتكون نموذج التوزيع، أو توزيع الثنائيات المترجمة بالكامل؛ لتكون مواصفات مستقلة تمامًا؛ ودعم واجهات برمجة تطبيقات متعددة. كما يتم استخدامها كهدف وسيط لأدوات التجميع المتقاطع.
على سبيل المثال، يسمح SPIR-V لواجهة برمجة تطبيقات Vulkan باستخدام أي لغة تظليل ، بما في ذلك 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.
| سبير 1.2 | سبير 2.0 | سبير-في 1.X | |
|---|---|---|---|
| تفاعل LLVM | LLVM IR الإصدار 3.2 | LLVM IR الإصدار 3.4 |
|
| حساب التراكيب | البيانات الوصفية/الجوهرية | البيانات الوصفية/الجوهرية | محلي |
| إنشاءات الرسوم البيانية | لا | لا | محلي |
| اللغة المدعومة والميزات المدعومة | OpenCL C 1.2 |
|
|
| استيعاب OpenCL | امتداد OpenCL 1.2 | امتداد OpenCL 2.0 | OpenCL 2.1/2.2 النواة |
| استيعاب واجهة برمجة التطبيقات الرسومية | — | — |
|
الإصدارات المستندة إلى 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 تم الإعلان عنه في مارس 2015، [11] وتم إصداره في 16 نوفمبر 2015. [12] تتضمن عائلة SPIR الآن معيارًا حقيقيًا عبر واجهة برمجة التطبيقات (API) يتم تعريفه بالكامل بواسطة Khronos مع دعم أصلي لميزات shader وkernel.
يسمح برنامج منفصل لمجموعة Khronos بالتحويل المتبادل مع LLVM IR. [13]
تم دمج دعم استيعاب SPIR-V في المواصفات الأساسية لـ OpenCL 2.1، وواجهة Vulkan API ، وإصدار OpenGL 4.6.
| تاريخ | إصدار | ملحوظات |
|---|---|---|
| 18 أبريل 2016 | 1.1 | تم إصداره في IWOCL 2016 مع Provisional OpenCL 2.2. أضاف SPIR-V 1.1 دعمًا لـ OpenCL C++، وأوضاع تنفيذ وظيفة المبدئ/المنتهي، والحواجز المسماة، وتنفيذ المجموعة الفرعية، وأنابيب نطاق البرنامج وتخزين الأنابيب. [14] |
| 16 مايو 2017 | 1.2 | تم إصداره في IWOCL 2017 مع OpenCL 2.2. أضاف SPIR-V 1.2 دعمًا للتخصص وقت التشغيل لمعلمات ضبط المفاتيح في OpenCL 2.2. [15] |
| 7 مارس 2018 | 1.3 | تم إصداره مع Vulkan 1.1 . SPIR-V 1.3 تمت إضافة الدعم لعمليات المجموعة الفرعية وتمكين تحسينات المترجم المحسّنة. [16] |
| 7 مايو 2019 | 1.4 [1] | |
| 13 سبتمبر 2020 | 1.5 [1] | |
| 16 ديسمبر 2021 | 1.6 [1] |
سمات
SPIR-V هي لغة وسيطة عالية المستوى، يتم تبادلها في شكل ثنائي. يتم تمثيل الوظائف بواسطة رسم بياني لتدفق التحكم من الكتل الأساسية، باستخدام نموذج التعيين الفردي الثابت (SSA). تحتفظ هياكل البيانات بالتمثيل الهرمي عالي المستوى. إنها ليست ضائعة مثل التمثيلات الوسيطة السابقة التي تستخدم البايت كود أو الآلة الافتراضية المستخدمة في برامج التظليل الرسومية. يسمح هذا بأداء أقرب إلى الأمثل على الأجهزة المستهدفة. [17]
قابلية التوسعة
يمكن توسيع SPIR-V عن طريق كتابة ملحقات لإضافة دلالات، أو حجز نطاقات من قيم الرمز لاستخدام الطرف. يمكن للبائعين إضافة الدلالات المرغوبة إلى SPIR-V بشكل مستقل. [18] يمكن توفير مجموعات إضافية من مجموعات التعليمات الموسعة في مواصفات منفصلة. يمكن استيراد مجموعات متعددة دون مشكلة، حيث يتم استخدام التعليمات الموسعة من خلال تحديد معرف المجموعة والتعليمات داخل المجموعة. [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، ولكن ليس لمراحل التظليل، والتي تريد واجهات برمجة التطبيقات الرسومية ربطها بالكامل في وحدة SPIR-V واحدة. [23] هناك ملحقات متاحة للسماح للأدوات باستخدام التظليل المرتبط جزئيًا والنوى أيضًا بشكل مؤقت. [24]
القدرات
يتم استخدام وحدة SPIR-V بواسطة واجهة برمجة تطبيقات العميل لدعم ميزات تلك الوحدة، والتي يتم تصنيفها من خلال القدرات، ويتم الإعلان عنها في وقت مبكر من الوحدة. يمكن للمحقق أن يؤكد أن الوحدة تستخدم قدراتها المعلنة فقط، ويمكن لواجهة برمجة تطبيقات العميل رفض الوحدات التي تعلن عن قدرات غير مدعومة. [25]
SPIR-V لتجميع GLSL المتقاطع
تم استخدام SPIR-V للمساعدة في التعامل مع إصدارات متعددة من لغات مستوى المصدر. على سبيل المثال، تتطلب الإصدارات المتعددة من لغة تظليل OpenGL (GLSL) توزيع إصدارات متعددة من برامج التظليل، بسبب التنفيذات المرتبطة بإصدار أقدم معين من GLSL، مثل WebGL 1.0 وتنفيذ OpenGL من Apple. إحدى حالات الاستخدام البارزة لـ SPIR-V هي قدرتها على استخدامها كتنسيق تبادل بين إصدارات GLSL، باستخدام الأدوات التي تحتفظ بها مجموعة Khronos لتجميع GLSL إلى SPIR-V glslangValidator، [26] وتحسين SPIR-V spirv-opt، [22] والتجميع المتبادل إلى SPIR-V لأهداف GLSL مختلفة spirv-cross. [27]
ومع ذلك، فإن تنسيق SPIR-V به بعض القيود فيما يتعلق بالتجميع المتبادل، بما في ذلك المتطلب الذي ينص على أن تحتوي كل وحدة SPIR-V على رمز نقطة دخول واحد على الأقل. وهذا يمنع استخدام التنسيق بسهولة للتجميع المنفصل، حيث يمكن تجميع برامج التظليل المعقدة من خلال سلسلة من خطوات التجميع الجزئية تليها خطوة ربط. وهذا يتعارض مع الأهداف المعلنة لبعض أدوات SPIR-V مثل spirv-link، [22] والتي تهدف إلى توفير وظيفة ربط كاملة للكود الثنائي SPIR-V.
انظر أيضا
- لغة التظليل عالية المستوى (HLSL)
- سي جي (لغة برمجة)
- لغة التظليل OpenGL (GLSL)
- البنية الأساسية لبرنامج Tungsten Graphics Shader
- حساب النواة
- تنفيذ الخيط المتوازي
- لغة التجميع ARB
مراجع
- ^ abcd "سجل Khronos SPIR-V - مجموعة Khronos Inc". www.khronos.org . تم الاسترجاع في 2024-01-16 .
- ^ اي بي سي تيرزو ، أوليفييه. جامع، كريم؛ سيونتي، ألبرتو؛ بيزويلا ، كلارا (10 سبتمبر 2019). بنيات الحوسبة غير المتجانسة: التحديات والرؤية. الصحافة اتفاقية حقوق الطفل. رقم ISBN 9780429680038تم الاسترجاع بتاريخ 24 يونيو 2022 .
- ^ Bieneman, Chris (19 September 2024). "DirectX Adopting SPIR-V as the Interchange Format of the Future". مدونة مطوري DirectX . تم الاسترجاع في 19 سبتمبر 2024 .
- ^ “وحدات التظليل”. البرنامج التعليمي فولكان .
- ^ "HLSL كلغة تظليل Vulkan من الدرجة الأولى". مجموعة Khronos . 15 يناير 2020.
- ^ KhronosGroup/SPIRV-Cross، مجموعة Khronos، 2019-09-06 ، تم الاسترجاع في 2019-09-08
- ^ لارابيل، مايكل (12 سبتمبر 2012). "Khronos SPIR For OpenCL Brings Binary Compatibility". Phoronix . تم الاسترجاع في 25 يوليو 2015 .
- ^ سميث، رايان (22 يوليو 2013). "Khronos @ SIGGRAPH 2013: OpenGL 4.4، OpenCL 2.0، وOpenCL 1.2 SPIR Announced". Anandtech . تم الاسترجاع في 5 أبريل 2015 .
- ^ "Khronos تصدر مواصفات SPIR 1.2 للترميز المحمول لبرامج أجهزة OpenCL". مجموعة Khronos . 2014-01-20 . تم الاسترجاع في 2019-08-05 .
- ^ سميث، رايان (11 أغسطس 2014). "Khronos Announces OpenCL SPIR 2.0". Anandtech . تم الاسترجاع في 5 أبريل 2015 .
- ^ باركرسون، ستيوارت (4 مارس 2015). "مجموعة Khronos تقدم واجهة برمجة تطبيقات جديدة لبرنامج تشغيل الأجهزة Vulkan ولغة وسيطة SPIR-V مشتركة بين Vulkan وOpenCL 2.1". مجلة مطوري التطبيقات . تم الاسترجاع في 5 أبريل 2015 .
- ^ "Khronos تصدر مواصفات OpenCL 2.1 وSPIR-V 1.0 للبرمجة المتوازية غير المتجانسة". www.Khronos.org . 16 نوفمبر 2015 . تم الاسترجاع في 16 نوفمبر 2015 .
- ^ "SPIRV-LLVM-Translator: أداة ومكتبة للترجمة ثنائية الاتجاه بين SPIR-V وLLVM IR". GitHub . مجموعة Khronos.
- ^ تريفيت، نيل (18 أبريل 2016). "OpenCL A State of the Union (IWOCL 2016)" (PDF) . مجموعة كرونوس .
- ^ تريفيت، نيل (16 مايو 2017). "حالة الأمة في OpenCL (IWOCL 2017)" (PDF) . IWOCL .
- ^ "SPIR - لغة وسيطة مفتوحة المصدر للصناعة للحوسبة المتوازية والرسومات". مجموعة كرونوس . 2014-01-20 . تم الاسترجاع في 2019-08-05 .
- ^ كيسينيتش، جون. “مقدمة إلى SPIR-V” (PDF) . خرونوس . تم الاسترجاع 25 يوليو 2015 .
- ^ ab "SPIRV-Guide". github.com . تم الاسترجاع في 24 يونيو 2022 .
- ^ "إطار عمل اختبار متعدد واجهات برمجة التطبيقات مفتوح المصدر من Google 'Amber'". phoronix.com . تم الاسترجاع في 24 يونيو 2022 .
- ^ "مواصفات SPIR-V: تدفق التحكم المنظم". khronos.org . تم الاسترجاع في 24 يونيو 2022 .
- ^ "ثوابت التخصص". veldrid.dev . تم الاسترجاع في 24 يونيو 2022 .
- ^ abc "أدوات SPIR-V". www.github.com . تم الاسترجاع في 2020-10-01 .
- ^ "أساسيات التظليل". informit.com . تم الاسترجاع في 24 يونيو 2022 .
- ^ "امتداد SPIR-V لبرنامج Visual Studio". saschawillems.de . تم الاسترجاع في 24 يونيو 2022 .
- ^ "مواصفات SPIR-V: القدرات اللغوية". khronos.org . تم الاسترجاع في 24 يونيو 2022 .
- ^ "OpenGL / OpenGL ES Reference Compiler". www.khronos.org . تم الاسترجاع في 2020-10-01 .
- ^ "SPIR-V Cross". www.github.com . تم الاسترجاع في 2020-10-01 .
روابط خارجية
- صفحة ويب Khronos SPIR
- مواصفات SPIR-V
