Bonjour,
Afin d'optimiser un traitement lourd d'un programme, j'aimerai utiliser OpenMP afin d’accélérer le traitement sans trop modifier mon code.
La méthode à optimiser est :
Code C/C++ :
// la méthode filterRoutine de la classe FormManager permet d'appliquer
// un succession de filtre (routine) à des images contenues dans l'objet FormManager
void FormManager::filterRoutine(MiList<Filter_t> routine)
{
// l'objet _dataManager contient un liste d'"Examen", dont chaque examen
// contient une liste d'image : donc parcours des examens, puis appel
// de la méthode Filter::ApplyRoutine(image, routine), qui applique la liste
// des filtres pour une image, pour chaque image de chaque examen ...
int dataManagerSize = _dataManager->getSize();
// ...
for (int e=0 ; e < dataManagerSize ; e++)
{
int examenSize = _dataManager->getExamen(e)->getSize();
for (int s=0 ; s < examenSize ; s++)
{
// les images sont indépendantes les unes des autres
Filter::ApplyRoutine(_dataManager->getSlice(e, s)->getImage(), routine);
}
}
// ...
}
Voilà, ce qu'il y a à paralléliser : j'ai déjà essayer quelques trucs simple comme :
Code C/C++ :
// ...
#pragma omp parallel for
for (int e=0 ; e < dataManagerSize ; e++)
// ...
Mais cela ne changeais rien : je ne sais pas si le fais de travailler sur des objet, avec des ressources partagées mais indépendantes cela changent quelques choses, je n'ai jamais utiliser
OpenMP dans un contexte avec des classes.
D'avance, merci pour votre aide