Упаковка потоков данных на видеокарте
Возьмите программу из предыдущего задания, реализующую сканирование на видеокарте. Вам нужно сделать реализацию упаковки потока данных на OpenCL.
Задание
Реализуйте упаковку потока данных, соблюдя условия ниже. Упаковка данных представляет собой формирование выходного массива данных, в который входят элементы из входного массива, удовлетворяющие какому-либо условию. Например, элементы, которые больше нуля. В этом задании выберите из массива только положительные элементы.
Условия
- Верификация проходит успешно.
- Используется вариант завершения сканирования без использования процессора (см. презентацию).
- Время работы OpenCL (колонка "OpenCL total") сравнимо со временем работы на OpenMP (колонка "OpenMP").
- Ядро использует локальную память для ускорения.
- Исходный код написан на C/C++.
- Код собирается с максимальной оптимизацией (флаги компилятора
-O3 -march=native
).
Исходный код
module load gpc-2021
git clone https://courses.igankevich.com/gpu-programming/filter.git
cd filter
make
./build/filter
Пример вывода
Platform name: Clover Device name: AMD Radeon (TM) R7 300 Series (BONAIRE, DRM 3.37.0, 5.7.15, LLVM 10.0.0) function OpenMP OpenCL total OpenCL copy-in OpenCL kernel OpenCL copy-out filter 2839us 0us 0us 0us 0us