أنا على علم بوجود 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
هو بالطبع مجرد عنصر نائب لأي اسم ملائم في هذا الشأن.)
فقط كتذكير للآخرين ، ليس لدينا VecTuple نظرًا لأن Tuple لم يتم تعريفه على أنه نوع من المتجهات المجردة ، لذلك فهو تضارب جزئي في المصطلحات للحديث عن vectorized-tuple.
تتمثل إحدى الأفكار حول كيفية المتابعة في إنشاء حزمة جديدة تصف ما تعتقد أنه يجب أن يدخل في القاعدة. أطلق عليها على سبيل المثال SIMDBase
. يمكننا بعد ذلك إعادة استهداف SIMD
لهذه الحزمة ، والتي من شأنها - إذا كان افتراضك صحيحًا - تبسيط SIMD
. بمجرد موافقة الأشخاص على الوظيفة التي يوفرها SIMDBase
، يمكن نقلها إلى Base.
على سبيل المثال ، لا أمانع إذا كان من الممكن معالجة بعض التواءات استدعاء LLVM منخفضة المستوى في مكان آخر.
كمرجع ، تمت مناقشة الأنواع الجوهرية لـ SIMD أيضًا بالتفصيل هنا: # 2299
سأحاول التوصل إلى مفهوم عملي ... قد يستغرق بعض الشيء.
التعليق الأكثر فائدة
تتمثل إحدى الأفكار حول كيفية المتابعة في إنشاء حزمة جديدة تصف ما تعتقد أنه يجب أن يدخل في القاعدة. أطلق عليها على سبيل المثال
SIMDBase
. يمكننا بعد ذلك إعادة استهدافSIMD
لهذه الحزمة ، والتي من شأنها - إذا كان افتراضك صحيحًا - تبسيطSIMD
. بمجرد موافقة الأشخاص على الوظيفة التي يوفرهاSIMDBase
، يمكن نقلها إلى Base.على سبيل المثال ، لا أمانع إذا كان من الممكن معالجة بعض التواءات استدعاء LLVM منخفضة المستوى في مكان آخر.