Introdução ao OpenCL

menotti
14.6K views

Open Source Your Knowledge, Become a Contributor

Technology knowledge has to be shared and made accessible for free. Join the movement.

Create Content

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
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content