我是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都会运行整个计算,这非常耗时。
谢谢你的帮助。奥尔德里奇
发布于 2010-01-14 01:14:32
FPA表示要执行的计算。您有两个这样的计算列表:fi和newfi。由于您定义事物的方式,newfi的每个元素都是一个计算,需要独立运行才能获得它的值;即使它是根据fi的公共底层元素定义的,也没有办法利用这一事实来仅计算底层fi值一次并重用它们。如果您希望这些fi计算只执行一次,则需要执行以下操作之一:
fi计算的结果(例如,通过使用toArray2D),并基于这些计算的结果构建newfi列表,该计算表示单个数组中的所有newfi值-您可能需要更聪明地组成这样的计算,但这可以允许您一次计算所有值,而无需重新计算fi值。https://stackoverflow.com/questions/2055821
复制相似问题