Brahma is an open source C# library that provides support for parallel computations running on a variety of processors. Currently, Brahma has a GPU provider but its modular structure allows using different providers for other types of processors. One C# method can contain both statements running on CPU and GPU without additional glue code.
Brahma performs parallel computations by transforming LINQ statements into programs that run on the target processor. The program generated contains High Level Shading Language statements if it was targeted for DirectX or OpenGL Shading Language statements if it was targeted for OpenGL. For performance improvements LINQ queries are compiled once and used many times as necessary.
The following code multiplies the values in an array by 2 in parallel:
// Create the computation provider var computationProvider = new ComputationProvider(); // Create a data-parallel array and fill it with data var data = new DataParallelArray<float>(computationProvider, new[] { 0f, 1f, 2f, 3f, 4f, 5f, 6f }); // Compile the query CompiledQuery query = computationProvider.Compile<DataParallelArray<float>> ( d => from value in d select value * 2f ); // Run the query on this data IQueryable result = computationProvider.Run(query, data); // Print out the results foreach (float value in result) Console.WriteLine(result[i]); // Get rid of all the stuff we created computationProvider.Dispose(); data.Dispose(); result.Dispose();
The source code and binaries are available under Eclipse Public License 1.0.