3

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を呼び出すたびに計算全体が実行されるように見えますが、これには非常に時間がかかります。

ご協力ありがとうございました。オルドジフ

4

1 に答える 1

2

FPAは、実行される計算を表します。そのような計算の2つのリストがfiありnewfiます。物事をどのように定義しているかにより、の各要素newfiは計算であり、その値を取得するには独立して実行する必要があります。の共通の基礎となる要素に関して定義されている場合でも、fiその事実を利用して、基礎となるfi値を1回だけ計算し、それらを再利用する方法はありません。これらのfi計算を1回だけ実行する場合は、次のいずれかを実行する必要があります。

  1. 計算の結果を取得しfi(たとえば、を使用してtoArray2D)、newfiこれらの計算値に基づいてリストを作成します。
  2. 単一の配列内のすべての値を表す単一の計算を作成します。newfiこのような計算を構成するには少し賢い必要があるかもしれませんが、これにより、値を再計算することなく、すべての値を一度に計算できfiます。
于 2010-01-13T17:14:31.637 に答える