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