Вы находитесь на странице: 1из 10

Programaçao Paralela em GPU AMD

Rafael Martins Ferreira, Bartolomeu do Vale Oliveira


Abril 2019

Conteúdo
1 Introdução 2

2 História da GPU 3

3 A Evolução da GPU 3

4 Arquitetura da GPU 3

5 Ambientes de Programação em GPU 5

6 Arquitetura OpenCL 5
6.1 Arquitetura OpenCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
6.2 Interação no OpenCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
6.3 Modelo de Execução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
6.4 Fila de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6.5 Modelo de Memória . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

7 Linguagem OpenCL 8
7.1 Modelo de Programação em OpenCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

8 Código Comentado 9

9 Conclusão 10

10 Referências 10

1
1 Introdução
O uso da computação paralela vem sendo cada vez mais utilizado para o processamento de grandes volumes
de dados, aplicados nos problemas de diversas áreas da ciência, dentre as quais podemos citar a computação
cientifica (previsão do tempo, astrofı́sica, modelagem molecular, etc),as redes neurais e deep learning para
inteligência artificial. Assim, se faz extremamente necessária a busca pelo aumento do desempenho compu-
tacional a medida que o volume de dados a serem processados aumenta. Não menos importante, a utilização
de um bom modelo de programação também se torna necessário para viabilizar o acesso e a computação dos
dados. Empresas como a Intel e AMD melhoraram significativamente o desempenho da CPU, aumentando
o número de núcleos. No entanto, por razoes técnicas, um chip CPU contém apenas um número reduzido
de núcleos. Nos últimos anos, as GPUs tem recebido cada vez mais a atenção, já que o desempenho de
processamento de ponto flutuante por segundo (Flops , do inglês Foating-point Operations Per Second) tem
se mostrado mais eficiente do que uma CPU, além disso, o seu consumo de energia e custos são bem menores
do que aqueles dos sistemas a base de CPU. Para entender a diferença entre uma placa de vı́deo e uma
CPU basta comparar o modo em que elas processam as tarefas. Uma CPU tem alguns núcleos otimizados
para o processamento serial sequencial, enquanto uma placa de vı́deo tem uma arquitetura paralela gigan-
tesca que consiste em milhares de núcleos menores e mais eficientes criados para lidar com múltiplas tarefas
simultaneamente.

Figura 1: Diferença de Arquitetura de entre GPU e CPU

A presença maciça de computadores dotados de processadores Multicore e placas gráficas dotadas de


múltiplas unidades de processamento indica a necessidade de uma convergência dos esforços de desenvolvi-
mento de software. Tais configurações são ditas heterogêneas, dada a natureza dos recursos de processamento.
Tradicionalmente, cada tipo de recurso tem seu poder explorado por meio de técnicas e tecnologias especı́ficas
de cada um. A capacidade de processamento paralelo oferecida por processadores multicore pode ser explo-
rada pelo uso de multithreading, habilitado por tecnologias como POSIX Threads(PThreads), OpenMP,
entre outros. Por sua vez, o poder de processamento oferecido pelas GPUs vem sendo explorado através de
toolkits especı́ficos de fabricantes.
No entanto, tirar proveito dos benefı́cios da programação heterogênea não é uma tarefa simples já que
é necessário utilizar uma interface de programação padrão (API, do inglês Application Programming Inter-
face) de gráficos, além do aprendizado de linguagens de programação especı́ficas e conhecimento de diversos
paradigmas para extrair o poder computacional oferecido por estas plataformas. Modelos de programação
paralela como Compute Unified Device Architecture(CUDA) e OpenGL permitem que aplicações possam ser
desenvolvidas mais facilmente na GPU.
Esses paradigmas de programação fornecem paralelismo de dados, e também uma linguagem de baixo
nı́vel para fazer a comunicação com o hardware. Apesar da CUDA ter melhor desempenho, a OpenCL vem
experimentando um crescimento de interesse por se tratar de uma linguagem de programação aberta, com
alta aceitação e suporte por parte da comunidade de desenvolvedores.
PALAVRAS CHAVES- CUDA, OpenCL, GPU, API, Programação Paralela,CPU.

2
2 História da GPU
Anos atrás, o crescimento da velocidade dos processadores diminuiu significantemente, devido a dificuldade
de aumento de clock dos processadores, conforme previsto na lei de moore, que previa que a cada 18 meses
o poder computacional dobraria. Desde a criação da primeira CPU a única coisa em que se pensava era em
como aumentar a velocidade (em GHz) do processador, fazendo o mesmo operar a frequências cada vez mais
altas. Depois de mais de 20 anos usando essa técnica, ganhando em desempenho mais perdendo em altas
temperaturas, outras formas de potencializar os microchips surgiram, pois quanto maior era a velocidade
mais energia era necessária para manter os elevados cálculos por segundo, sendo assim, os processadores
atingiam temperaturas cada vez mais altas, exigindo dissipadores de calor maiores. Pensando nisso, em 2002,
foram criados os primeiros MULTI-CORES, que possuı́am vários núcleos em um único chip. Com isso todas
as tarefas do computador eram divididas em ambos os núcleos, fazendo com que não houvesse a necessidade
de altas frequências para obter desempenho na CPU. Isso diminuiu a temperatura dos cores e também o
consumo de energia, aumentando também a eficiência na dissipação de calor.

3 A Evolução da GPU
Seu objetivo na época da criação era gerar os gráficos que seriam mostrados nos monitores, retirando essa
carga do processador. Apesar da pouca adoção inicial, os chips gráficos continuaram evoluindo, mas realizando
apenas parte do processo gráfico, que ainda era iniciado pela CPU. Com evolução dos de chips gráficos, o
termo GPU (Graphics Processing Unit) passaria a definir placas com propósitos especı́ficos, destinadas a
assumir cada vez mais funções que antes cabiam ao processador, como a iluminação das imagens e as formas
dos objetos. Em 2001, as GPUs passaram de um pipeline de função fixa para geração de imagens para um
pipeline altamente programável, aumentando a capacidade de gerar efeitos visuais customizados através de
sombreamento programável. Em pouco tempo descobriram a grande capacidade computacional das GPUs.
Isso levou a criação sistemas heterogêneos, onde não apenas o processador principal executa as instruções, mas
as mesmas podem ser passadas para um processador gráfico executá-las de forma paralela, em um conceito
chamado de General Purposes computation on Graphics Processing Unity (GPGPU). Essa possibilidade de
programar a GPU atraiu pessoas interessadas em executar programas altamente paralelos e de propósito
geral. Essa pratica se tornou cada vez mais comum, o que fez com que em 2006 fosse criada uma GPU com
hardware explı́cito para programação de propósito geral. A primeira modificação foi a possibilidade de os
programas de sombreamento escrever em qualquer parte da memória. Antes disso, os programas só podiam
escrever em locais especı́ficos para textura da memória, o que trazia grande limitações aos programas. Com o
inı́cio da utilização da GPU para programação de proposito gerais, fabricantes perceberam o potencial desse
nicho de mercado e começaram a desenvolver facilidades tanto na arquitetura quanto na própria programação.
Esses desenvolvimentos levaram a uma grande utilização dessas placas em computação paralela a baixo custo,
já que grande parte do custo de desenvolvimento e subsidiado pelas empresas de jogos, que procuram placas
cada vez mais poderosas.

4 Arquitetura da GPU
Uma diferença importante entre as GPUs e as CPUs é que, enquanto as CPUs dedicam uma grande quantidade
de seus circuitos ao controle, a GPU foca mais em ALUs (Arith-metic Logical Units), o que as torna bem
mais eficientes em termos de custo quando executam um software paralelo. Consequentemente, a GPU é
construı́da para aplicações com demandas diferentes da CPU: cálculos paralelos grandes com mais ênfase no
throughput que na latência. Por essa razão, sua arquitetura tem progredido em uma direção diferente da
CPU. As GPUs possuem multiprocessadores com vários núcleos que aplicam a estrutura de uma instrução
para vários dados (SIMD). O uso de SIMD melhora a performance por unidade de custo, permitindo que
vários dados sejam processados de forma igual em paralelo simultaneamente. Para melhorar ainda mais a
performance, GPUs atuais utilizam uma extensão desse conceito que é única instrução e múltiplas threads
(SIMT), o que significa que a mesma instrução é executada em vários threads diferentes, ajudando a manter
o pipeline ocupado. Esse agrupamento de threads que executam a mesma instrução recebe o nome de warp.

3
Figura 2: Arquitetura de uma GPU NVIDIA

4
5 Ambientes de Programação em GPU
Uma GPU pode processar dados muitas vezes mais rápido que uma CPU. Mas claro, existem limitações.
Processamento serial é menos efetivo em GPU que em CPU. Além disso, desenvolver algoritmos para GPU
é bem mais complexo e requer um nı́vel bem mais alto de sofisticação em programação. Alguns algoritmos
simplesmente não podem ser paralelizados. Alguns sistemas mais novos permitem a utilização do melhor
dos dois mundos: processamento serial sequencial com CPU’s e processamento altamente paralelizado com
GPU’s.
Em programação explicita para CPU’s, costuma-se agrupar dados a serem utilizados próximos temporal-
mente em estruturas, de forma que quem próximos espacialmente. Por exemplo, se for feita a soma entre
dois vetores x e y, armazenando o resultado em z, cria-se um vetor de estruturas contendo o valor de x, y
e z dos elementos correspondentes. Já em programação de GPUs é aconselhável utilizar o formato original
dos vetores. Como a soma é executada em paralelo em diversos threads, essa organização permite carregar
vários elementos de um único vetor com apenas uma transferência.
Antes das ferramentas de programação explicita de GPUs, os programadores utilizavam o OpenGL .
Trata-se de uma especificação livre para a criação de gráficos, sendo muito utilizada em ambientes UNIX
e sistemas operacionais da Apple. Porém, sua metodologia de programação é complicada e fácil de gerar
erros. Existem 2 frameworks principais para programação em GPU: OpenCL (solução open-source para
programação paralela em diferentes dispositivos incluindo GPU, CPU e FPGA’s) e CUDA da NVIDIA,
que só pode ser usado em soluções da NVIDIA. Neste artigo descreveremos as principais caracterı́sticas e o
funcionamento da do paradigma OpenCL.

6 Arquitetura OpenCL
O OpenCL é uma arquitetura para escrever programas que funcionam em plataformas heterogêneas, foi
desenvolvido com a finalidade de se tornar um padrão em computação paralela heterogênea. Atualmente, os
principais fabricantes (AMD/ATI, NVIDIA, Intel, IBM, Samsung, Google, entre outras) oferecem suporte a
OpenCL, sendo que esse suporte é mais amplamente oferecido pela AMD, visto que a empresa aposta que
este modelo tende a se estabelecer como a principal ferramenta para os desenvolvedores, o que se reflete
em sua estratégia de criar soluções compatı́veis com essa tecnologia. O objetivo principal é permitir que as
aplicações desenvolvidas em OpenCL consigam tiram o máximo proveito da capacidade de processamento
das CPUs e GPUs da fabricante. (AMD,2012)
Também disponibiliza uma linguagem comum, interfaces de programação e abstrações de hardware pos-
sibilitando programadores acelerar aplicações com paralelismo de dados e paralelismo de tarefas em um
ambiente de computação heterogêneo consistindo de CPU e qualquer “dispositivo” OpenCL. O objetivo do
OpenCL é o de permitir explorar as capacidades de execução em paralelo dos dispositivos de processamento.
Para tal, a norma OpenCL define uma API para a linguagem C complementada com extensões para para-
lelismo. Para além do suporte direto para a linguagem C, existe ainda suporte para OpenCL para outras
linguagens de programação como o C++, o Python (PyOpenCL) e o Java (Jocl.org), entre outras.
Dispositivos OpenCL podem ou não compartilhar a memória com a CPU, e tipicamente tem um conjunto
de instruções de máquina diferente, para que as interfaces OpenCL assumam heterogeneidade entre o host e
qualquer dispositivo acoplado. As interfaces de programação chave providas pelo OpenCL incluem funções
para enumeração de dispositivos disponı́veis (CPUs, GPUs e outros aceleradores de vários tipos), gerenciando
“contextos” que contém os dispositivos a serem utilizados, gerenciando alocações de memória, desempenhando
transferências de dados da memória global para a do dispositivo compilando funções de programas e “kernels”
OpenCL para serem executados nos dispositivos alvo, verificando o progresso da execução e checando erros.
Na prática, aplicações OpenCL são estruturadas em uma série de camadas, como mostra a Figura 1.Kernels
correspondem às entidades que são escritas pelo desenvolvedor na linguagem OpenCL C. A aplicação faz uso
da API C do padrão para comunicar-se com a camada de plataforma (Platform Layer), enviando comandos
ao runtime, que gerencia diversos aspectos da execução.

5
Figura 3: Modelo de Camadas do OpenCL

6.1 Arquitetura OpenCL


O padrão OpenCL propõe uma arquitetura caracterizada por uma abstração de baixo nı́vel do hardware.
Dispositivos que suportam o padrão devem obedecer a semântica descrita para esta arquitetura, mapeando
suas caracterı́sticas fı́sicas a esta abstração. A arquitetura OpenCL é descrita por quatro modelos, bem como
por uma série de conceitos associados a estes. Cada modelo descreve um aspecto da arquitetura e as relações
entre os seus conceitos. Estes modelos devem ser conhecidos pelo desenvolvedor para uma exploração efetiva
das facilidades oferecidas pelo padrão, bem como dos recursos oferecidos por um determinado dispositivo que
o implementa.

6.2 Interação no OpenCL


A interação no OpenCl ocorre em um programa executado no sistema hospedeiro (host) que pode possuir
um ou mais dispositivos(devices).Já os dispositivos possuem uma ou mais unidade de computação, sendo
estas compostas de um ou mais elementos de processamento(processing elements).O hospedeiro inicia os
dispositivos, e envia operações de execução paralela aos dispositivos através do Kernel. Um kernel assume um
formato semelhante a função escrita em linguagem C, com os acréscimos de alguns modificadores especı́ficos
do OpenCL.

6.3 Modelo de Execução


O modelo de execução descreve a instanciação de kernels e a identificação das instâncias.Em OpenCL, um
kernel é executado em um espaço de ı́ndices de 1, 2 ou 3 dimensões, denominado NDRange(N-Dimensional
Range). Cada instância do kernel é denominada item de trabalho(work-item), sendo este identificado por
uma dupla/trio de ı́ndices, havendo um ı́ndice para cada dimensão do espaço de ı́ndices. Estes ı́ndices são
os identificadores globais do item de trabalho. Itens de trabalho são organizados em grupos de trabalho
(work-groups). Cada grupo de trabalho também é identificado por uma dupla/trio de ı́ndices, com um ı́ndice
para cada dimensão do espaço. Dentro de um grupo de trabalho, um item de trabalho recebe ainda outra

6
dupla/trio de ı́ndices, os quais constituem os seus identificadores locais no grupo de trabalho. A Figura 4
ilustra um NDRange de duas dimensões, dividido em quatro grupos de trabalho. Cada grupo de trabalho
contém quatro itens de trabalho. Observando-se os diferentes ı́ndices existentes, pode-se constatar que um
item de trabalho pode ser identificado individualmente de duas maneiras: 1. Por meio de seus identificadores
globais. 2. Por meio da combinação de seus identificadores locais e dos identificadores do seu grupo de
trabalho.
Os identificadores de um item de trabalho são, em geral, empregados para indexar estruturas que arma-
zenam os dados de entrada e saı́da do kernel. O espaço de ı́ndices é frequentemente dimensionado de em
função do tamanho dos conjuntos de dados a serem processados. Assim, por meio de seus identificadores,
cada item de trabalho pode ser designado responsável por um ponto ou uma parte especı́fica do resultado.
A execução de kernels em uma aplicação OpenCL só é possı́vel após a definição de um contexto(context).
Um contexto engloba um conjunto de dispositivos e kernels, além de outras estruturas necessárias para a
operação da aplicação, como filas de comandos, objetos de programa e objetos de memória.

04-02.jpg

Figura 4: Modelo de Execução

6.4 Fila de Comandos


Apos a criação de um contexto,e para serem executados, os kernels são submetidos a fila de comando(command
queues), de cada dispositivo a ser utilizado, sendo que cada dispositivo possui sua própria fila de comandos
Esta função recebe o identificador do contexto e um identificador do dispositivo. O terceiro parâmetro são
as especificações da fila de comandos propriamente dita. Além dos comandos de execução de kernel, exis-
tem comando de leitura e escrita de dados na memória do dispositivo, além de comandos de sincronização.
Os comandos de sincronização são importantes pelo fato de que, uma fila de comandos executa na ordem
em que recebe os comandos, mas ao termino do processamento não há garantias de ordenação, visto que
comandos diferentes tem tempos diferentes de execução. Para garantir a execução correta da aplicação e
a consistência da informação, deve-se executar algum tipo de sincronização no host. Já os comandos de
leitura e escrita na memoria utilizam objetos de memória (memory objects) para a comunicação. Existem
duas categorias de objeto de memoria: buffers e imagens.Os Buffers são equivalentes aos arrays na lingua-
gem de programação,sendo acesiveis por ı́ndices ou ponteiros. As imagens são objetos especiais, alocados na
memória dedicada e seus elementos são acessados por meio de objetos especiais denominados samplers. Os
Kernels são criados a partir de objetos de programa (program objects). Um objeto de programa encapsula
o código fonte de um ou mais kernels, sendo identificados no código fonte pela palavra kernel . De acordo
com o número de dispositivos presentes no contexto em que o objeto de programa se encontra, o objeto de
programa pode encapsular uma ou mais representações binarias do código. Kernels pode ser executados de
dois modos distintos:
• Paralelismo de dados(data parallel): são instanciados múltiplos itens de trabalho para a execução do
kernel. Esse modo é o modo principal de uso do OpenCL.

7
• Paralelismo de tarefas(task parallel): Um único item de trabalho é instanciado para a execução do
kernel. Isto permite a execução de múltiplos kernels diferentes sobre um mesmo conjunto de dados, ou
sobre conjuntos de dados distintos.

6.5 Modelo de Memória


O OpenCL possui quatro tipos diferentes de memória: memória global, memória de constantes, memória
local e memória privada. Na Figura 5 temos a ilustração do manual do OpenCL sobre os tipos de memória
existentes. A memória global e a memória de constantes são utilizadas livremente por todos os work-items
em todos os work-groups. É responsabilidade de a aplicação alocar e preencher os dados previamente para
a utilização dos work-items. Nas GPUs, no entanto, as memórias globais e de constantes são consideradas
lentas. A memória local é utilizada pelos work- items de um a única unidade de computação , no entanto o
host não possui acesso à mesma. Nas GPUs, normalmente, esta memória é menor e mais rápida do que as
memórias globais e de constantes. Como se trata de um recurso escasso e de alta velocidade, a maximização
do uso da memória local é um importante fator para a definição do tamanho dos work-groups. A memória
privada é utilizada exclusivamente por cada work-item, sendo também considerada rápida e inacessı́vel à
aplicação no host. A aplicação utiliza a API OpenCL para criar, ler, escrever e apagar as memórias globais e
de constantes, que estão inacessı́veis de outro modo. Existem extensões à API OpenCL que permitem acesso
direto à memória em determinados casos, como por exemplo, quando a aplicação está utilizando a CPU como
dispositivo.

Figura 5: Regiões de Memória de OpenCL

7 Linguagem OpenCL
7.1 Modelo de Programação em OpenCL
O OpenCL possui uma linguagem própria, baseada no C99, e dois modelos de programação, com dados
paralelos, mais comum, e com tarefas paralelas.Um detalhe interessante é que a compilação do código OpenCL
é feito em tempo de execução da aplicação no host, ou seja, o código fonte é passado à biblioteca, que
deve compilá-lo antes de enviar o código objeto ao dispositivo. Isto permite que a aplicação seja capaz de
executar em diferentes dispositivos sem a necessidade de recompilarão ou conhecimento prévio do modelo
do dispositivo. A linguagem de programação do OpenCL é derivada da linguagem C99, mas com algumas
extensões para suportara sua arquitetura. À linguagem C99, foram acrescidos novos tipos de dados, escalares
e vetoriais, e novas palavras reservadas, para qualificar tipo e o controle de acesso à memória e para qualificar
as funções. Dos tipos de dados da linguagem C99, a linguagem OpenCL não suporta os tipos long long e

8
long double, porém fornece mais 19 tipos de dados, escalares e vetoriais. Na Tabela1 estão os novos tipos de
dados suportados pelo OpenCL.

Tabela 1: Tabela de correspondencias Linguagem OpenCL


TIPO DESCRIÇAO
uchar O mesmo que unsigned char.
ushort O mesmo que unsigned short.
uint Mesmo que unsigned int.
ulong Mesmo que unsigned long.
half Numero de Ponto Flutuante de 16 bits.
charn Um vetor de n números inteiros de 8 bits com sinal.
ucharn Um vetor de n números inteiros de 8 bits sem sinal.
shortn Um vetor de n números inteiros de 16 bits com sinal.
ushortn Um vetor de n números inteiros de 16 bits sem sinal.
intn Um vetor de n números inteiros de 32 bits com sinal
uintn Um vetor de n números inteiros de 32 bits sem sinal.
longn Um vetor de n números inteiros de 64 bits com sinal.
ulongn Um vetor de n números inteiros de 64 bits sem sinal.
floatn Um vetor de n números de ponto flutuante de 32 bits.
doublen Um vetor de n números de ponto flutuante de 64 bits.
image2d t Um objeto do tipo imagem 2D.
image3d t Um objeto do tipo imagem 3D.
sampler t Um objeto do tipo sampler.
event t Um Objeto do tipo evento.

Os tipos vetoriais podem ter tamanho de 2, 3, 4, 8 ou 16 números. Por exemplo, existem tipos como
double2, float3, uint4, ulong8 e char16. As novas palavras reservadas da linguagem OpenCL são utilizadas
para tratar as questões especı́ficas da arquitetura do OpenCL e seus modelos de memória. Na Tabela 2 estão
os qualificadores desta linguagem. Existem algumas limitações na linguagem. Os kernels só podem receber
ponteiros global, constant ou local,não podem receber ponteiros para ponteiros , não podem receber um
event t e só podem retornar void. Não são suportados: recursão, bitfields, ponteiros para funções, vetores
sem tamanho definido,macros e funções com número indefinido de parâmetros (com reticências) e as palavras
reservadas extern, static,auto e register.

QUALIFICADOR DESCRIÇÃO •
global ou global Indica que o objeto de memória (buffer ou imagem) está armazenado na memoria global do
local ou local Indica que a variável está armazenada na memoria local do dispositivo e é visı́vel por todos
constante ou constante Indica que a variável está armazenada na memória de constantes do dispositivo
private ou private Indica que a varivel está armazenada na memoria privada do dispositivo e só é visı́vel pelo p
kernel ou kernel Indica que a função pode se transformar em um kernel e ser executada pelo host através da
read only ou read only Indica que o objeto imagem foi passado como somente litura. Não é possı́vel, pelo padrão, l
write only ou write only Indica que o objeto imagem foi passado como somente escrita.Não é possı́vel,pelo padrão,ler

8 Código Comentado
1 # include
2 using namespace std ;
3 int main ()
4 {
5 /* comentario */
6 int n , i , a = 0 , b = 1 , F ;
7 cout << " Digite o numero de termos da sequencia de Fibonacci : " ;

9
8 cin >> n ;
9 cout << a << " " << b << " " ;
10 for ( i = 0; i < n - 2; i ++) {
11 F = a + b;
12 cout << F << " " ;
13 a = b;
14 b = F;
15 } cout << endl ; return 0;
16 }

[?]
9 Conclusão
Este trabalho introduziu os conceitos-chave do padrão OpenCL, explorando a arquitetura definida no mesmo
e apresentando um exemplo prático. Mostrou a importância do OpenCL e a utilização da GPU não somente
para a renderização no desenvolvimento de jogos de computadores, mas também para implementação de
algoritmos para computaçao heterogenea, em area que demanden a necessidade de processamento de um
grande volume de dados, tais como a fı́sica, inteligência artificial, climatologia, entre outros.
Os principais fabricantes de GPUs,NVIDIA e AMD/ATI, já oferecem amplo suporte. A AMD/ATI
adotou OpenCL como ferramenta oficial para desenvolvimento em ambientes heterogêneos equipados com
processadores AMD e placas gráficas ATI Radeon. Na mı́dia especializada, já circulam notı́cias sobre a
implementação de suporte a OpenCL por parte de fabricantes de chips para dispositivos móveis, como
smartphones.O objetivo do padrao openCL é unificar,em um unico paradigma e conjunto de ferramentas, o
desenvolvimento de soluçoes para computaçao paralela em diversos dispositivos e de naturezas distintas.
O padrão tem se mostrado uma alternativa viável às linguagens e ferramentas especı́ficas de fabricante e
uma crescente adoção vem sendo observada.Com o desenvolvimento do OpenCL,motivado pela necessidade
de padronizaçao para o desenvolvimento de aplicaçaoes em computaçao heterogenea de alta perfomance.

10 Referências

10

Вам также может понравиться