質問

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

助けてくれてありがとう。オールドリッチ

役に立ちましたか?

解決

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

  1. の結果を取得します fi 計算 (例:を使用して toArray2D) をビルドして、 newfi これらの計算値に基づいてリストを作成します。
  2. すべてを表す単一の計算を作成します。 newfi 単一の配列内の値 - このような計算を構成するには少し賢明である必要があるかもしれませんが、これにより、配列を再計算することなく、すべての値を一度に計算できる可能性があります。 fi 価値観。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top