Урок 35: cuBLAS, Thrust и когда не стоит писать kernel
На протяжении курса мы написали немало kernels вручную — сложение векторов, редукцию, умножение матриц. Но для стандартных операций NVIDIA и сообщество CUDA уже написали реализации, агрессивно оптимизированные годами: cuBLAS для линейной алгебры (умножение матриц sgemm, скалярное произведение) и Thr
Прежде чем строить электропилу с нуля, чтобы распилить доску, проверьте, нет ли уже отличной пилы в магазине. 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.