Программирование GPU на CUDA: модель памяти, ядра, потоки и блоки, оптимизация вычислений. Разборы с полным кодом и замерами производительности — от первого запуска до практических приёмов ускорения.
cuBLAS и cuFFT: готовые GPU-библиотеки вместо своих ядер
Введение Для широкого класса задач — линейной алгебры (умножение матриц, решение систем уравнений) и преобразования Фурье — NVIDIA предоставляет высокооптимизированные библиотеки cuBLAS и cuFFT, реализующие эти операции на…
CUDA Unified Memory: упрощённое управление памятью CPU/GPU
Введение Традиционная модель CUDA требует явного управления двумя отдельными областями памяти — host (CPU) и device (GPU) — с явным копированием данных между ними. Unified Memory (управляемая память)…
Профилирование CUDA-кода в связке с Qt-приложением (Nsight Systems/Compute)
Введение Оптимизация CUDA-кода «на глаз» — ненадёжный подход: интуиция о том, где находится узкое место, часто ошибочна. NVIDIA Nsight Systems и Nsight Compute — инструменты профилирования, которые дают…
Интеграция CUDA-буферов с QImage/QPixmap для GPU-обработки изображений в Qt
Введение При построении Qt-приложений с GPU-ускоренной обработкой изображений (фильтры, свёртки, цветокоррекция) возникает задача эффективной передачи данных между CUDA-буферами на GPU и Qt-классами для отображения, такими как QImage. В…
CUDA Graphs: снижение оверхеда запуска при повторяющихся вычислениях
Введение Когда приложение многократно выполняет одну и ту же последовательность операций CUDA (например, серию ядер в цикле обучения нейросети или итеративном численном алгоритме), накладные расходы CPU на запуск…
Обработка ошибок в CUDA: cudaError_t, cudaGetLastError и отладка ядер
Введение CUDA API возвращает коды ошибок практически из каждого вызова, но в отличие от исключений в C++, эти ошибки не прерывают выполнение программы автоматически — если не проверять…
CUDA + Thrust: высокоуровневые алгоритмы вместо ручных ядер
Введение Не всегда необходимо писать собственные CUDA-ядра вручную — для многих стандартных операций (сортировка, поиск, свёртка, преобразование коллекций) есть библиотека Thrust, которая предоставляет интерфейс, похожий на STL, но…
Оптимизация CUDA-ядер: coalesced memory access и occupancy
Введение Написать корректное CUDA-ядро — относительно простая задача; написать эффективное ядро, использующее реальную пропускную способность GPU, требует понимания двух ключевых концепций: coalesced memory access (объединённый доступ к памяти)…