Introdução ao OpenCL
menotti
13K views
Usando memória local
Multiplicação de matrizes
Aqui temos implementações diferentes, onde cada invocação do kernel calcula uma linha inteira da matriz. Note que nosso NDRange
agora só tem uma dimensão e que no kernel (C_row.cl
) só solicitamos o get_global_id
para ela, já que a outra é percorrida por um for
na variável k
. Esta primeira versão apresenta desempenho pior do que a da lição anterior, ao menos na CPU. Experimente as outras duas versões desta lição alternando os comentários no programa principal. Note que na última versão (C_row_priv_block.cl
) você precisa declarar um NDRange
local e passa-lo como argumento no kernel, pois ele usa as funções get_local_id
e get_local_size
, além de alocar memória local.
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//------------------------------------------------------------------------------
//
// Include fle for the Matrix Multiply test harness
//
// HISTORY: Written by Tim Mattson, August 2010
// Modified by Simon McIntosh-Smith, September 2011
// Modified by Tom Deakin and Simon McIntosh-Smith, October 2012
// Updated to C++ Wrapper v1.2.6 by Tom Deakin, August 2013
//
//------------------------------------------------------------------------------
#ifndef __MULT_HDR
#define __MULT_HDR
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <vector>
#define __CL_ENABLE_EXCEPTIONS
#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
#include "cl.hpp"
#include "util.hpp"
#include "matrix_lib.hpp"
//------------------------------------------------------------------------------
// functions from ../Common
//------------------------------------------------------------------------------
extern double wtime(); // returns time since some fixed past point (wtime.c)
//------------------------------------------------------------------------------
// Constants
//------------------------------------------------------------------------------
1
//------------------------------------------------------------------------------
1
1
1