A norma OpenCL (Open Computing Language) foi impulsionada pela empresa Apple com o intuito de uniformizar a programação para dispositivos de processamento de alto desempenho que suportem execução paralela. Assim, o OpenCL tem por alvo dispositivos de processamento, sejam eles processadores multicores, placas gráficas com capacidade de processamento paralelo (GPU – Graphical Processing Unit), ou outros dispositivos de co-processamento como processadores de sinais (vulgarmente designados por DSP – Digital Signal Processors). Presentemente, a norma OpenCL está sob o controlo do Khronos Group (http:// www.khronos.org/), um consórcio que coordena normas abertas tais como a bem conhecida OpenGL (norma de programação gráfica), a variante OpenGL/ES (OpenGL para sistemas embarcados) e ainda a norma OpenAS/ES (aceleração de áudio para sistemas embarcados).
A norma OpenCL foi adotada por um vasto conjunto de grandes empresas da área da informática (AMD/ATI, NVIDIA, Intel, IBM, Samsung, Google, entre outras). Deste modo, ao contrário da plataforma CUDA (ver Introdução à Programação em CUDA, revista Programar nº 38, Dezembro 2012) que é uma plataforma proprietária que está apenas disponível para GPUs da NVIDIA, a norma OpenCL é suportada numa vasta gama de dispositivos desde as GPUs da AMD/ ATI e da NVIDIA, ao processador Cell e ainda nas mais recentes placas gráficas do tipo HD e CPUs multicore da Intel. Contudo, o suporte varia, sendo ainda poucos os dispositivos que disponibilizam a versão 1.2 da norma OpenCL publicada em Novembro de 2011 (Khronos Group OpenCL Working Group, 2012). Neste artigo introduzem-se os conceitos básicos de programação paralela na norma OpenCL, focando somente o OpenCL na perspetiva de dispositivos GPUs, dado ser esse o cenário mais comum.
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 (Application Programming Interface) para a linguagem C complementada com extensões para paralelismo. Para além do suporte direto para a linguagem C, existe ainda suporte para OpenCL noutras linguagens de programação como o C++, o Python (PyOpenCL) e o Java (Jocl.org), entre outras.
[...]