рус eng
 
 Резюме
 Работа
 Публикации
 Заметки
 Образование
 Увлечения
 
Программирование графических процессоров
Спецкурс для магистрантов ФИТ, специализации "Компьютерное моделирование"
весенний семестр 2015-2016 года обучения
Программа курса
Lectures notes
  • Введение. Часть 1 (pdf)
  • Введение. Часть 2 (pdf)
  • CUDA. API (pdf)
  • Текстуры в CUDA (pdf)
  • Оптимизация программ (pdf)
  • CUDA Driver API (pdf)
  • Использование нескольких GPU (pdf)
  • Оптимизированные библиотеки для GPU (pdf)
  • Адаптация программ для GPU (pdf)
  • Программирование GPU на Фортран, Java, C# (pdf)
  • Введение в OpenCL (pdf)
  • Введене в OpenACC (pdf, pdf, Методичка)


ssh: 84.237.52.17:10022 или ssh:10.4.0.65 (из сети НГУ)
Порядок сдачи заданий
Все вопросы\ответы высылать по адресу arom[ at ]ccfit.nsu.ru. Префикс темы письма "CUDA_2015".
К отчету:
  1. Код программы и Makefile или строку компиляции на сервере cuda.ccfit.nsu.ru
  2. Отчет на полстраницы с результатом работы программы и его объяснением
Задачи
  1. Выделить на GPU массив arr из 10^9 элементов типа float и инициализировать его с помощью ядра следующим образом: arr[i] = sin((i%360)*Pi/180). Скопировать массив в память центрального процессора и посчитать ошибку err = sum_i(abs(sin((i%360)*Pi/180) - arr[i]))/10^9. Провести исследование зависимости результата от использования функций: sin, sinf, __sinf. Объяснить результат. Проверить результат при использовании массива типа double.

  2. Реализовать программу для накладывания фильтров на изображения. Возможные фильтры: размытие, выделение границ, избавление от шума. Реализовать два варианта программы, а именно: с применением разделяемой памяти и текстур. Сравнить время.

    Для работы с графическими файлами рекомендуется использовать libpng (man libpng). Примеры использования библиотеки в /usr/share/doc/libpng12-dev/examples/.

    Ссылки по теме: на habrahabr, на ИНТУИТ

  3. Модифицировать предыдущую программу так, чтобы использовались все имеющиеся в распоряжение программы GPU. Программа должна определять количество доступных GPU и распределять работу по ним.
  4. При помощи метода наименьших квадратов найти окружность в изображении. Для каждой случайной выборки точек организовать их обработку на GPU. Случайные выборки организовать при помощи библиотеки CURAND.

    Входные данные: изображение размером 640x480 (например, знак ограничения скорости), количество выборок N, количество элементов в каждой выборке K.

    Выходные данные: изображение с нарисованной на нём окружностью.

    Рекомендация: предварительно к изображению можно применить фильтр Собеля выделения границ и рассматривать точки, у которых нормированное значение цвета >=0.5.

    RANSAC Least-Squares Circle Fit

  5. Ray Tracing. Реализовать генерацию сцены, состоящей минимум из двух сфер и минимум одной плоскости. На выбор реализовать или преломление или отражение луча от сфер. На плоскости должна быть натянута текстура. Минимальный размер результирующего изображения 640х480 точек.

    Плоскость можно представить в виде 2х треугольников.

  6. Для заданной программы на Фортране выполнить перенос части кода на графический процессор. Возможны два варианта: используя возможности компилятора PGI Accelerated Fortran или с помощью вызова внешней функции с ядром на Си\С++.


Usefull links (Полезные ссылки)