Tutoriais Blockly OpenCL

Uma ferramenta baseada em Linguagem de Programação visual para programação paralela em OpenCL

Peyto Lake
Train
T-Shirt Store
Mountain

Introdução

A ferramenta Blockly OpenCL foi produzida no intuito de facilitar o desenvolvimento de programas com o paradigma de programação paralela, possibilitando a usuários com pouco conhecimento na linguagem OpenCL o desenvolvimento de tais programas, simplesmente arrastando blocos de maneira lógica. Os blocos foram produzidos seguindo a documentação OpenCL API 1.1 Quick Reference disponível no site do Khronos Group mantenedora do OpenCL, ou seja, os blocos foram produzidos para gerar códigos em OpenCL seguindo tais parâmetros de entrada e de restrições. Devido a uma questão de compatibilidade, foi escolhido gerar os códigos em OpenCL na versão 1.1 que segue o padrão ISO C99 e com a linguagem C++.

A interface de desenvolvimento Blockly OpenCL Tem em sua estrutura um menu com os blocos divididos em categorias, e abas; na primeira aba é possível encontrar os blocos que foram arrastados e montados, é possivel encontrar botões com opções de controle para o zoom e também o botão de apagar o projeto. na segunda aba é possível encontrar o código gerado em OpenCL no formato CPP que define o "host" e na terceira aba é possível encontrar os códigos do Kernel que são as funções que serão executadas nos dispositivos de processamento paralelo, CPUS, e GPUS, na quarta e última aba é possível observar os códigos em xml, que possibilita salvar o projeto dos blocos, assim é necessário apenas copiar e salvar o código xml, e recolocá-lo no ambiente para recomeçar de onde parou. Foi adicionado a ferramenta uma opção de segurança, para que ao tentar fechar a aba do navegador em que está aberta o Blockly OpenCL aparece uma janela alertando o usuario do perigo de fechar a aba sem salvar o projeto, seja exportando os códigos nas abas da linguagem ou o xml que definem os blocos utilizados na área de desenvolvimento.

Configurando o Ambiente OpenCL

Para configurar o ambiente de desenvolvimento para programação paralela em OpenCL, é necessário fazer o download de alguns arquivos, que dependerão das plataformas ou marcas da sua CPU e/ou GPU e do seu sistema operacional. Esse tutorial está dividido em duas seções principais, que são os sistemas operacionais e em subseções de acordo com a marca dos seus dispositivos. Neste tutorial indicamos o uso da IDE Eclipse e do compilador GCC.

Obs.: O OpenCL tem compatibilidade com um grande número de dispositivos e sistemas operacionais. Este tutorial se restringe aos sistemas operacionais Windows 10 e o Ubuntu 15.10 e aos dispositivos das marcas Nvidia, Intel e AMD.

Windows

  1. Instalando a IDE Eclipse
  2. A IDE Eclipse Mars para desenvolvedores C/C++ que pode ser baixado através desse link. (177mb)

    O eclipse não precisa ser instalado, você precisa apenas descompactar em uma pasta do seu desejo, indicamos descompactar na unidade C. Para executar o programa, você precisa abrir o arquivo “eclipse.exe” (sem aspas).

  3. Instalando o compilador GCC
  4. O compilador GCC pode ser baixado através desse link . durante a instalação é possível obter apenas o compilador desejado, marcando a opção mingw32-gcc-g++, depois de selecionado selecione a opção instalação no menu superior a esquerda e selecione “Apply Changes”

    Tela de instalação do mingw
    Figura 1 Tela de instalação do mingw

  5. Configuração das variáveis de ambiente
  6. Após o fim da instalação é necessário configurar as variáveis de ambiente do sistema operacional, para isso você pode clicar nas teclas de atalhos bandeira + pause como se pode ver na janela com a borda azul, seleciona configurações avançadas do sistema[opção circulada com a cor laranja], irá aparecer uma nova janela, na aba avançado selecione a opção variáveis do ambiente[opção com destaque amarelo], procure a variável com o nome path [opção com borda na cor verde], selecione-a e clique em editar, aparecerá uma nova janela, clique em novo e adicione o caminho para o mingw (geralmente em C:MinGWbin). Você pode conferir um tutorial mais detalhado nesse link.

    Tela com passos para configuração da variável de ambiente
    Figura 2 Tela com passos para configuração da variável de ambiente

    Obs.: Você pode utilizar a IDE e o Compilador C/C++ que lhe convir.

Instalando o OpenCL no Windows 10

Dispositivos Intel

Você poderá baixar o SDK da Intel no link, verifique a compatibilidade do seu dispositivo antes de fazer o download. (246mb)

Após a conclusão do download, é possível iniciar a instalação do arquivo, instale o SDK seguindo os passos durante a instalação, não é necessária qualquer configuração avançada ou mudanças. Vale salientar que ao fim das instalações será necessário reiniciar o sistema operacional de seu computador.

Dispositivos AMD

Você poderá baixar o SDK da AMD no link. (166mb)

Após a conclusão do download, é possível iniciar a instalação do arquivo, instale o SDK seguindo os passos durante a instalação, não é necessária qualquer configuração avançada ou mudanças. Vale salientar que ao fim das instalações será necessário reiniciar o sistema operacional de seu computador.

Para testar se o SDK funcionou, você deve, após a reinicialização do sistema operacional, abrir o terminal do Windows utilizando os atalhos bandeira + r e digitar cmd. Após abrir o terminal digite o comando clinfo, e será mostrado as informações completas do OpenCL para seu computador.

Dispositivos Nvidia

Para os dispositivos da Nvidia, o SDK é instalado juntamente com os drivers do dispositivo. Verifique se seus drivers estão atualizados acessando esse link. (Tamanho do arquivo depende do modelo)

Em alguns casos é necessário fazer o download do CUDA Toolkit acessando esse link. (964mb)

Após a conclusão do download, é possível iniciar a instalação de ambos os arquivos, instale primeiro o driver e em seguida o CUDA Toolkit. Vale salientar que ao fim das instalações será necessário reiniciar o sistema operacional de seu computador.

Configurando a IDE

Para que você possa utilizar o programa desenvolvido diretamente na IDE, é necessário configurar as variáveis de ambiente da IDE, para que possa identificar os arquivos “includes” e “Libraries” pertinentes ao OpenCL.

  1. Crie um novo Projeto C ou C++ no Eclipse, clicando no menu File > New C++ ou C Project. Como é possível observar na imagem a baixo.

    Criação do projeto no eclipse
    Figura 3 Tela de Criação de Projeto na IDE Eclipse

  2. Nomeie o projeto, selecione o compilador mingw GCC e aperte em Finish

    Confirmação da criação do Prjeto
    Figura 4 Tela de confirmação da criação do Projeto na IDE Eclipse

  3. O projeto está criado, precisamos agora configurar os “Includes” e as “Libraries”

  4. Clique com o botão direito sobre o diretório do projeto, localizado do lado esquerdo da tela, depois clique na opção “properties”, último elemento da lista. Como é possível ver na imagem.

    propriedades do projeto
    Figura 5 Tela de acesso as propriedades do projeto

  5. Agora aparecerá uma janela com as configurações, estenda o menu “C/C++ Build” (marcado de amarelo), clique na opção “Settings” (marcado de laranja), clique na opção “Includes” (na cor azul), clique no ícone com o documento e um sinal de mais (apontado pela seta azul).

    Configuração do projeto includes e libraries
    Figura 6 Tela de configuração dos includes e das libraries em OpenCL

  6. O endereço da variável a ser colocada, irá depender do sdk instalado, caso seja:

    1. AMD: o endereço é geralmente ”C:\Program Files (x86)\AMD APP SDK\3.0\include\” (sem aspas);

    2. Nvidia: O endereço é geralmente “C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include\” (sem aspas);

    3. Intel: O endereço é geralmente “C:\Program Files (x86)\Intel\OpenCL SDK\include\” (sem aspas).

  7. Obs. Use esses endereços como base, pode mudar de computador para computador.

  8. Para configurar as “Libraries” clique na opção “Libraries” marcada na cor verde na imagem a baixo, clique no ícone com o documento e um sinal de mais (marcado com a seta azul) e digite o nome “OpenCL”, clique no ícone de documento com o sinal de mais (marcado pela seta verde) e coloque o endereço respectivo do SDK instalado.

    1. AMD: o endereço é geralmente ” C:\Program Files (x86)\AMD APP SDK\3.0\lib\x86_64” (sem aspas);

    2. Nvidia: O endereço é geralmente “C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64” (sem aspas);

    3. Intel: O endereço é geralmente “C:\Program Files (x86)\Intel\OpenCL SDK\lib” (sem aspas).

    Configuração do projeto das libraries
    Figura 6 Tela de definição das libraries em OpenCL

A partir de agora você poderá desenvolver seus programas em OpenCL pela IDE, ou gerando os códigos através do Blockly OpenCL e exportando-o para a IDE, e executá-lo.

Linux

Configurando o Ambiente OpenCL

Para configurar o ambiente de desenvolvimento para programação paralela em OpenCL, é necessário fazer o download de alguns arquivos, que dependerão das plataformas ou marcas da sua CPU e/ou GPU e do seu sistema operacional. Esse tutorial está dividido em duas seções principais, que são os sistemas operacionais e em subseções de acordo com a marca dos seus dispositivos. Neste tutorial indicamos o uso da IDE Eclipse e do compilador GCC.

Obs.: O OpenCL tem compatibilidade com um grande número de dispositivos e sistemas operacionais. Este tutorial se restringe aos sistemas operacionais Windows 10 e o Ubuntu 15.10 e aos dispositivos das marcas Nvidia, Intel e AMD.

Linux 15.10

Antes de iniciarmos a configuração de ambiente para o OpenCl, indicamos realizar as atualizações do sistema, para isso siga os seguintes passos.

  • Abra o terminal e digite a seguinte linha de comando sudo apt-get update. Digite sua senha e aguarde o término da atualização.
  • Ainda no terminal, digite a seguinte linha de comando sudo apt-get upgrade. Digite sua senha e aguarde o término da atualização.

  1. Instalando a IDE Eclipse
  2. A IDE Eclipse Mars para desenvolvedores C/C++ que pode ser baixado através desse link. (183mb) Selecione a opção Eclipse IDE for C/C++ Developers, escolha a versão 32bits ou 64bis de acordo com o seu sistema operacional e selecione a opção Download.

    O eclipse não precisa ser instalado, você precisa apenas descompactar em uma pasta do seu desejo, indicamos descompactar /home/user, onde você deve substituir o nome user pelo que estiver no seu sistema operacional. Para executar o programa, você precisa abrir o arquivo “eclipse” (sem aspas).

  3. Instalando o compilador GCC
  4. O compilador GCC pode ser instalado através de algumas opções:

    • A primeira opção é através do terminal, digitando o comando sudo apt-get install gcc
    • A segunda opção é através do programa Central de programas do Ubunto, onde ao pesquisar o termo gcc você pode instalar a opção "compliador C da GNU".

    Tela de instalação do GCC
    Figura 13 Tela de instalação do GCC

    Obs.: Você pode utilizar a IDE e o Compilador C/C++ que lhe convir.

Instalando OpenCL no Linux 15.10

Dispositivos Intel

Para facilitar na hora de encontrar os arquivos, que fazem parte do arquivo header do OpenCL, siga esses passos:

$ sudo mkdir CL
$ cd CL
$ sudo wget http://www.khronos.org/registry/cl/api/1.2/cl_d3d10.h \
http://www.khronos.org/registry/cl/api/1.2/cl_d3d11.h \
http://www.khronos.org/registry/cl/api/1.2/cl_dx9_media_sharing.h \
http://www.khronos.org/registry/cl/api/1.2/cl_ext.h \
http://www.khronos.org/registry/cl/api/1.2/cl_gl_ext.h \
http://www.khronos.org/registry/cl/api/1.2/cl_gl.h \
http://www.khronos.org/registry/cl/api/1.2/cl.h \
http://www.khronos.org/registry/cl/api/1.2/cl_platform.h \
http://www.khronos.org/registry/cl/api/1.2/opencl.h \
http://www.khronos.org/registry/cl/api/1.2/cl.hpp ;
                        

Você poderá baixar o SDK da Intel no link, verifique a compatibilidade do seu dispositivo antes de fazer o download. (178mb)

Após o download do arquivo, você precisará extrair o arquivo, pelo terminal siga para a pasta para onde foi destinado o download, através do comando:

$ tar zxvf intel_sdk_for_opencl_2016_ubuntu_6.0.0.1049_x64.tgz

Agora será necessário converter os arquivos RPM em arquivos deb, com os passos a seguir

$ cd intel_sdk_for_opencl_2016_ubuntu_6.0.0.1049_x64
$ sudo apt-get install libnuma1
$ cd rpm
$ sudo alien *.rpm
$ sudo dpkg -i *.deb
$ sudo ./install_gui.sh

Para copiar as libraries para um local mais acessível, usaremos o seguinte comando:

  • Para sistemas 64bits:
    $ sudo mkdir /usr/lib64/OpenCL/vendors/intel/
    $ sudo cp /usr/lib64/libOpenCL.so /usr/lib64/OpenCL/vendors/intel/
    $ echo "/usr/lib64/OpenCL/vendors/intel" > /etc/ld.so.conf.d/opencl-vendor-intel.conf
                                        
  • Para sistemas 32bists:
    $ sudo mkdir /usr/lib64/OpenCL/vendors/intel/
    $ sudo cp /usr/lib/libOpenCL.so /usr/lib/OpenCL/vendors/intel
    $ echo "/usr/lib/OpenCL/vendors/intel" > /etc/ld.so.conf.d/opencl-vendor-intel.conf
                                        

Para finalizar é necessario apenas digitar o comando:

$ sudo ldconfig

Ao fim de todo o processo faça uma atualização através do comando:

$ sudo apt-get update

Dispositivos AMD

Você poderá baixar o SDK da AMD no link. (196mb)

Após a conclusão do download, é possível iniciar a instalação do arquivo, seguindo os seguintes comandos:

$ cd Downloads
$ sudo ./AMD-APP-SDK-v3.0.130.136-GA-linux64.sh

instale o SDK seguindo os passos durante a instalação, não é necessária qualquer configuração avançada ou mudanças. Vale salientar que ao fim das instalações será necessário reiniciar o sistema operacional de seu computador.

Para facilitar o acesso aos arquivos mudaremos o diretório das libraries de local, com o seguinte comando:

  • Para sistemas 64bits
    $ mkdir -p /usr/lib64/OpenCL/vendors/amd/
    $ mv lib/x86_64/* /usr/lib64/OpenCL/vendors/amd/
  • Para sistemas 32bits
    $ mkdir -p /usr/lib/OpenCL/vendors/amd/
    $ mv lib/x86/* /usr/lib/OpenCL/vendors/amd/

Ao fim de todo o processo faça uma atualização através do comando:

$ sudo apt-get update

Para testar se o SDK funcionou, você deve, após a reinicialização do sistema operacional, abrir o terminal e digitar o comando clinfo, e será mostrado as informações completas do OpenCL para seu computador.

Dispositivos Nvidia

Para os dispositivos da Nvidia, o SDK é instalado juntamente com os drivers do dispositivo juntamente com o CUDA. Verifique se seus drivers estão atualizados.

Em alguns casos é necessário fazer o download do CUDA Toolkit acessando esse link. (1.9gb)

Após a conclusão do download, é possível iniciar a instalação do arquivo, instale o CUDA Toolkit seguindo os comandos a baixo:

$ sudo dpkg -i cuda-repo-ubuntu1504-7-5-local_7.5-18_amd64.deb
$ sudo apt-get update
$ sudo apt-get install cuda
                        
Vale salientar que ao fim das instalações será necessário reiniciar o sistema operacional de seu computador. A nividia disponibiliza um guia mais detalhado de instalação do sdk OpenCL para linux através do link

Os tutoriais de instalação do SDK para o linux tiveram como base os tutoriais do Stream Computing e do orbigo.net

Criação de Blocos para a ferramenta Blockly OpenCL

Com intuito de tornar a ferramenta Blockly OpenCL mais completa, esse tutorial objetiva apresentar como é criado novos blocos para adicionar a ferramenta, assim será possível você criar blocos para objetivos mais específicos e que não foram implementados.

OBS: Sugerimos que os novos blocos implementados, mesmo que para objetivos mais específicos, sejam implementados de maneira genérica.

Esse tutorial restringe-se a apresentar a criação de blocos para a ferramenta Blockly OpenCL, ou seja, outras ferramentas baseadas em blocos que utilizem a API Google Blockly, podem apresentar estruturas diferentes.

  1. A criação de Blocos
  2. A criação de blocos é feita através do Block Factory, uma ferramenta disponibilizada pela API Google Blockly. Que oferece uma interface amigável disponibilizando a criação de blocos com o mesmo paradigma, arrastando blocos.

    1. A ferramenta é dividida em quatro partes
      1. A primeira é a de montagem dos blocos
      2. A segunda é a pré-visualização do bloco produzido em tempo real
      3. A terceira é a parte “Language Code” os códigos gerados para descrição dos blocos
      4. iv. O “Generator Stub” é para geração do código na linguagem desejada, no caso OpenCL
      Interface do Block Factory
      Figura 8 Interface do Block Factory

    No quadro de desenvolvimento dos blocos, é possível observar um menu com quatro categorias de blocos possíveis para a personalização, são elas: Input, Field, Type e Colour

    Na categoria Input é possível definir o tipo de formato que o bloco vai possuir, podendo ser do tipo “Value Input”, Statement Input”, “Dummy Input”. Cada tipo oferece recursos diferentes e configurações especificas além de configuração de cor, e restrições que são detalhadas a baixo.

    blocos da Categoria input
    Figura 8 Interface do Block Factory - blocos da Categoria input
    1. O “Value input” define o bloco com encaixe simples, que podem ser apenas encaixe interno ou externo e pode-se definir as restrições dos tipos de blocos que podem ser conectados. Foi adicionado um campo texto e a cor, Como você pode ver no exemplo a baixo

      value Input

    2. O “Statement Input” define o bloco com o tipo de encaixe mais complexo, que permite mais tipos de conexões, como você pode ver no exemplo a baixo.

      statement Input

    3. O “Dummy Input” define o bloco mais simples sem possibilidades de encaixe externo, ele apenas pode se conectar com blocos ligados a cima ou a baixo.

      dummy Input

    As outras categorias oferecem Opções de campos, cores e tipos para restrições e especificações dos tipos mostrados anteriormente.

  3. Gerando os códigos
  4. Para inserir o código da linguagem desejada, no caso OpenCL é necessário editar o código do campo “Generator Stub” como no exemplo a seguir.

                                    Blockly.JavaScript['cl_uchar'] = function (block) {
                                        var variable_cl_uchar = Blockly.JavaScript.variableDB_.getName(block.getFieldValue('cl_uchar'), Blockly.Variables.NAME_TYPE);
                                        var value_name = Blockly.JavaScript.valueToCode(block, 'cl_uchar', Blockly.JavaScript.ORDER_ATOMIC);
                                        // TODO: Assemble JavaScript into code variable.
                                        var code = 'cl_uchar ' + variable_cl_uchar + ' = ' + value_name + ';\n';
                                        return code;
                                    };
                                

    No exemplo a cima é mostrado o código de um bloco que define uma variável do tipo cl_uchar, na variável a cima denominada var code, onde retorna a string cl_uchar que é a definição do tipo da variável, adiciona o nome da variável definina no bloco e atribuída variable_cl_uchar e o valor do bloco de ligação externa atribuída a variável value name

  5. Exportando os códigos para a ferramenta Blockly OpenCL
  6. Para exportar os blocos gerados pela ferramenta Block Factory você precisa seguir os dois passos a seguir:

    1. a. Copiar os códigos do campo “Language code” para o arquivo “blocks.js” localizado no diretório “js” da ferramenta Blockly OpenCL

    2. É necessário copiar os códigos do campo “Generator Stub” para o arquivo “OpenCL.js” localizado no diretório “js” da ferramenta Blockly OpenCL.

Utilizando o Ambiente de Desenvolvimento Blockly OpenCL

Um dos exemplos mais comuns de aplicações paralelas é a soma de matrizes, por isso utiliazamos um conjunto de blocos que automaticamente geram um código para o host e para o kernel, necessitando apenas modificar algumas informações nos blocos como seletor de dispositivos e informações sobre as caracteristicas da matriz a ser gerada.

  1. Os Blocos Utilizados
  2. Para este exemplo foram necessários 10 blocos. veja a descrição deles a seguir:

    • O Bloco start define no host todas as informações do cabeçalho necessárias em arquivos de programa em C++.

      bloco start
      Figura 14 Bloco Start

      Gera o seguinte código no host

      #define _CRT_SECURE_NO_WARNINGS
      #define PROGRAM_FILE "matvec.cl"
      #define KERNEL_FUNC "main"
      #include stdio.h
      #include stdlib.h
      #include sys/types.h>
      #ifdef __APPLE__
      #include OpenCL/opencl.h>
      #else
      #include CL/cl.h
      #endif
    • O Bloco main define no host e no kernel o código principal para iniciar a execução do programa.

      bloco start
      Figura 14 Bloco Start

      Gera o seguinte código no host

      void imprime_matriz(int *matriz, int height, int width) {
         for (int i = 0; i < height; i++) {
         	for (int j = 0; j < width; j++) {
         		printf("%d ", matriz[j + width * i]);
         	}
         	printf("\n");
         }
      }
      
      int main() {
      return 0;
      }

      Gera o seguinte código no Kernel

      __kernel void main(__global int* matrizA,
                            __global int* matrizB,
                            __global int* matrizC) {
      
         int valor;
         int gid = get_global_id(0);
         unsigned long int seed = (unsigned long int)( (gid + 1111) * (gid + 1011) * (gid + 1010)) ;
      
      
      
      }

Leitura Recomendada

Você chegou ao fim dos tutoriais em nossa página e está pronto para ir adiante nos estudos em Programação paralela. Por isso separamos alguns livros, além da leitura da especificação do OpenCL, disponivel através do site do khronos Group que serão úteis no seu caminho de estudos em Programação Paralela com OpenCL.

Brand Titulo: Heterogeneous Computing with OpenCL
Heterogeneous Computing with OpenCL

Autores: Gaster, Benedict and Howes, Lee and Kaeli, David R and Mistry, Perhaad and Schaa, Dana

Refência: Gaster, Benedict, et al. Heterogeneous Computing with OpenCL: Revised OpenCL 1. Newnes, 2012.

Mais Informações

Paperback: 296 pages;
Publisher: Morgan Kaufmann; 1 edition (August 31, 2011)
Language: English;
ISBN-10: 0123877660;
ISBN-13: 978-0123877666


Comprar
Brand Titulo: Programming Massively Parallel Processors, Second Edition: A Hands-on Approach 2nd Edition
Programming massively parallel processors

Autores: Kirk, David B and Wen-mei, W Hwu

Refência: Kirk, David B., and W. Hwu Wen-mei. Programming massively parallel processors: a hands-on approach. Newnes, 2012.

Mais Informações

Paperback: 514 pages;
Publisher: Morgan Kaufmann; 2 edition (December 28, 2012)
Language: English;
ISBN-10: 0124159923;
ISBN-13: 978-0124159921


Comprar
Brand Titulo: OpenCL Programming by Example
OpenCL Programming by Example

Autores: Banger, Ravishekhar and Bhattacharyya, Koushik

Refência: Banger, Ravishekhar, and Koushik Bhattacharyya. OpenCL Programming by Example. Packt Publishing Ltd, 2013.

Mais Informações

Paperback: 304 pages;
Publisher: Packt Publishing (December 23, 2013)
Language: English;
ISBN-10: 1849692343;
ISBN-13: 978-1849692342


Comprar
Brand Titulo: OpenCL Parallel Programming Development Cookbook
OpenCL Parallel Programming Development Cookbook

Autores: Tay, Raymond

Refência: Tay, Raymond. OpenCL Parallel Programming Development Cookbook. Packt Publishing Ltd, 2013.

Mais Informações

Paperback: 302 pages;
Publisher: Packt Publishing (August 26, 2013)
Language: English;
ISBN-10: 1849694524;
ISBN-13: 978-1849694520


Comprar
Brand Titulo: OpenCL in Action: How to Accelerate Graphics and Computations
OpenCL in Action: How to Accelerate Graphics and Computations

Autores: Scarpino, Matthew

Refência: Scarpino, Matthew. "Opencl in Action: How to Accelerate Graphics and Computation. NY." (2012).

Mais Informações

Paperback: 456 pages;
Publisher: Manning Publications; 1 edition (November 20, 2011)
Language: English;
ISBN-10: 1617290173;
ISBN-13: 978-1617290176


Comprar
Brand Titulo: OpenCL Programming Guide
OpenCL Programming Guide

Autores: Munshi, Aaftab and Gaster, Benedict and Mattson, Timothy G and Ginsburg, Dan

Refência: Munshi, Aaftab, et al. OpenCL programming guide. Pearson Education, 2011.

Mais Informações

Paperback: 648 pages;
Publisher: Addison-Wesley Professional; 1 edition (July 23, 2011)
Language: English;
ISBN-10: 0321749642;
ISBN-13: 978-0321749642


Comprar