Microsoft Accelerator V2 - toArray2D问题

时间:2010-01-13 10:05:11

标签: f# gpu gpgpu accelerator

我是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))

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

感谢您的帮助。 Oldrich

1 个答案:

答案 0 :(得分:2)

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

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