الدرس 35: cuBLAS و Thrust ومتى لا تكتب kernel
على مدار الدورة كتبنا عدداً لا بأس به من الـ kernels يدوياً — جمع المتجهات، الاختزال، ضرب المصفوفات. لكن للعمليات القياسية، كتبت NVIDIA ومجتمع CUDA بالفعل تطبيقات خضعت لتحسين قوي على مدى سنوات: cuBLAS للجبر الخطي (ضرب المصفوفات sgemm، الجداء الداخلي)، و Thrust — مكتبة بأسلوب C++ STL توفر thrust::red
قبل أن تبني منشاراً كهربائياً من الصفر لقطع لوح، تحقق ممّا إذا كان هناك بالفعل منشار ممتاز في المتجر. cuBLAS و Thrust هما الأداتان الاحترافيتان الجاهزتان: للعمليات الشائعة تكونان في الغالب أفضل من أي شيء يمكنك بناؤه وحدك في أمسية واحدة.
- cuBLAS
- مكتبة NVIDIA للجبر الخطي على الـ GPU. تتضمن sgemm (ضرب المصفوفات) وغيره، مضبوطة لأداء الذروة.
- Thrust
- مكتبة بأسلوب C++ STL لـ CUDA: thrust::reduce و thrust::sort و thrust::transform وغيرها، تعمل على الـ GPU.
- thrust::reduce
- تُجري اختزالاً (مثل جمع) على مجال، على الـ GPU، بسطر واحد — لتحل محل kernel اختزال مكتوب يدوياً.
- thrust::device_vector
- حاوية من Thrust تسكن في ذاكرة الـ device وتدير التخصيص/التحرير تلقائياً، مثل std::vector.