Bonsoir tout le monde,

Je me suis récemment mis à Microsoft Accelerator V2, mais j'ai des difficultés à obtenir des performances potables. Quand j'utilise un petit "Jeu de la vie", la version Accelerator est environ 2 fois plus lente que ma version monothread ... alors que c'est typiquement sur ce genre de problème (avec de grands tableaux de données) qu'Accelerator est sensé donner tout son potentiel.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
           DX9Target Cible = new DX9Target();
           FloatParallelArray Valeur0 = new FloatParallelArray(0, new int[2] { Largeur, Hauteur });
           FloatParallelArray Valeur1 = new FloatParallelArray(1, new int[2] { Largeur, Hauteur });
           FloatParallelArray Valeur2 = new FloatParallelArray(2, new int[2] { Largeur, Hauteur });
           FloatParallelArray Valeur3 = new FloatParallelArray(3, new int[2] { Largeur, Hauteur });
 
        override public void Générer()
        {
            FloatParallelArray Voisines = new FloatParallelArray(0, new int[2] { Largeur, Hauteur });
            FloatParallelArray Cellules = new FloatParallelArray(Génération);
 
            //Cumul des valeurs des voisines
            for (int Y = -1; Y <= 1; Y++)
            {
                for (int X = -1; X <= 1; X++)
                {
                    if (!(X == 0 && Y == 0))
                    {
                        Voisines = Voisines + ParallelArrays.Rotate(Cellules, Y, X);
                    }
                }
            }
 
            //Regarde si il y a 2 voisines
            BoolParallelArray Resultat_1a = ParallelArrays.CompareEqual(Voisines, Valeur2);
            //Vivante si il y a 2 voisines, Morte sinon
            FloatParallelArray Resultat_1b = ParallelArrays.Cond(Resultat_1a, Valeur1, Valeur0);
            //Si morte : pas d'importance qu'il y ait eu 2 voisines
            FloatParallelArray Resultat_1c = ParallelArrays.Min(Resultat_1b, Cellules);
 
            //Regarde si il y a 3 voisines
            BoolParallelArray Resultat_2a = ParallelArrays.CompareEqual(Voisines, Valeur3);
            //Vivante si il y a 3 voisines, morte sinon
            FloatParallelArray Resultat_2b = ParallelArrays.Cond(Resultat_2a, Valeur1, Valeur0);
 
            //Regarde si vivant dans au moins un des deux test
            Cellules = ParallelArrays.Max(Resultat_1c, Resultat_2b);
 
            //Evaluation
            Cible.ToArray(Cellules, out Génération);
        }
J'ai beau chercher, je n'arrive pas à trouver pourquoi j’obtiens d'aussi mauvaises performances ... et l'épluchage du peu de doc disponible ne m'as pas beaucoup aidé. Quelqu'un aurait une idée ?