SPIR-?
⋯؟ ?الهدف ؟ ؟رانفورم ؟ ?رانسلت ⋯?
سبير-؟ هو مشروع بحثي يهدف إلى استكشاف تصميمات IR الموجهة نحو التظليل المستمدة من SPIR-V، وإنتاج إطار عمل حول مثل هذا IR لتسهيل خطوط أنابيب التجميع المتقدمة، بما يتجاوز ما تسمح به أدوات SPIR-V الحالية.
نشأت مثل هذه الحاجة في مشروع Rust-GPU، الذي يتطلب مجموعة متنوعة من عمليات التصديق لتحويل كود الأغراض العامة (Rust 1 ) الذي يعمل على ذاكرة غير مطبوعة ، إلى تدفق بيانات مباشر صديق لوحدة معالجة الرسومات.
هدفنا هو استبدال تصاريح Rust-GPU SPIR-V الحالية بـ SPIR-؟ معادلاتها - ولكن الأهم من ذلك، SPIR-؟ يجب أن يسمح بكتابة تصاريح تشريع/تحسين أكثر قوة، والتي كان من الممكن أن تكون غير مفهومة 2 للتلاعب المباشر بـ SPIR-V.
1 Rust ليس فريدًا في احتياجاته هنا، ويمكن لعدد أكبر من اللغات (أو IRs) الاستفادة في النهاية من مثل هذا الإطار، ولكن أعمال التصميم والتنفيذ الأولية ركزت على Rust-GPU
2 ليس مستحيلًا تمامًا، ولكنه يتطلب تكاليف تطوير/صيانة مفرطة، ويضطر إلى الموازنة باستمرار بين الصحة والقوة (من الأسهل الوثوق بالتمريرات الأكثر تحفظًا)، وما إلى ذلك.
هذا المشروع ليس تابعًا أو مرتبطًا أو مصرحًا به أو معتمدًا أو مرتبطًا رسميًا بأي شكل من الأشكال بشركة Khronos Group Inc. أو أي من الشركات التابعة لها أو الشركات التابعة لها. يمكن العثور على الموقع الرسمي لشركة Khronos Group Inc. على https://www.khronos.org.
الأسماء SPIR، SPIR-V، بالإضافة إلى الأسماء والعلامات والشعارات والصور ذات الصلة هي علامات تجارية مملوكة لأصحابها.
سياق إضافي: اسم هذا المشروع هو تورية على SPIR-V، ولا علاقة له تمامًا بـ SPIR (معيار IR الأقدم).
؟ هذا المشروع قيد التصميم والتطوير النشط، هل يمكن أن تتغير العديد من التفاصيل ؟
إذا كنت مهتمًا باستخدام SPIR-؟ بنفسك، قد ترغب أولاً في إلقاء نظرة على أداة تعقب المشكلات للمشكلات ذات الصلة، وحتى فتح مشكلات جديدة تصف حالة الاستخدام الخاصة بك.
مع التركيز الأولي على حالة استخدام Rust-GPU، قد تكون الوظائف/واجهات برمجة التطبيقات/المستندات المختلفة (المرغوبة بخلاف ذلك) غير موجودة، أو تتغير بسرعة - في نفس الوقت، المناقشات حول توسيع نطاق SPIR- وسهولة استخدامه؟ على المدى الطويل لا تزال موضع ترحيب.
Kernel
("OpenCL") لـ SPIR-VKernel
SPIR-V أقرب بكثير إلى LLVM IR، من Shader
SPIR-V، وعلى هذا النحو فإن الأدوات الموجهة حول LLVM من المرجح أن تكون أكثر ملاءمةأنواع بيانات الأشعة تحت الحمراء :
| المرافق الإطار :
التمريرات (من/إلى/على SPIR-؟) :
|
GLSL ( #version 450
out int output0;
void main() {
int o = 1 ;
for ( int i = 1 ; i < 10 ; i ++ )
o *= i;
output0 = o;
} WGSL ( @vertex
fn main() -> @location( 0 ) i32 {
var o : i32 = 1 ;
for (var i : i32 = 1 ; i < 10 ; i ++ ) {
o *= i;
}
return o;
} | سبير-؟ #[spv.Decoration.Flat]
#[spv.Decoration.Location(Location: 0 )]
global_var GV0 in spv.StorageClass.Output: s32
func F0 () -> spv.OpTypeVoid {
loop (v0: s32 <- 1s32, v1: s32 <- 1s32) {
v2 = spv. OpSLessThan (v1, 10s32): bool
(v3: s32, v4: s32) = if v2 {
v5 = spv. OpIMul (v0, v1): s32
v6 = spv. OpIAdd (v1, 1s32): s32
(v5, v6)
} else {
(spv. OpUndef : s32, spv. OpUndef : s32)
}
(v3, v4) -> (v0, v1)
} while v2
spv. OpStore (Pointer: &GV0, Object: v0)
} | SPIR-V ( %typeof_output0 = OpTypePointer Output %i32
%output0 = OpVariable %typeof_output0 Output
%typeof_main = OpTypeFunction %void
%main = OpFunction %void None %typeof_main
%entry = OpLabel
OpBranch %bb0
%bb0 = OpLabel
OpBranch %bb1
%bb1 = OpLabel
%o = OpPhi %i32 %1 _i32 %bb0 %o_next %bb5
%i = OpPhi %i32 %0 _i32 %bb0 %i_next %bb5
OpLoopMerge %bb6 %bb5 None
OpBranch %bb2
%bb2 = OpLabel
%cond = OpSLessThan %bool %i %10 _i32
OpSelectionMerge %bb4 None
OpBranchConditional %cond %bb4 %bb3
%bb3 = OpLabel
OpBranch %bb6
%bb4 = OpLabel
%o_next = OpIMul %i32 %o %i
OpBranch %bb5
%bb5 = OpLabel
%i_next = OpIAdd %i32 %i %1 _i32
OpBranch %bb1
%bb6 = OpLabel
OpStore %output0 %o
OpReturn
OpFunctionEnd |
(والرؤية حول كيفية تناسب SPIR- معها)
والفرق هنا هو بين:
نحن نرحب بمساهمات المجتمع في هذا المشروع.
يرجى قراءة دليل المساهمين للحصول على مزيد من المعلومات حول كيفية البدء. يرجى أيضًا قراءة شروط المساهمين قبل تقديم أي مساهمات.
يجب أن تتوافق أي مساهمة يتم تقديمها عمدًا للتضمين في مشروع Embark Studios مع نموذج الترخيص القياسي Rust (MIT أو Apache 2.0) وبالتالي تكون مرخصة بشكل مزدوج كما هو موضح أدناه، دون أي شروط أو أحكام إضافية:
هذه المساهمة مرخصة بموجب أي من
في خيارك.
للتوضيح، تشير كلمة "الخاص بك" إلى Embark أو أي مرخص له/مستخدم آخر للمساهمة.