使用 Brahma 在 GPU 上执行 LINQ

  • Abel Avram
  • 王瑜珩

2010 年 5 月 18 日

话题:.NET语言 & 开发架构

Brahma是一个用于并行计算的开源库,它由 C# 编写并支持在多种处理器上运行。目前,Brahma 仅包含一个图形处理器(GPU)模块,但是它的模块化结构可以支持更多种类的处理器。使用 Brahma,同一个 C# 方法中的语句可以同时运行在 CPU 和 GPU 上,而不需要额外的代码。

Brahma 通过将 LINQ 语句转换成目标处理器代码来执行并行计算,所生成的代码会跟据目标处理器的不同而不同。例如针对 DirectX 会生成High Level Shading Language,而针对 OpenGL 则会生成OpenGL Shading Language。为了提高性能,LINQ 查询仅被编译一次,然后根据需要多次运行

下面的代码会并行地将一个数组的元素都乘以 2:

// 创建计算对象 
var computationProvider = new ComputationProvider();

// 创建并行数组,并填充数据 
var data = new DataParallelArray(computationProvider, 

new[] { 0f, 1f, 2f, 3f, 4f, 5f, 6f });

// 编译 LINQ 查询



CompiledQuery query = computationProvider.Compile>

(

d => from value in d

select value * 2f

);

// 在数据上执行查询



IQueryable result = computationProvider.Run(query, data);

// 打印结果



foreach (float value in result)

Console.WriteLine(result[i]);

// 释放资源



computationProvider.Dispose();

data.Dispose();

result.Dispose();

Brahma 的源代码二进制文件遵循Eclipse Public License 1.0

查看英文原文:LINQ on GPU with Brahma

.NET语言 & 开发架构