Векторы и преобразования Thrust
Параллелизм в стиле STL на GPU
«Векторы и преобразования Thrust» — бесплатный урок CUDA Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CUDA Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CUDA Academy содержит 4 уроков всего.
STL для Вашего GPU
Thrust — высокоуровневая библиотека, похожая на STL в C++, но работающая на GPU. Вам почти не придётся писать код ядер самостоятельно. 🎉
Два вида вектора
Thrust предоставляет host_vector для памяти CPU и device_vector для памяти GPU. Они выглядят одинаково, но находятся в разных средах.
thrust::host_vector<int> h(100);
thrust::device_vector<int> d(100);Копирование через границу
Присваивание host_vector объекту device_vector автоматически запускает передачу памяти. Вам не нужно вручную писать шаблонный код с cudaMemcpy.
thrust::device_vector<int> d = h; // host to deviceВыделение памяти выполняется автоматически
device_vector выделяет и освобождает память GPU за Вас с помощью RAII. Когда он выходит из области видимости, память корректно освобождается.
Заполнение и последовательности
Вспомогательные функции, такие как thrust::fill и thrust::sequence, инициализируют весь device_vector одним параллельным вызовом вместо ручного цикла.
thrust::sequence(d.begin(), d.end()); // 0,1,2,...Преобразование сопоставляет элементы
thrust::transform параллельно применяет функцию к каждому элементу и записывает результат в выходной диапазон. Это классический шаблон map.
thrust::transform(d.begin(), d.end(),
out.begin(), op);Функторы задают операцию
Передаваемая Вами операция — это функтор: структура с оператором operator(), помеченным __host__ __device__, поэтому он может выполняться на GPU.
struct Square { __host__ __device__
float operator()(float x){ return x*x; } };Встроенные операторы
Для распространённых математических операций Thrust предоставляет функторы, такие как thrust::plus и thrust::multiplies, поэтому для простых задач Вам не нужно писать собственный функтор.
thrust::transform(a.begin(), a.end(),
b.begin(), c.begin(), thrust::plus<float>());Два входа, один выход
Двоичная форма transform принимает два входных диапазона и объединяет их попарно — это идеально подходит для поэлементного сложения векторов.
Получение указателя без оболочки
Нужно перейти к написанному вручную ядру? thrust::raw_pointer_cast предоставит Вам исходный указатель на память устройства, который можно передать дальше.
float* p = thrust::raw_pointer_cast(d.data());Меньше кода — меньше ошибок
Thrust скрывает выделение памяти, копирование и настройки запуска. Вы жертвуете небольшим контролем ради понятного и безопасного кода GPU, который просто работает.
Быстрая проверка
Вспомните, как Thrust применяет операцию ко всему вектору.
Итоги
Вы использовали device_vector для автоматического управления памятью, передавали данные присваиванием и запускали transform с функторами. Мощь GPU в стиле STL. 💪
Часто задаваемые вопросы
Урок «Векторы и преобразования Thrust» бесплатный?
Да — полный текст урока «Векторы и преобразования Thrust» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CUDA Academy, подпишись на CoddyKit PRO. Курс CUDA Academy содержит 4 уроков всего.
Чему я научусь в уроке «Векторы и преобразования Thrust»?
Параллелизм в стиле STL на GPU Ты практикуешь CUDA Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CUDA Academy?
Предыдущий опыт не требуется. CUDA Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Векторы и преобразования Thrust»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CUDA Academy?
Да. Каждый урок CUDA Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Правильное использование GEMM в cuBLAS
- Векторы и преобразования Thrust
- Сокращение, сканирование и сортировка в Thrust
- cuDNN для глубокого обучения