一起谈.NET技术,使用Brahma在GPU上执行LINQ

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

时间: 2024-09-22 06:05:16

一起谈.NET技术,使用Brahma在GPU上执行LINQ的相关文章

使用Brahma在GPU上执行LINQ

Brahma是一个用于并行计算的开源库,它由C#编写并支持在多种处理器上运行.目前,Brahma仅包含一个图形处理器(GPU)模块,但是它的模块化结构可以支持更多种类的处理器.使用Brahma,同一个C#方法中的语句可以同时运行在CPU和GPU上,而不需要额外的代码. Brahma通过将LINQ语句转换成目标处理器代码来执行并行计算,所生成的代码会跟据目标处理器的不同而不同.例如针对DirectX会生成High Level Shading Language,而针对OpenGL则会生成OpenGL

一起谈.NET技术,通过16道练习学习Linq和Lambda

1. 查询Student表中的所有记录的Sname.Ssex和Class列.  select sname,ssex,class from studentLinq: from s in Students select new { s.SNAME, s.SSEX, s.CLASS }Lambda: Students.Select( s => new { SNAME = s.SNAME,SSEX = s.SSEX,CLASS = s.CLASS }) 2. 查询教师所有的单位即不重复的Depart列.

一起谈.NET技术,理解.NET程序集的执行过程

对于一个已编译好的.NET程序集,Windows操作系统是如何启动执行的呢?日常使用中我们发现对于托管的和非托管的程序集编译器都会吧程序集编译成以.exe或.dll等为扩展名的文件,可见Windows加载器并没有区分是托管还是非托管的程序集,而且我们也知道对非托管的程序集是在编译器直接编译成了机器码,自然可以由CPU直接执行,而托管的.NET 程序集是包含复杂结构的MSIL代码,执行时会使用JIT即时编译器将IL代码编译成机器码,再由CPU执行,当然这期间还需要执行其它许多的工作,如加载CLR.

《创业家》牛文文:少谈点模式多谈点技术

"模式"如同当年的"主义",流行于各种创业大赛.创业励志节目.论坛的"街头"式秀场 文/创业家 牛文文 "美国某某公司你知道吧?就是刚被戴尔.惠普.思科十几亿美元抢购的那家.我们的模式和它的一样,现在还没赢利,可将来起码有十几亿人民币的市值." "我开了小煤矿,但煤运不出去,上商学院之后受到启发,想搞模式创新,具体讲就是想在铁路边上搞个煤炭物流开发区,建一个大的物流和信息流平台,把分散的煤炭集中在我这个园区,这样和铁

一起谈.NET技术,为什么我支持托管运行时(虚拟机)

最近博客园上在炒关于C#性能的问题,其实应该说是.NET性能的问题,其中某位仁兄提出,他希望C#能够直接编译为原生代码,而不是在CLR这样一个托管运行时上执行,因为虚拟机啊,JIT什么的性能差.后来发到TL上以后,也有朋友认为,"基于虚拟机的语言都是大公司为了利益在推动,说白了就是政治",因此"对C#提高性能的建议感到可笑,因为它本来就不是用来开发高性能程序的",再有,"C.C++已经明确不和这些后进争所谓的'容易开发'的头衔",那么其他语言为什

一起谈.NET技术,探秘.NET 4和Visual Studio 2010中的多核利用

如果你想利用多核机器的强大计算能力,你需要使用PLINQ(并行LINQ),任务并行库(Task Parallel Library,TPL)和Visual Studio2010中的新功能创建应用程序. 以前,如果你创建的多线程应用程序有BUG,那要跟踪起来是很麻烦的,但现在情况完全变了,感谢微软为我们带来了Microsoft Parallel Extensions for .NET(.NET并行扩展),它在.NET框架线程模型上提供了一个抽象层. 并行扩展遵循微软在COM应用程序中建立的事务管理和

一起谈.NET技术,.NET 4 并行(多核)编程系列之一入门介绍

本系列文章将会对.NET 4中的并行编程技术(也称之为多核编程技术)以及应用作全面的介绍. 本篇文章的议题如下: 1. 并行编程和多线程编程的区别. 2. 并行编程技术的利弊 3. 何时采用并行编程 1.并行编程和多线程编程的区别. 1.1并行编程. 现在随着多核计算机的普及,并行编程技术,也就是多核编程技术也逐渐称为开发的主流.为此,在.NET 4 中就引入了"并行编程".在.NET 4 中一些列的Library和类为并行编程提供了支持,如: Task Parallel Librar

一起谈.NET技术,.NET分布式架构开发实战之一 故事起源

前言: 本系列文章主要讲述一个实实在在的项目开发的过程,主要包含:提出问题,解决问题,架构设计和各个逻辑层的实现以及新问题的出现和代码的重构.本系列文章以故事的形式展开,而且文章列举的很多项目的名称,大家也不用太关心,很多都是虚拟的. 本篇主要讲述项目的一些背景 新人Richard被分配到了一个企业自动化信息管理项目组--Automation Information Management Project(后面简称AIM),当Richard进入项目组的时候,这个项目已经开始了,项目的架构也已经在两

一起谈.NET技术,Asp优化,asp缓存技术

一.何谓asp缓存/为什么要缓存 当你的web站点采用asp技术建立的初期,可能感觉到的是asp动态网页技术带来的便利性,以及随意修改性. 自如的http控制.但是,随着访问量的增加,你一定会发现自己的站点访问速度越来越慢,IIS重新启动得越来越频繁.接下来,你一定想优化asp,诸如更换性能更优异的数据库.建立索引.编写存储过程等等.这些措施有些不需要增加成本压力,有些则成本压力很大(譬如丛access到SQL),而且效果还不一定. 面对web访问压力,我认为最经济的办法是利用缓存优化技术来实现