Kernel de computação - Compute kernel

Na computação , um kernel de computação é uma rotina compilada para aceleradores de alto rendimento (como unidades de processamento gráfico (GPUs), processadores de sinal digital (DSPs) ou matrizes de portas programáveis ​​em campo (FPGAs)), separados, mas usados ​​por um programa principal ( normalmente em execução em uma unidade de processamento central ). Eles às vezes são chamados de sombreadores de computação , compartilhando unidades de execução com sombreadores de vértice e pixel shaders em GPUs, mas não estão limitados à execução em uma classe de dispositivo ou APIs gráficas .

Descrição

Os kernels de computação correspondem aproximadamente a loops internos ao implementar algoritmos em linguagens tradicionais (exceto que não há operação sequencial implícita) ou ao código passado para iteradores internos .

Eles podem ser especificados por uma linguagem de programação separada , como " OpenCL C " (gerenciado pela API OpenCL ), como " sombreadores de computação " escritos em uma linguagem de sombreamento (gerenciado por uma API gráfica como OpenGL ), ou embutidos diretamente no código do aplicativo escrito em uma linguagem de alto nível , como no caso de C ++ AMP .

Processamento vetorial

Este paradigma de programação mapeia bem para processadores de vetor : existe uma suposição de que cada invocação de um kernel dentro de um lote é independente, permitindo a execução paralela de dados . No entanto, as operações atômicas às vezes podem ser usadas para sincronização entre elementos (para trabalho interdependente), em alguns cenários. As invocações individuais recebem índices (em 1 ou mais dimensões) a partir dos quais o endereçamento arbitrário dos dados do buffer pode ser executado (incluindo operações de coleta de dispersão ), desde que a suposição de não sobreposição seja respeitada.

API Vulkan

A API Vulkan fornece a representação SPIR-V intermediária para descrever ambos os Shaders gráficos e Kernels de computação, de maneira independente de linguagem e máquina . A intenção é facilitar a evolução da linguagem e fornecer uma capacidade mais natural de alavancar os recursos de computação da GPU, em linha com os desenvolvimentos de hardware, como Arquitetura de Memória Unificada e Arquitetura de Sistema Heterogêneo . Isso permite uma cooperação mais próxima entre uma CPU e GPU.

Veja também

Referências