Introdução ao SYCL

menotti
80.5K views

Open Source Your Knowledge, Become a Contributor

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

Create Content

Programação de Kernel SYCL - A API single_task

Declare o kernel vector_addition

Descrição

Por especificação, um tipo sem nome é um argumento de modelo inválido para classes usadas para nomear kernels SYCL. Portanto, você precisa pelo menos declarar a classe do kernel antes de usá-la.

Os exemplos a seguir são nomes de kernel SYCL válidos:

// class
class MyKernelClass;
// struct
struct MyKernelStruct;
// enum class
enum class MyKernelEnum : int;

Tarefa

Mais adiante, declare o functor da classe vector_addition antes do ponto de entrada int main da aplicação.

Localização no código fonte:

// <<Declare vector_addition kernel function object>>
Dica

class vector_addition;

Implemente o kernel vector_addition

Descrição

Agora precisamos enfileirar o kernel de adição de vetores para execução.

Um kernel que é executado em uma thread usando NDRange(1,1,1) pode ser enfileirado usando a API cl::sycl::single_task:

single_task<typename kernel_lambda_name>([=](){});

Isso é equivalente à execução de um kernel em uma única unidade de computação com um único grupo de trabalho de apenas um item de trabalho. Assim, podemos acessar os valores dos objetos acessadores diretamente usando o índice 0 da seguinte maneira:

// e.g, assign accessor element in the kernel body
acc[0] = someValue;

Tarefa

Complete o código do kernel de adição de vetores em que os acessadores de a, b, c disponibilizam os vetores para o cálculo de c = a + b.

Localização no código fonte:

// <<Complete the vector addition computation>>
Dica

c_acc[0] = a_acc[0] + b_acc[0];

Vamos executar!

Olá mundo em SYCL
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content