【问题标题】:Microsoft Accelerator V2 - toArray2D questionMicrosoft Accelerator V2 - toArray2D 问题
【发布时间】:2011-01-04 13:51:35
【问题描述】:

我是 Microsoft.Accelerator 的新手。看看下面的代码(它是 F#,但它类似于 C#):

type FPA = Microsoft.ParallelArrays.FloatParallelArray

let fi = List.init 9 (fun i -> new FPA(i, [|10;10|])) 
let process (fi: FPA list) : FPA list = fi // complicated function
let newfi = process fi
let target = new DX9Target()
for newf in newfi do printfn "%A" (target.toArray2D(newf))

基本上,我创建了一个 FPA 列表并以生成的 newfi 列表中的每个元素都依赖于 fi 列表中的所有元素的方式对其进行处理。最后我想得到结果 fi 列表。我的问题是:我应该为结果 FPA 列表中的每个元素 (FPA) 调用 toArray2D 吗?在我看来,每次调用 toArray2D 时都会运行整个计算,这非常耗时。

感谢您的帮助。 奥尔德里奇

【问题讨论】:

    标签: f# gpu gpgpu accelerator


    【解决方案1】:

    FPA 表示要执行的计算。您有两个此类计算列表,finewfi。由于您定义事物的方式,newfi 的每个元素都是一个计算,需要独立运行才能获得其值;即使它是根据fi 的公共底层元素定义的,也无法利用这一事实来仅计算底层fi 值并重用它们。如果您希望这些 fi 计算仅执行一次,则需要执行以下操作之一:

    1. 获取fi 计算的结果(例如使用toArray2D),并根据这些计算值构建newfi 列表。
    2. 创建一个表示单个数组中的所有 newfi 值的单个计算 - 您可能需要有点聪明才能组合这样一个计算,但这可以让您一次计算所有值而无需重新计算 @ 987654331@ 值。

    【讨论】:

    • 感谢您的回答。我很害怕......你的意思是什么?:创建一个单一的计算,它代表一个数组中的所有 newfi 值。如何将“一维数组的二维数组”放入单个二维数组?我可以使用 FPA4,但有 4 个值的限制。我需要 9 个值。 PS:我想实现的是格子玻尔兹曼建模
    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多