|
Brahma是一個(gè)用于并行計(jì)算的開源庫,它由C#編寫并支持在多種處理器上運(yùn)行。目前,Brahma僅包含一個(gè)圖形處理器(GPU)模塊,但是它的模塊化結(jié)構(gòu)可以支持更多種類的處理器。使用Brahma,同一個(gè)C#方法中的語句可以同時(shí)運(yùn)行在CPU和GPU上,而不需要額外的代碼。
Brahma通過將LINQ語句轉(zhuǎn)換成目標(biāo)處理器代碼來執(zhí)行并行計(jì)算,所生成的代碼會(huì)跟據(jù)目標(biāo)處理器的不同而不同。例如針對(duì)DirectX會(huì)生成High Level Shading Language,而針對(duì)OpenGL則會(huì)生成OpenGL Shading Language。為了提高性能,LINQ查詢僅被編譯一次,然后根據(jù)需要多次運(yùn)行
下面的代碼會(huì)并行地將一個(gè)數(shù)組的元素都乘以2:
// 創(chuàng)建計(jì)算對(duì)象
var computationProvider = new ComputationProvider();
// 創(chuàng)建并行數(shù)組,并填充數(shù)據(jù)
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
);
// 在數(shù)據(jù)上執(zhí)行查詢
IQueryable result = computationProvider.Run(query, data);
// 打印結(jié)果
foreach (float value in result)
Console.WriteLine(result[i]);
// 釋放資源
computationProvider.Dispose();
data.Dispose();
result.Dispose();
NET技術(shù):使用Brahma在GPU上執(zhí)行LINQ,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。