Основы OpenCL
Модель выполнения и память
Редукция
Сканирование
67
100

Почему OpenCL особенно важен для гетерогенных вычислительных систем, а не только для GPU-программирования?

Потому что он позволяет одновременно использовать разные типы устройств (CPU, GPU и др.) в рамках одной программы.

100

Как называется функция в OpenCL, которая выполняется параллельно множеством потоков на устройстве?

Ядро (Kernel)

100

Что такое редукция в контексте GPU?

Редукция — это операция, которая сводит массив данных к одному значению, например сумме, минимуму или максимуму, используя параллельные вычисления на GPU.

100

Какой результат возвращает операция сканирования на GPU?

Операция сканирования возвращает массив той же длины, где каждый элемент равен накопленной сумме всех предыдущих элементов входного массива, включая текущий. 

100

В каких алгоритмах сортировки активно применяется префиксная сумма (сканирование) и почему?

Radix Sort (поразрядная сортировка).
Пояснение: Сканирование позволяет каждому потоку вычислить позицию элемента в массиве, чтобы безопасно записывать его без конфликтов при параллельной обработке.

200

Назовите ключевое преимущество OpenCL по сравнению с CUDA.

Кросс-платформенность и поддержка устройств разных производителей.

200

Как называются минимальные параллельные исполнители, которые выполняют одно и то же ядро над разными данными?

Рабочие элементы (work-items)

200

Какие три основных этапа редукции были показаны на слайде «Редукция на GPU»?

Разделение массива на блоки, параллельное суммирование внутри блока, объединение результатов блоков

200

Какие три этапа включает выполнение сканирования на GPU?

Разделение массива на блоки потоков, Локальное сканирование внутри каждого блока, Глобальное сканирование с объединением результатов блоков.

200

Верно ли утверждение: «Редукция используется для определения позиций элементов в итоговом массиве при сортировке»? Объясните свой ответ.

Нет.
Пояснение: Определение позиций элементов в итоговом массиве выполняет сканирование, а редукция используется для агрегирования данных (суммы, максимум, минимум и т.д.).

300

Какой компонент OpenCL объединяет устройства, память и программы в единую рабочую среду?

Контекст (Context)

300

Какая память доступна всем рабочим элементам и используется для хранения основных данных?

Глобальная память

300

Зачем в реализации редукции используется shared memory?

Для быстрого хранения и суммирования промежуточных результатов внутри блока, так как shared memory быстрее глобальной памяти.

300

Зачем при сканировании используется локальное сканирование внутри блока?

Локальное сканирование позволяет параллельно вычислять префиксную сумму для части массива внутри одного блока потоков, что ускоряет вычисления за счет использования shared memory.

300

Какой тип параллелизма (данные-параллелизм или задачный параллелизм) чаще всего реализуется при запуске одного OpenCL-ядра на большом массиве данных и почему?

Данные-параллелизм, потому что одно и то же ядро выполняется над разными элементами данных параллельно.

400

Этот элемент OpenCL отвечает за отправку задач, копирование данных и управление порядком выполнения операций на устройстве.

Командная очередь (Command Queue)

400

Какая модель выполнения поддерживается OpenCL и предполагает, что одна программа выполняется над разными данными?

SPMD (Single Program, Multiple Data)

400

Почему после каждой итерации редукции вызывается __syncthreads()?

Чтобы все потоки завершили текущий шаг суммирования, иначе возможны ошибки из-за чтения неактуальных данных.

400

Если взять результат inclusive scan и удалить последний элемент,
что получится?  

Exclusive scan (для суммы) 

400

Почему универсальность OpenCL может приводить к более низкой производительности по сравнению с CUDA на некоторых устройствах?

Потому что OpenCL ориентирован на универсальность и разные архитектуры, тогда как CUDA глубже оптимизирован под GPU NVIDIA.

500

Почему в архитектуре OpenCL хост (CPU) не выполняет массовые вычисления, а только управляет ими?

Потому что хост отвечает за управление, подготовку данных и запуск вычислений, а сами параллельные вычисления выполняются на устройствах.

500

Почему использование разделяемой (local/shared) памяти внутри рабочей группы может значительно ускорить выполнение ядра?

Потому что она быстрее глобальной памяти и позволяет эффективный обмен данными внутри рабочей группы.

500

Что делает цикл
for (unsigned int s = blockDim.x / 2; s > 0; s >>= 1)
в CUDA-редукции?

Он пошагово уменьшает число активных потоков в два раза и постепенно сводит данные к одному итоговому значению.

500

Зачем в алгоритме сканирования элементы сначала складываются с ближайшими соседями, а затем с более дальними?

Элементы массива сначала складываются с ближайшими соседями, а затем с более дальними, чтобы постепенно накапливать сумму предыдущих элементов и при этом выполнять вычисления параллельно.

500

Для какой цели используется операция сканирования при построении гистограмм на GPU?

Для вычисления позиций элементов в итоговом массиве.
Пояснение: Сначала редукция подсчитывает, сколько элементов попадает в каждый диапазон, а затем сканирование определяет индексы, куда записывать эти элементы.