Julia: ضع في اعتبارك إضافة VecTuple {N، T} `للاحتفاظ بـ N 'VecElements {T}` s

تم إنشاؤها على ١٤ مارس ٢٠١٧  ·  3تعليقات  ·  مصدر: JuliaLang/julia

أنا على علم بوجود SIMD.jl. ومع ذلك ، أعتقد أنه يجب دعم إنشاء الكود الأساسي لمتجهات SIMD بطريقة أسهل في قاعدة جوليا نفسها ، وإخفاء بعض التفاصيل في مجموعة التغليف بدلاً من النوع الأساسي فقط.

وبالتالي سيكون اقتراحي هو تحديد نوع VecTuple{N,T} والذي سيكون في الأساس معادلاً لـ NTuple{N, VecElement{T}} . سيكون الاختلاف هو أنه سيتم تطبيق خصائص codegen VecElement ضمنيًا إذا لزم الأمر ، ولكن سيتم ربطها بالمجموعة بدلاً من العنصر. بهذه الطريقة ، لن يحتاج الوصول إلى العناصر الفردية في المجموعة إلى إجراء تحويل إضافي T <-> VecElement{T} . يتطلب الوصول حاليًا إلى عنصر واحد من NTuple{N, VecElement{T}} x[i].value بدلاً من x[i] .

أيضًا ، متطلبات الحجم الكلي للنوع والمحاذاة ، أو الأنواع الأساسية (أحجام البتات 8 إلى 64) المسموح بها على الإطلاق ، سيتم ربطها بالمجموعة المتخصصة. أنظر أيضا # 20961.

أنا لا أقترح إضافة جميع العمليات الممكنة على ناقلات SIMD إلى قاعدة جوليا. هناك بالتأكيد الكثير (فكر في الخلط أو النقل أو العكس). لا يزال من الممكن ترك هذا كله للحزم المتخصصة في الوقت الحالي ، فقط تغيير نوع كيفية ربط خاصية ترميز LLVM الأساسية بالمجموعة.

( VecTuple هو بالطبع مجرد عنصر نائب لأي اسم ملائم في هذا الشأن.)

simd speculative types and dispatch

التعليق الأكثر فائدة

تتمثل إحدى الأفكار حول كيفية المتابعة في إنشاء حزمة جديدة تصف ما تعتقد أنه يجب أن يدخل في القاعدة. أطلق عليها على سبيل المثال SIMDBase . يمكننا بعد ذلك إعادة استهداف SIMD لهذه الحزمة ، والتي من شأنها - إذا كان افتراضك صحيحًا - تبسيط SIMD . بمجرد موافقة الأشخاص على الوظيفة التي يوفرها SIMDBase ، يمكن نقلها إلى Base.

على سبيل المثال ، لا أمانع إذا كان من الممكن معالجة بعض التواءات استدعاء LLVM منخفضة المستوى في مكان آخر.

ال 3 كومينتر

فقط كتذكير للآخرين ، ليس لدينا VecTuple نظرًا لأن Tuple لم يتم تعريفه على أنه نوع من المتجهات المجردة ، لذلك فهو تضارب جزئي في المصطلحات للحديث عن vectorized-tuple.

تتمثل إحدى الأفكار حول كيفية المتابعة في إنشاء حزمة جديدة تصف ما تعتقد أنه يجب أن يدخل في القاعدة. أطلق عليها على سبيل المثال SIMDBase . يمكننا بعد ذلك إعادة استهداف SIMD لهذه الحزمة ، والتي من شأنها - إذا كان افتراضك صحيحًا - تبسيط SIMD . بمجرد موافقة الأشخاص على الوظيفة التي يوفرها SIMDBase ، يمكن نقلها إلى Base.

على سبيل المثال ، لا أمانع إذا كان من الممكن معالجة بعض التواءات استدعاء LLVM منخفضة المستوى في مكان آخر.

كمرجع ، تمت مناقشة الأنواع الجوهرية لـ SIMD أيضًا بالتفصيل هنا: # 2299

سأحاول التوصل إلى مفهوم عملي ... قد يستغرق بعض الشيء.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

StefanKarpinski picture StefanKarpinski  ·  3تعليقات

manor picture manor  ·  3تعليقات

TotalVerb picture TotalVerb  ·  3تعليقات

thofma picture thofma  ·  3تعليقات

felixrehren picture felixrehren  ·  3تعليقات