Почему OpenCL особенно важен для гетерогенных вычислительных систем, а не только для GPU-программирования?
Потому что он позволяет одновременно использовать разные типы устройств (CPU, GPU и др.) в рамках одной программы.
Как называется функция в OpenCL, которая выполняется параллельно множеством потоков на устройстве?
Ядро (Kernel)
Что такое редукция в контексте GPU?
Редукция — это операция, которая сводит массив данных к одному значению, например сумме, минимуму или максимуму, используя параллельные вычисления на GPU.
Какой результат возвращает операция сканирования на GPU?
Операция сканирования возвращает массив той же длины, где каждый элемент равен накопленной сумме всех предыдущих элементов входного массива, включая текущий.
В каких алгоритмах сортировки активно применяется префиксная сумма (сканирование) и почему?
Radix Sort (поразрядная сортировка).
Пояснение: Сканирование позволяет каждому потоку вычислить позицию элемента в массиве, чтобы безопасно записывать его без конфликтов при параллельной обработке.
Назовите ключевое преимущество OpenCL по сравнению с CUDA.
Кросс-платформенность и поддержка устройств разных производителей.
Как называются минимальные параллельные исполнители, которые выполняют одно и то же ядро над разными данными?
Рабочие элементы (work-items)
Какие три основных этапа редукции были показаны на слайде «Редукция на GPU»?
Разделение массива на блоки, параллельное суммирование внутри блока, объединение результатов блоков
Какие три этапа включает выполнение сканирования на GPU?
Разделение массива на блоки потоков, Локальное сканирование внутри каждого блока, Глобальное сканирование с объединением результатов блоков.
Верно ли утверждение: «Редукция используется для определения позиций элементов в итоговом массиве при сортировке»? Объясните свой ответ.
Нет.
Пояснение: Определение позиций элементов в итоговом массиве выполняет сканирование, а редукция используется для агрегирования данных (суммы, максимум, минимум и т.д.).
Какой компонент OpenCL объединяет устройства, память и программы в единую рабочую среду?
Контекст (Context)
Какая память доступна всем рабочим элементам и используется для хранения основных данных?
Глобальная память
Зачем в реализации редукции используется shared memory?
Для быстрого хранения и суммирования промежуточных результатов внутри блока, так как shared memory быстрее глобальной памяти.
Зачем при сканировании используется локальное сканирование внутри блока?
Локальное сканирование позволяет параллельно вычислять префиксную сумму для части массива внутри одного блока потоков, что ускоряет вычисления за счет использования shared memory.
Какой тип параллелизма (данные-параллелизм или задачный параллелизм) чаще всего реализуется при запуске одного OpenCL-ядра на большом массиве данных и почему?
Данные-параллелизм, потому что одно и то же ядро выполняется над разными элементами данных параллельно.
Этот элемент OpenCL отвечает за отправку задач, копирование данных и управление порядком выполнения операций на устройстве.
Командная очередь (Command Queue)
Какая модель выполнения поддерживается OpenCL и предполагает, что одна программа выполняется над разными данными?
SPMD (Single Program, Multiple Data)
Почему после каждой итерации редукции вызывается __syncthreads()?
Чтобы все потоки завершили текущий шаг суммирования, иначе возможны ошибки из-за чтения неактуальных данных.
Если взять результат inclusive scan и удалить последний элемент,
что получится?
Exclusive scan (для суммы)
Почему универсальность OpenCL может приводить к более низкой производительности по сравнению с CUDA на некоторых устройствах?
Потому что OpenCL ориентирован на универсальность и разные архитектуры, тогда как CUDA глубже оптимизирован под GPU NVIDIA.
Почему в архитектуре OpenCL хост (CPU) не выполняет массовые вычисления, а только управляет ими?
Потому что хост отвечает за управление, подготовку данных и запуск вычислений, а сами параллельные вычисления выполняются на устройствах.
Почему использование разделяемой (local/shared) памяти внутри рабочей группы может значительно ускорить выполнение ядра?
Потому что она быстрее глобальной памяти и позволяет эффективный обмен данными внутри рабочей группы.
Что делает цикл
for (unsigned int s = blockDim.x / 2; s > 0; s >>= 1)
в CUDA-редукции?
Он пошагово уменьшает число активных потоков в два раза и постепенно сводит данные к одному итоговому значению.
Зачем в алгоритме сканирования элементы сначала складываются с ближайшими соседями, а затем с более дальними?
Элементы массива сначала складываются с ближайшими соседями, а затем с более дальними, чтобы постепенно накапливать сумму предыдущих элементов и при этом выполнять вычисления параллельно.
Для какой цели используется операция сканирования при построении гистограмм на GPU?
Для вычисления позиций элементов в итоговом массиве.
Пояснение: Сначала редукция подсчитывает, сколько элементов попадает в каждый диапазон, а затем сканирование определяет индексы, куда записывать эти элементы.