OpenCL (Open Computing Language)

DJ_PAPA

Power Member
Moving on, we have the other piece of Apple's new performance technology, the Open Computing Language (OpenCL). OpenCL is a C language for GPGPU computing, similar to CUDA and Brook+ for NVIDIA and AMD respectively. Currently CUDA and Brook+ are incompatible, both are C but the languages are different enough that programs are not portable between the two, and neither can compile for the other company's GPUs. Full GPGPU support has been notably absent from the Mac so far while CUDA and Brook+ have been supported on Windows and Linux for some time now. We have heard that Apple has wanted to add full GPGPU support to the Mac for some time now (having been one of the first companies to embrace early GPGPU usage for their video editing applications) but we have also heard that they are unhappy about the incompatibility between the GPGPU languages. They don't want to have to write two of everything, nor do they want their developers doing so. There are 3rd parties that offer GPGPU programming environments that are cross-GPU compatible, but these are expensive and not at all open in any sense of the word.

So we have OpenCL, Apple's proposed universal GPGPU programming language and API. From what we know it looks like Apple is trying to make OpenCL the GPGPU sibling of OpenGL, but like Grand Central Apple has said very little so far. We're not sure who (if anyone) else is backing OpenCL, although we expect AMD and NVIDIA to be on-board otherwise the whole effort will fall flat on its face without support from the GPU manufacturers. Apple has said it's beyond CUDA and Brook+, although we're not entirely sure in what way. From what we've seen of CUDA and Brook+, both are very powerful and very functional languages, so it's unlikely OpenCL is adding any new features that will expand what developers can do; nearly anything can already be done. Rather it seems Apple will be going the simplification route, as CUDA and Brook+ are anything but simple to program for; they may use C but they currently have many nuances that have to be dealt with. An even further generalized framework that's more open to less technical programmers may be what Apple is shooting for. But like Grand Central, we're going to be waiting some time until Apple fully explains where they're going and why.
http://www.anandtech.com/weblog/showpost.aspx?i=461


OpenCL

Another powerful Snow Leopard technology, OpenCL (Open Computing Language), makes it possible for developers to efficiently tap the vast gigaflops of computing power currently locked up in the graphics processing unit (GPU). With GPUs approaching processing speeds of a trillion operations per second, they’re capable of considerably more than just drawing pictures. OpenCL takes that power and redirects it for general-purpose computing.
http://www.apple.com/macosx/snowleopard/?sr=hotnews

Apple propoe OpenCL. Uma linguagem e API universal para o GPGPU compativel com ATI e Nvidia.
A ideia é muito interessante. Basicamente é uma especie de Direct_X mas para o GPGPU.
Em vez de tar cada uma a puxar para seu lado, se puxassem ambas para o mesmo certamente a Intel teria muito mais a temer relativamente a isto.
 
Última edição:
Isto só peca por vir tarde! (e vamos lá a ver se a AMD e a nvidia não se armam em tótós)

Parece que não aprendem com erros do passado (glide anyone?) e quem sai sempre prejudicado é o zé povinho que arrisca ficar com o que pagou obsoleto de forma inaceitável...
 
Última edição:
Mais uma vez, a Apple no seu pior (pegando em projectos dos outros, dando-lhes um novo nome, e anunciando tudo como se fosse a segunda vinda de Cristo à Terra).

Uma implementação como a que a Apple propõe nunca será tão rápida ou eficiente como o CUDA.
É um mínimo denominador comum, criado originalmente para todas as principais CPU's general purpose e longe de estar optimizado para aplicações em chips especializados em computação paralela como as GPU's.
 
Última edição:
A Apple é tão altruísta que até faz linguagens de programação para hardware que praticamente não vende :p

Enfim pode ser que ande para a frente. O essencial é a parte standard
 
Mais uma vez, a Apple no seu pior (pegando em projectos dos outros, dando-lhes um novo nome, e anunciando tudo como se fosse a segunda vinda de Cristo à Terra).

Uma implementação como a que a Apple propõe nunca será tão rápida ou eficiente como o CUDA.
É um mínimo denominador comum, criado originalmente para todas as principais CPU's general purpose e longe de estar optimizado para aplicações em chips especializados em computação paralela como as GPU's.

Eu acho que numa primeira fase o que é importante é haver uniformização neste campo... Achas que faz sentido continuar na situação actual com cuda e brook+ incompatíveis? Isso apenas lhes vai trazer uma morte prematura...

Seria interessante ver o OpenCL a criar uma layer que oferecesse um nível de programação mais elevado (oferecendo o suporte para POO por exemplo) e assim teríamos algo parecido com o D3D e OGL...

Sinceramente só espero que a proposta da m$ para uniformizar as coisas com o CPCPU não seja o único standart criado senão o pessoal do *nix e mac fica a chuchar no dedo (como já anda actualmente no que diz respeito a unified shaders com os sucessivos adiamentos do OGL 3.0)...
 
Eu acho que numa primeira fase o que é importante é haver uniformização neste campo... Achas que faz sentido continuar na situação actual com cuda e brook+ incompatíveis? Isso apenas lhes vai trazer uma morte prematura...

Seria interessante ver o OpenCL a criar uma layer que oferecesse um nível de programação mais elevado (oferecendo o suporte para POO por exemplo) e assim teríamos algo parecido com o D3D e OGL...

Sinceramente só espero que a proposta da m$ para uniformizar as coisas com o CPCPU não seja o único standart criado senão o pessoal do *nix e mac fica a chuchar no dedo (como já anda actualmente no que diz respeito a unified shaders com os sucessivos adiamentos do OGL 3.0)...

O Brook e o CUDA não são incompatíveis.
A prova é o próprio cliente Folding@Home.
Duvido muito que o Vijay Pande e a sua equipa não utilizem muitos dos mesmos componentes em ambas as versões, utilizando apenas um compilador diferente para cada arquitectura de GPU's e CPU's suportada pelo programa.
 
O Brook e o CUDA não são incompatíveis.
A prova é o próprio cliente Folding@Home.
Duvido muito que o Vijay Pande e a sua equipa não utilizem muitos dos mesmos componentes em ambas as versões, utilizando apenas um compilador diferente para cada arquitectura de GPU's e CPU's suportada pelo programa.

Isso não é verdade... Existem regras de sintaxe e de operações que são ligeiramente diferentes entre os dois! Li há tempos um artigo a explicar isso mesmo... Se o encontrar logo o posto aqui.
 
OpenCL on the Fast Track


As far as technology maturity goes, GPGPU (general-purpose computing on graphics processing units) is just a baby. But there's already an effort underway to produce an industry standard for this new programming model: OpenCL. With people still kicking the tires on NVIDIA's CUDA and AMD's Brook+ GPU programming languages, the effort to come up with a vendor-independent way to access GPUs for computing might seem premature. It isn't.

For one thing, OpenCL's ultimate purpose is broader than just GPGPU. It's real goal is to define a standard low-level API for a whole range of parallel architectures, including GPUs, multicore CPUs, the Cell processor, Larrabee, and DSPs. In fact, OpenCL stands for Open Computing Language, which is about as broad as it gets. The standard will impose some requirements on the hardware, such as the presence of floating-point support (which leaves out integer-only DSPs) and dynamic control flow (which leaves out pure SIMD processors, like ClearSpeed*). But the fact that the OpenCL working group includes the biggest players in chip making -- Intel, AMD, NVIDIA, IBM, Motorola, Texas Instruments, and others -- suggests that the standard will enjoy broad industry support.

Apple Computer initiated the work in an effort to find a way to extract computing performance out of GPUs and multicore CPUs in an architecture-independent way. In June 2008, the company turned over the project to the Khronos Group, an industry consortium that develops and maintains open standard, royalty-free APIs, primarily at the level of the hardware-software interface. Up until now, the consortium has been mostly focused in the graphics and media realms. OpenGL is perhaps the most well-known API in this regard. With OpenCL, Khronos has taken on a much more general-purpose standard.

"From the get-go OpenCL is intended to address both high-end systems, mobile and embedded devices," explains Khronos President Neil Trevett, whose day job is VP for the embedded mobile group at NVIDIA. OpenCL could certainly be welcome news for HPC developers considering a long term strategy with GPUs and other accelerators but wary about getting locked into proprietary hardware or software stacks. Trevett also sees a great deal of opportunity for OpenCL-enabled devices in the handheld space, where the next generation of GPUs and DSP can be used for mobile supercomputing.

Compute-intensive applications such as image processing, augmented reality, and location recognition are already on the drawing boards of a number of cell phone makers. The missing piece is tapping into the GPU and DSP processors for general-purpose computing. An API standard seems especially important to this market since the hardware moves very rapidly in the consumer handheld space. By establishing a foundational layer, OpenCL will help preserve software investments and enable platform independent applications and libraries to be developed.

But if OpenCL succeeds, what will become of proprietary solutions like CUDA and Brook+? Wearing his NVIDIA hat, Trevett says his company is fully supportive of the OpenCL effort and they're going to be careful not to set up CUDA as an OpenCL competitor. He says the two platforms offer essentially the same level of interface, and as far as they're concerned, the more ways the programming community is able to get to parallel processing goodness, the better it will be for all the players. AMD, likewise, was an early OpenCL advocate and is committed to supporting an implementation on its "stream computing" processors.

The presence of IBM and Intel in the OpenCL working group suggests that implementations for Cell and Larrabee, respectively, are in the works. Another OpenCL member, RapidMind, is looking forward to being able to use a common API for its parallel programming platform, which essentially offers a high-level programming environment that can be layered on top of OpenCL. According to RapidMind Chief Scientist Michael McCool, one of the nice side effects of the upcoming standard will be to establish a minimum set of requirements for processors, such that new hardware will be designed with the OpenCL specs in mind.

Version 1.0 of OpenCL is currently scheduled to be released in early December at SIGGRAPH Asia 2008 in Singapore. If they succeed, that's got to be some kind of industry spec development record -- basically from prototype to final in 6 months. I think the IEEE study group that was working on the 40/100 Gbps Ethernet standards took that long just to decide on the seating arrangement. Kidding aside, I suspect the rapid gestation of OpenCL has something to do with the members' motivation to get these standards in place and with the running start the project got from Apple.

Although the spec won't be ready in time for SC08, the Khronos groupies are presenting an OpenCL technical briefing and reception at the event on Monday, November 17, to bring people up to speed. If you're interested, check out http://www.khronos.org/news/events/detail/opencl_sc08/. Appetizers and cold beer will be provided!
http://www.hpcwire.com/blogs/OpenCL_On_the_Fast_Track_33608199.html
 
Alguém sabe de alguma implementação disto que se possa experimentar?
Não vejo nada no site da AMD, muito menos no da NVIDIA.
 
Alguém sabe de alguma implementação disto que se possa experimentar?
Não vejo nada no site da AMD, muito menos no da NVIDIA.

Implementação OpenCL? ainda nem a AMD como a nVIDIA têm suporte para tal e provavelmente só deve aparecer daqui a uns 3-4 meses (segundo uma press da AMD eles já tem a coisa +\- avançada e pode ser que saia qualquer coisa antes). No entanto a especificação já está quase concluída e já podes da uma vista de olhos no que deve ser o seu aspecto enfadonho:

http://en.wikipedia.org/wiki/OpenCL

http://www.khronos.org/opencl/

Mas será que todas as API's do khronos group têm de ser enfadonhas? O nível de abstracção é quase nulo...
 
Última edição:
Mas será que todas as API's do khronos group têm de ser enfadonhas? O nível de abstracção é quase nulo...

Obrigado pelo link, parece-me que ainda não tinha visto aquele exemplo na Wikipedia.
O nível de abstracção não é quase nulo, é o mesmo da linguagem C, tens imensas chamadas a funções naquele exemplo, o que é por definição abstracção, tal como tipos float2 que abstrai um vector bidimensional. Fica é feio com aqueles __global e __local.

Agora, sou capaz de concordar que o C não é, de longe, a linguagem mais adequada para compilar para uma GPU, nem nenhuma outra linguagem imperativa.

Mais uma vez, a Apple no seu pior (pegando em projectos dos outros, dando-lhes um novo nome, e anunciando tudo como se fosse a segunda vinda de Cristo à Terra).

Uma resposta fora de tempo a este comentário: isto é a Apple no seu melhor. A Apple, bem conhecida pelos NDAs, pelas tentativas sucessivas de pôr os outros out of business por via dos tribunais, pela adopção de soluções proprietárias e pelas técnicas de "fidelização" de clientes, aqui está muito bem a empurrar uma solução padrão sem a qual a programação de GPUs nunca iria para a frente. Programar uma GPU hoje requer muito mais tempo e especialização do que a programação normal, é extremamente dispendioso, e ninguém quer ter essa despesa e ainda por cima ficar agarrado a um só vendedor.

É um mínimo denominador comum, criado originalmente para todas as principais CPU's general purpose e longe de estar optimizado para aplicações em chips especializados em computação paralela como as GPU's.

Felizmente o muddymind postou aqui o link para aquele exemplo e podes ver que não é assim. Aquele código só se adecua a uma GPU, por um lado, por outro, também é difícil enfiar ali código de CPU, porque eu não consigo dividir um programa de CPU normal em "kernels".

Tens ali todos os elementos da programação de uma GPU, um kernel que pode ser executado paralelamente e que tem em si instruções SIMD e nem sequer tem branches. A única parte chata é, como sempre, o bit shuffle envolvido no twiddle_factor. A maior ou menor eficiêncida não depende em nada do facto de ser CUDA ou OpenCL, depende sim do algoritmo usar ou não saltos, de usar ou não os 4 elementos SIMD, do número de registos que usa cada kernel, quantos kerneis podem correr ao mesmo tempo (limitado pelo número de "threads" e número de registos).

Só se a NVIDIA fosse manhosa e fizesse um compilador de OpenCL pior do que o de CUDA de propósito é que aquilo saía menos eficiente. Ninguém é tão manhoso a esse ponto.
 
Obrigado pelo link, parece-me que ainda não tinha visto aquele exemplo na Wikipedia.
O nível de abstracção não é quase nulo, é o mesmo da linguagem C, tens imensas chamadas a funções naquele exemplo, o que é por definição abstracção, tal como tipos float2 que abstrai um vector bidimensional. Fica é feio com aqueles __global e __local.

Agora, sou capaz de concordar que o C não é, de longe, a linguagem mais adequada para compilar para uma GPU, nem nenhuma outra linguagem imperativa.

Era precisamente a essa última parte que me estava a referir... A linguagem C deve ser provavelmente a que melhor faz a ponte entre o ser fácil implementar em GPGPU e ser já muito familiar a praticamente todos os programadores. O grande problema volta-se com o género de aplicações para as quais este tipo de tecnologia vai ser destinada e aí penso que o C decididamente não é a melhor escolha...

Computação paralela com vários domínios já é suficientemente complexa para que tenhamos ainda que adaptar uma linguagem imperativa ao esquema paralelo e depois venham-se queixar que vai ser pouco o software que tira proveito total destas soluções.

A khronos infelizmente nunca foi muito boa nesse domínio e basta ver a comparação entre o OpenGL e D3D... Se não fossem as bibliotecas GLU e GLX aquilo era um verdadeiro pesadelo por termos de ir tão baixo na API...
 
A khronos infelizmente nunca foi muito boa nesse domínio e basta ver a comparação entre o OpenGL e D3D... Se não fossem as bibliotecas GLU e GLX aquilo era um verdadeiro pesadelo por termos de ir tão baixo na API...

Não sei em relação à comparação entre OpenGL e D3D...
Prefiro mil vezes o nível de abstracção do OpenGL do que coisas tipo Java3D que pretendem ensinar o programador a estruturar um programa. Para programar em Java3D tenho que estruturar a coisa em volta da framework, não há forma de usar aquilo como API. Não posso mais com frameworks, sinceramente.

A única crítica que faria ao OpenGL é a cena dos estados, tenho que estar sempre preocupado com o estado em que está o OpenGL, e o estado é complexo, tem muitos factores. Muito mais coisas deviam ser stateless no OpenGL.
 
Back
Topo