Back
Close

Introdução ao OpenCL

menotti
13.8K views

Um exemplo completo

Multiplicação de matrizes

Agora vamos analisar um exemplo completo de multiplicação de matrizes em C++ que envia dados para processamento e os recebe de volta. Além das diferenças inerentes da linguagem, temos algumas novidades em relação ao nosso exemplo anterior.

O kernel é criado na seguinte linha:

// Create the compute kernel from the program
cl::make_kernel<int, cl::Buffer, cl::Buffer, cl::Buffer> naive_mmul(program, "mmul");

Depois, ele é invocado diretamente pelo seu nome, mas antes declaramos um objeto NDRange que estipula suas dimensões e tamanhos:

cl::NDRange global(N, N);
naive_mmul(cl::EnqueueArgs(queue, global), N, d_a, d_b, d_c);

Os kernels OpenCL podem trabalhar com 1, 2 ou 3 dimensões. Neste exemplo, estamos usando 2 dimensões e cada instância do kernel vai calcular um único elemento da matriz. Observe no código do kernel que está na última aba as seguintes linhas:

int i = get_global_id(0);
int j = get_global_id(1);

A função get_global_id retorna um identificador único em cada dimensão (0 e 1) para cada uma das N x N execuções, cobrindo toda a matriz.

Multiplicação de matrizes - OpenCL
Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io