שיעור 35: cuBLAS, Thrust ומתי לא לכתוב kernel
כתבנו לאורך הקורס לא מעט kernels בידיים — חיבור וקטורים, רדוקציה, כפל מטריצות. אבל לפעולות סטנדרטיות, חברות וקהילת CUDA כבר כתבו מימושים שעברו אופטימיזציה אגרסיבית במשך שנים: cuBLAS לאלגברה לינארית (כפל מטריצות sgemm, מכפלה פנימית), ו-Thrust — ספרייה בסגנון C++ STL שמספקת thrust::reduce, thrust::sor
לפני שאתה בונה מסור חשמלי מאפס כדי לחתוך קרש, בדוק אם יש כבר מסור מעולה בחנות. 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.