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, Roda a query com os dados
new[] { 0f, 1f, 2f, 3f, 4f, 5f, 6f });
// Compila a query
CompiledQuery query = computationProvider.Compile>
(
d => from value in d
select value * 2f
);
//Imprime os resultados
IQueryable result = computationProvider.Run(query, data);
//Destrói os objetos que criamos
foreach (float value in result)
Console.WriteLine(result[i]);
//
computationProvider.Dispose();
data.Dispose();
result.Dispose();
O código fonte e os binários estão disponíveis sob Eclipse Public License 1.0.