0Pricing
CUDA Academy · Урок

Векторы и преобразования 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 — локальная установка не требуется.

Все уроки этого курса

  1. Правильное использование GEMM в cuBLAS
  2. Векторы и преобразования Thrust
  3. Сокращение, сканирование и сортировка в Thrust
  4. cuDNN для глубокого обучения
← Назад к CUDA Academy