Microsoft Accelerator V2 - toArray2D问题
问题描述:
我是Microsoft.Accelerator的新手。看看下面的代码(这是F#,但它类似于C#):Microsoft Accelerator V2 - toArray2D问题
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创建农民专业组织的名单,并在方式处理它,在最终newfi列表中的每个元素dependend上fi列表中的所有元素。最后我想获得最终的名单。而我的问题是:我是否应该在生成的FPA列表中为每个单一元素(FPA)调用toArray2D?在我看来,整个计算每次运行时都会运行到Array2D,这非常耗时。
谢谢你的帮助。 Oldrich
答
FPA表示要执行的计算。你有两个这样的计算列表,fi
和newfi
。由于您如何定义事物,因此newfi
的每个元素都是需要独立运行以获取其值的计算;即使它是根据fi
的通用底层元素定义的,但没有办法利用这一事实仅仅计算一次底层的fi
值并重用它们。如果您想进行的fi
计算只有一个的时候,你需要做以下之一:
- 获取
fi
计算的结果(例如,通过使用toArray2D
),并建立了newfi
列表基于这些计算值。 - 创建一个代表单个数组中所有
newfi
值的计算 - 您可能需要有点聪明才能编写这样的计算,但是这可以允许您一次计算所有值,而无需重新计算fi
值。
谢谢你的回答。我很害怕... 你是什么意思?: 创建一个单一的计算,代表单个数组中的所有newfi值。我怎样才能把“一维数组的二维数组”放到单个二维数组中?我可以使用FPA4,但有4个值的限制。我需要9个值。 PS:我想实现的是一个格子Boltzmann建模 – 2010-01-14 10:05:58