Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Memória do dispositivo usando buffers e acessadores
Configurando a memória do dispositivo - Buffers
Descrição
Para manipular dados na memória do dispositivo, precisamos criar buffers SYCL.
O construtor de buffers para um ponteiro de dados brutos a serem gerenciados é o seguinte:
cl::sycl::buffer<typename T, int dimensions>(
T* ptr,
cl::sycl::range<dimensions>(int range_size)
);
Tarefas
Crie buffers para os 2 vetores de entrada e também para o de saída.
Localização no código fonte:
// <<Setup device memory>>
Dica
// buffer for input 1
sycl::buffer<sycl::float4, 1> buf_a(&a, cl::sycl::range<1>{1});
Acessando a memória do dispositivo - Accessors
Descrição
O SYCL tem o conceito de acessadores que são usados para acessar o controle de solicitação sobre a memória do dispositivo a partir dos objetos buffer.
Os diferentes modos de acesso são encapsulados na seguinte classe enum:
enum class mode {
read,
write,
read_write,
discard_write,
discard_read_write,
atomic
};
localizada no namespace access
.
Nesta fase, focaremos apenas os mais comuns: read
, write
e read_write
.
Um acessador SYCL pode ser criado a partir de um buffer usando a seguinte construção:
// e.g., read access to buffer memory
auto sycl_acc = sycl_buf.get_access<cl::sycl::access::mode::read>(cgh)
onde cgh
é uma instância do objeto manipulador do grupo de comandos SYCL cl::sycl::handler
. É necessário que os acessadores sejam criados dentro do grupo de comandos para o qual serão usados.
Tarefas
Solicite acesso dos buffers para acessar os dados no dispositivo.
- Acesso de leitura dos buffers de entrada
- Acesso de gravação do buffer de saída
Localização no código fonte:
// <<Request device memory access>>
Dica
// read accessor for the memory in `buf_a`
auto a_acc = buf_a.get_access<sycl::access::mode::read>(cgh);