BT

LINQ na GPU com Brahma

por Abel Avram , traduzido por Andrew Kurauchi em 06 Mai 2010 |

Brahma é uma biblioteca C# open source que oferece suporte a computações paralelas rodando em uma variedade de processadores. Atualmente o Brahma possui um GPU provider, mas a sua estrutura modular permite a utilização de deferentes providers para outros tipos de processadores. Um método C# pode conter comandos rodando tanto na CPU quanto na GPU sem código adicional.

O Brahma realiza computações paralelas transformando comandos LINQ em programas que rodam no processador escolhido. O programa gerado contém comandos HLSL (High Level Shading Language) ou GLSL (OpenGL Shading Language) se a plataforma escolhida foi o DirectX ou o OpenGL, respectivamente. Para aumento de performance, as queries LINQ são compiladas apenas uma vez e usadas muitas vezes conforme a necessidade.

O seguinte código multiplica os valores em um array por 2 em paralelo:

// Cria o computation provider
var computationProvider = new ComputationProvider();

// Cria um data-parallel array e preenche com dados
var data = new DataParallelArray(computationProvider, 
new[] { 0f, 1f, 2f, 3f, 4f, 5f, 6f });

// Compila a query
CompiledQuery query = computationProvider.Compile>
(
d => from value in d
select value * 2f
);

//
Roda a query com os dados
IQueryable result = computationProvider.Run(query, data);

//
Imprime os resultados
foreach (float value in result)
Console.WriteLine(result[i]);

//
Destrói os objetos que criamos
computationProvider.Dispose();
data.Dispose();
result.Dispose();

O código fonte e os binários estão disponíveis sob Eclipse Public License 1.0.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT