2010-01-13 4 views
3

Je suis nouveau à Microsoft.Accelerator. Jetez un oeil sur le code suivant (il est F #, mais il est similaire à C#):Microsoft Accelerator V2 - toArray2D question

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

Fondamentalement je créer une liste de FPA et de traiter d'une manière que chaque élément de la liste de newfi résultant est dependend sur tous les éléments de la liste. Enfin, j'aimerais obtenir la liste des résultats. Et ma question est: Dois-je appeler à Array2D pour chaque élément (FPA) dans la liste FPA qui en résulte? Il me semble que tout le calcul est exécuté chaque fois que j'appelle Array2D, ce qui prend beaucoup de temps.

Nous vous remercions de votre aide. Oldrich

Répondre

2

Un FPA représente un calcul à effectuer. Vous avez deux listes de tels calculs, fi et newfi. En raison de la façon dont vous définissez les choses, chaque élément de newfi est un calcul qui devra être exécuté indépendamment pour obtenir sa valeur; même si elle est définie en termes d'éléments sous-jacents communs de fi, il n'y a aucun moyen de tirer parti de ce fait pour calculer uniquement les valeurs fi sous-jacentes une seule fois et de les réutiliser. Si vous voulez que ces fi calculs à effectuer une seule fois, vous aurez besoin de faire une des opérations suivantes:

  1. obtenir les résultats des calculs fi (par exemple en utilisant toArray2D), et de construire la liste newfi sur la base de ces valeurs calculées.
  2. Créez un seul calcul qui représente toutes les valeurs newfi dans un seul tableau - vous devrez peut-être être un peu malin pour composer un tel calcul, mais cela pourrait vous permettre de calculer toutes les valeurs sans avoir besoin de recalculer les valeurs fi.
+0

Nous vous remercions de votre réponse. J'avais peur de cela ... Qu'entendiez-vous par ?: Créer un seul calcul qui représente toutes les valeurs newfi dans un seul tableau. Comment puis-je mettre "tableau 2D de tableau 1D" dans un tableau 2D unique? Je peux utiliser FPA4, mais il y a une limite à 4 valeurs. J'ai besoin de 9 valeurs. PS: Ce que je voudrais mettre en œuvre est une modélisation Lattice Boltzmann –