OpenCL : tests de l'implémentation interne dans MQL5 - page 44

 
joo:

On dirait que oui.

Je ne suis pas sûr, car j'essaie de ne pas utiliser de constructions compliquées (difficiles à percevoir à l'œil nu), mais je ne devrais probablement pas, car cela peut accélérer le code.

Votre code devrait probablement être plus lent, car la variable b est redéclarée à chaque itération de la boucle.

Mon code est plus court et plus rapide de toute façon. Vous pouvez vérifier à la fois la vitesse et l'équivalence.
"__kernel void MFractal(                                    \r\n"
"                       __global int *out                   \r\n"
"                      )                                    \r\n"
"  {                                                        \r\n"
"   int i = get_global_id(0);                               \r\n"
"   out[i]= i;                                              \r\n"
"  }                                                        \r\n"; //;-))
;-)
 
MetaDriver: Mon code est plus court et plus rapide de toute façon. Vous pouvez vérifier à la fois la vitesse et l'équivalence;-)
Non, ce n'est pas juste. Tu devrais t'occuper du code d'Andrei et l'accélérer.
 
Mathemat:
Non, ce n'est pas juste. Tu manipules le code d'Andrei et tu l'accélères.

Qu'est-ce que j'ai fait ?

Qu'attend-on de l'optimiseur ? Réduire les frais généraux tout en gardant des résultats équivalents ! Alors, regardez, ça fait un peu de sous.

:)

// Au fait ! !! Ce code ne fait pas tomber mon pilote même avec #define BUF_SIZE 1024*1024*4 ! !!

// C'est une percée !

;))))

 
MetaDriver:

Qu'est-ce que j'ai fait ?

Qu'attend-on de l'optimiseur ? Réduire les frais généraux tout en gardant des résultats équivalents ! Alors, regardez, ça fait un peu de sous.

:)

Comment avez-vous vérifié ? :O
 
joo:
Est-ce qu'il convient ? Comment avez-vous vérifié ? :O
Comment, comment ! Avec une calculatrice ! J'en ai mis huit en parallèle et j'ai vérifié.
 
MetaDriver:
Comment, comment ! Sur la calculatrice ! J'en ai mis huit en parallèle et j'ai vérifié.

Votre calculatrice ment. :)

Le cycle ajoute 0+1+2+3+...+99999999. Et après chaque 10000 pas, la valeur est 0.

Qu'avez-vous fait ? - Vous avez attribué un numéro de vol et c'est tout. Comment mes résultats peuvent-ils être les mêmes que les vôtres ?

 

J'ai fait quelques recherches et j'ai soupçonné que ce...

"__kernel void MFractal(                                    \r\n"
"                       __global int *out                   \r\n"
"                      )                                    \r\n"
"  {                                                        \r\n"
"   out[get_global_id(0)]= get_global_id(0);                \r\n"
"  }                                                        \r\n";

Le problème est que get_global_id() n'est probablement pas une fonction, mais une opération de registre super rapide.

Si quelqu'un en a vraiment besoin et le souhaite, veuillez rapporter les résultats au studio. Cela sera utile.
 
MetaDriver:

Qu'attend-on de l'optimiseur ? Réduire les frais généraux tout en gardant des résultats équivalents ! Alors, regardez, ça fait un peu de sous.

// Au fait ! !! Ce code ne fait pas tomber mon pilote même avec #define BUF_SIZE 1024*1024*4 ! !!

J'ai fumé un peu plus longtemps et je me suis énervé. D'un autre côté - si le conducteur ne le lâche pas, l'équivalence dans le résultat est déjà incomplète.

Merde... Quelle poisse. :(

 
MetaDriver: Vous avez fumé plus longtemps et vous vous êtes énervé. D'autre part, comme le conducteur ne le lâche pas, l'équivalence dans le résultat est déjà incomplète.

Non, vous n'avez pas bien fumé.

1^3 + 2^3 + 3^3 + ... + 1000000000^3 = 1000000000^2 * (1000000000 + 1)^2 / 4

La gauche et la droite sont la même chose, équivalence totale.

Seulement avec l'expression de gauche, vous chaufferez la pierre pendant un temps assez long, tandis qu'avec celle de droite, ce sera presque instantané, le processeur ne s'en rendra pas compte et restera froid.

P.S. J'ai mis à niveau vers OpenCL 1.2 (c'est une version bêta). Veuillez noter le petit ajout après le numéro de version - sse2.

2012.03.22 07:43:28     Terminal        CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.2 (2 units, 2793 MHz, 7912 Mb, version 2.0 (sse2))

Je ne veux pas dire qu'il s'est amélioré de façon spectaculaire, mais il s'est accéléré lors de certains tests. Disons, sur Tast_Mand_ (bien, tu es un pervers, Andrewha) - 5% à 10%. Juste un peu, mais bien.

 
joo:

Votre calculatrice ment. :)

La boucle ajoute 0+1+2+3+...+99999999. Et après chaque 10000 pas, la valeur est 0.

Qu'avez-vous fait ? - Vous avez attribué un numéro de vol et c'est tout. Alors comment mes résultats peuvent-ils être les mêmes que les vôtres ?

Je vous ai donné presque 24 heures pour reprendre vos esprits. Vous insistez toujours ? :)

Voyons voir :

// Это твой код (оригинал)
"  {                                \r\n"
"   int i = get_global_id(0);       \r\n"
"   for(int u=0;u<100000000;u++)   \r\n"
"   {                           \r\n"
"    out[i]+=u;              \r\n"  
"    if(out[i]>10000)     \r\n"
"      out[i]=0;         \r\n" // после десятитысячного шага итерации этот оператор начнёт выполняться в каждом цикле.
"   }                    \r\n" // т.е. на выходе из цикла по любому будем иметь out[i] = 0;
"   out[i]+= i;          \r\n" // ecли к нулю прибавить номер мухи то получится... сам посчитай..... на калькуляторе... :)
"  }                     \r\n";// есть ещё вариант, надёжнее - распечатай результаты и сравни.  ;-)))