2017-06-02 1 views
1

Je suis en train d'utiliser Gpu.Default.For de la bibliothèque GPU Alea, mais je continue à avoir une exception:Exception lancée: System.Exception dans Alea.dll « i32 est struct pas le type

i32 is not a struct type error. 

Qu'est-ce que cela erreur moyenne, et pourquoi suis-je recevoir avec cette simple boucle Gpu.Default.For

for (Int32 j = 0; j <= TimePeriodArray.Length - 1; j++) 
//Gpu.Default.For(0, TimePeriodArray.Length - 1, j => 
{ 
    Int32 days = TimePeriodArray[j]; 
    Double[] CalcResult = new Double[CloseArray.Length]; 

    for (Int32 Index = days; Index <= CloseArray.Length - 1; Index++) 
    { 
     Gpu.Default.For(Index - 1, Index - days, i => 
     { 
      CalcResult[Index] = CalcResult[Index] + CloseArray[i]; 
     }); 

     CalcResult[Index] = CalcResult[Index]/days; 
    } 

    CalcResultsList.Add(CalcResult); 
//}); 
} 
+0

Est-ce que [this] (http://www.aleagpu.com/release/3_0_3/doc/gpu_programming_csharp.html#parallel_for) est la méthode dont vous parlez? –

+0

Oui, l'erreur se produit une fois que le code tente d'exécuter la boucle Gpu.Default.For Gpu.Default.For (Index - 1, Index - jours, i => { CalcResult [Index] = CalcResult [Index] + CloseArray [i]; }); – user2808755

+0

S'il vous plaît [modifier] votre question à être sur le sujet: inclure un [mcve] qui duplique le problème. Les questions demandant l'aide au débogage ("pourquoi ce code ne fonctionne-t-il pas comme je veux?") Doivent inclure: (1) le comportement souhaité, (2) un problème ou une erreur spécifique et (3) le plus court code pour le reproduire * dans la question elle-même *. S'il vous plaît voir aussi: [Quels sujets puis-je poser à propos ici?] (Http://stackoverflow.com/help/on-topic), et [demander]. Avec suffisamment de code pour dupliquer le problème, cela signifie en partie fournir le texte d'erreur * exact * produit lors de l'exécution du code (sous forme de texte dans 'format de code'). – Makyen

Répondre

3

Deux choses:?. Tout d'abord, vous new un tableau à l'intérieur du code GPU, qui est pas pris en charge Deuxièmement, je pense que CalcResultsList est de type List, ce qui n'est pas non plus supporté. , il n'est pas efficace d'allouer de la nouvelle mémoire dans le code GPU. Le code GPU sera exécuté avec de nombreux threads, l'allocation à l'intérieur du code GPU n'est pas recommandée.