Bonjour.
Le nouveau problème qui m'amène aujourd'hui est, vous l'aurez compris, les threads. Vaste sujet qui fait couler beaucoup d'encre, enfin plutôt taper beaucoup de touches clavier.
Je travaille actuellement sur un soft de traitement d'image. L'interface est bien entendu géré par GTK+. Cette interface est pour ainsi dire terminée. Vient maintenant le temps de passer aux choses sérieuses. Il faut lancer les calculs. C'est là que le problème survient.
Je vous donne un exemple de traitement. Soit 45 images de 3040x2014 en RVB. Il faut que je détermine une image résultante qui sera pour chaque pixel la valeur moyenne avec calcul itératif en prenant en compte l'écart typique (méthode Kappa-Sigma clipping).
Vous comprenez bien qu'il est hors de question pour moi de charger en mémoire les 45 images en mémoire pour lancer ensuite le calcul. J'ai donc dans l'idée de partager le travail. Je divise la taille image en portions égales. Chaque portion sera lancée dans un thread. Je limite le nombre de threads à 10 par exemple (arbitraire). Bien entendu cette méthode pose un inconvénient. Rien n'est parfait. Pour chaque portion il faut charger depuis le disque chaque image, sauvegarder la nouvelle portion, libérer la mémoire de l'image entière et ainsi de suite.
Voila ma question. Je tiens à pouvoir utiliser le maximum de puissance disponible. Les gthread utilisent-ils les multiprocesseurs, si la machine sur laquelle le soft tourne en est doté? Je sais déjà que le multiprocessing est géré par le noyau mais comme il existe par exemple la librairie openMP je me pose des questions.
Partager