2
Salutations à tous,OpenMP Paralléliser le bloc de code dans une boucle for?
Je veux exécuter le bloc de code à l'intérieur de la boucle, dans un thread OpenMP distinct. Ai-je défini les directives OpenMP correctes dans l'extrait de code suivant:
#ifdef OPENMP_ENABLE
#pragma omp parallel for
#endif
for(int i=0;i<numOfSlices;i++){ // Entire block inside this loop should be fun in new OpenMP thread
int id =0;
#ifdef OPENMP_ENABLE
id=omp_get_thread_num();
qDebug("------- OPENMP thread number %d",id);
#endif
qDebug(" - Image Slice %d",i);
int width=0,height=0;
//Image Buffer
unsigned char *buff=planeViewer->getImageBuggerOfSlice(i,height,width);
//Trunk
RzTrunk *rztrnk=planeViewer->getTrunkOfSlice(i);
//If Empty trunk,add frame @TODO Hard coded
if(rztrnk->getCurveCount()==0){
RzCurve *crv=rztrnk->createFrameCurve(10,10,width-10,height-10);
rztrnk->addCurve(crv);
}
//Covert Rinzo Trunk to Centy Trunk!
//TODO Make sure to deallocate memory
QImage *qimg=new QImage(buff,width,height,QImage::Format_RGB32);
trnk_t *trnkt = convertRzTrunkToCntyTrunk(rztrnk, qimg->width(),qimg->height());
//Convert QImage to Cnty Image format
image_t *imgt=convertQImageToImaget(qimg);
//This extract parts , first should detect outer border
if(etype==EXTRACT_DEFL_INOUT){
cnty_extract_contour(EXTRACT_DEFL_OUT, trnkt, imgt, NULL, NULL,settings2, NULL);
trnk_make_crvs_nodes_active(trnkt);
}
cnty_extract_contour(etype, trnkt, imgt, NULL, NULL,settings, NULL);
convertCntyTrunkToRzTrunk(trnkt, rztrnk);
trnk_destruct(trnkt);
destroyImaget(imgt);
delete qimg;
delete buff;
} //end of for loop
Cela semble correct - si votre intention était de découper la boucle for et de la traiter par différents threads de travail openmp, où est le problème? Quel est le résultat de la boucle ... peut-être l'écriture il faudrait "#pragma omp citical" – FFox
la ligne "RzTrunk * rztrnk = avionViewer-> getTrunkOfSlice (i);" obtenir une instance à partir d'une liste liée et tout le traitement est effectué sur cette variable * rztrnk.Result est juste les entrées modifiées dans la liste liée. –
Ainsi, les données de différents i n'interfèrent pas? Alors le code ci-dessus devrait fonctionner. – FFox