GPU Coder™ поддерживает некоторые шаблоны разработки, которые сопоставляют эффективно со структурами графического процессора.
Операции ядра шаблона вычисляют каждый элемент выходного массива как функция небольшой области входного массива. Можно выразить много операций фильтрации как операцию шаблона. Примеры включают свертку, медианную фильтрацию и методы конечных элементов.
В реализации GPU Coder ядра шаблона каждый поток вычисляет один элемент выходного массива. Поскольку к данному входному элементу неоднократно получают доступ для вычисления нескольких соседних выходных элементов, GPU Coder использует общую память, чтобы улучшить пропускную способность памяти и местность данных.
Много научных приложений содержат матричные операции над матрицей включая Общую Матрицу к Умножению матриц (GEMM) формы C = AB
где можно опционально транспонировать A
и B
. Код для таких матричных операций над матрицей обычно берет шаблон:
for x = 1:M for y = 1:N for z = 1:K C(x,y) = F(A(x,z),B(z,y)); end end end
где F()
пользовательская функция. В этих операциях строка из одной входной матрицы и столбец из второй входной матрицы используются для расчета соответствующий элемент выходной матрицы. Каждый поток перезагружает строку и столбец. Этот шаблон разработки позволяет оптимизацию этой структуры, снова используя данные и заставляя каждый поток вычислить несколько выходных элементов.
Например, F()
может быть постоянный клиент, умножение матриц, F()=@mtimes
. Для таких шаблонов GPU Coder обеспечивает MatrixMatrix
ядро, чтобы создать высокоэффективное, внедрение FAST матричных операций над матрицей на графическом процессоре.
coder.gpu.constantMemory
| coder.gpu.kernel
| coder.gpu.kernelfun
| gpucoder.matrixMatrixKernel
| gpucoder.stencilKernel