SIMD Support

نوع VecElement{T} مخصص لبناء مكتبات عمليات SIMD. يتطلب الاستخدام العملي له استخدام llvmcall. يتم تعريف النوع على النحو التالي:

struct VecElement{T}
    value::T
end

لديها قاعدة تجميع خاصة: يتم تعيين مجموعة متجانسة من VecElement{T} إلى نوع vector في LLVM عندما يكون T نوع بت بدائي.

عند -O3، قد يقوم المترجم تلقائيًا بتوجيه العمليات على مثل هذه المجموعات. على سبيل المثال، البرنامج التالي، عند تجميعه باستخدام julia -O3، يولد تعليمات جمع SIMD اثنتين (addps) على أنظمة x86:

const m128 = NTuple{4,VecElement{Float32}}

function add(a::m128, b::m128)
    (VecElement(a[1].value+b[1].value),
     VecElement(a[2].value+b[2].value),
     VecElement(a[3].value+b[3].value),
     VecElement(a[4].value+b[4].value))
end

triple(c::m128) = add(add(c,c),c)

code_native(triple,(m128,))

ومع ذلك، نظرًا لأن التوجيه التلقائي لا يمكن الاعتماد عليه، فإن الاستخدام المستقبلي سيكون في الغالب عبر المكتبات التي تستخدم llvmcall.