Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1200 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Optimiser une boucle en OpenCL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimiser une boucle en OpenCL

n°2146169
JPP78750
Posté le 18-06-2012 à 09:01:49  profilanswer
 

Bonjour,
J'ai une boucle du type :
 
 

Code :
  1. for (i=0; i<1000;i++){
  2.   for (k=0; i<=2;i++){
  3.      a[i][0][k]=Noeud[Triangle[i][0]][k];
  4.      a[i][1][k]=Noeud[Triangle[i][1]][k];
  5.      a[i][2][k]=Noeud[Triangle[i][2]][k];
  6.   }
  7. }


 
avec  
Triangle[i][0], l'index (int) du premier noeud du triangle i
Triangle[i][1], l'index (int) du deuxieme noeud du triangle i
 
Noeud[Triangle[i][0]][0] :la premiere coordonnée du premier noeud du triangle i
Noeud[Triangle[i][0]][1] :la deuxieme coordonnée du premier noeud du triangle i
....
 
J'aimerai faire cette boucle en OpenCL
J'ai donc modifié mes tableaux pour qu'ils ne soient à une seule entrée donc mon Noeud[][] devient Noeud2[] avec les trois premieres valeurs les coordonnées du premier point, puis les 3 suivantes les coordonnees du second point ...
Triangle[][] devient Triangle2[] avec les 3 premières valeurs, qui sont les index des 3 noeuds du premier triangle, puis les 3 valeurs suivante sont les index des noeuds du second triangle ...  
 
Maintenant mon soucis est l'écriture du .cl
 
J'aimerais mettre en place la boucle ci dessus mais je ne sais pas trop comment marche cette histoire de  
int id = get_global_id(0);
et apres faire "une boucle" avec id en incrementeur ...
 
Si vous pouviez m'éclairer ?
 
 
 


---------------
http://www.jppanaget.com
mood
Publicité
Posté le 18-06-2012 à 09:01:49  profilanswer
 

n°2146390
Joel F
Real men use unique_ptr
Posté le 19-06-2012 à 11:28:44  profilanswer
 

le global_id te renvoit l'identifiant de ton thread OpenCL. Il represente un thread sur ta grille de thread.

 

La technique usuelle consiste a "peler" les nids de boucle externes et les remplacer par un acces via ce id:

 
Code :
  1. int id = get_global_id(0);
  2.   for (k=0; i<=2;i++){
  3.      a[id][0][k]=Noeud[Triangle[id][0]][k];
  4.      a[id][1][k]=Noeud[Triangle[id][1]][k];
  5.      a[id][2][k]=Noeud[Triangle[id][2]][k];
  6.   }
 

Ensuite, side note, la boucle de 0 a 2, tu me feras plaisir de la derouler a la main.


Message édité par Joel F le 19-06-2012 à 11:29:38
n°2146475
JPP78750
Posté le 19-06-2012 à 22:37:24  profilanswer
 

Merci pour ta réponse. Mais est-il possible de mettre en argument du kernel, un tableau de plusieurs dimensions ?


---------------
http://www.jppanaget.com
n°2146505
Joel F
Real men use unique_ptr
Posté le 20-06-2012 à 07:41:30  profilanswer
 

De memoire non, il faut le lineariser


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Optimiser une boucle en OpenCL

 

Sujets relatifs
Lire un fichier en Shell avec une boucleOptimiser recherche dans une grosse BDD Excel
temps maximum par tour de boucle php[boucle PHP remplissage tableau
Excel ( macro pour un pourcentage avec boucle) resolubesoin d'aide pour une opération qui demane une boucle
Boucle While dans un script KshProblème boucle while
[MySQL] Indexes et jointures : optimiser les perfsoptimiser le temps de lecture d'un gros fichier
Plus de sujets relatifs à : Optimiser une boucle en OpenCL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR