Параллельные и распределенные вычисления

Семинар 6

CUDA (Scan)

Пономаренко Роман
@rerand0m
rerandom@ispras.ru

source

source

Scan

A = [a1, a2, a3, ... an], I, f(x, y)
∀ b: f(I, b) = b

Включающее сканирование:

Scan(A) = [reduce([a1]), reduce([a1, a2]), ..., reduce([a1, ... an])]

Исключающее сканирование:

Scan(A) = [I, reduce([a1]), ..., reduce([a1, ... an-1])]

source

source

source

source

source

source

PyCUDA very simple example

HW tips

  • "аллоцированы через механизм двумерных матриц" - cudaMallocPitch и cudaMemcpy2D
  • Если в коде допускается ошибка разобранная на лекциях/семинарах - такой код не будет принят
  • Если что-то можно было эфективно посчитать на GPU (пусть это не основное задание), а вы считаете на CPU - такой код не будет принят
  • Не стоит реализовывать умножение матрицы на вектор через перемножение матриц
  • Графики достаточно построить для нескольких задач. Главное - чтобы они были показательны.
  • В чате на 150+ человек лучше не указывать, кому и что делать, если об этом явно не просили. Особенно тем, от кого зависят ваши оценки)
  • Ядро - функция с атрибутом __global__