Je souhaite optimiser mon code séquentiel pour créer un dégradé.pourquoi utiliser plus de 2 threads consomment plus de temps?
Le dégradé de calcul principal pour la bordure de l'image et les autres threads calculent chacun le dégradé pour un fragment de l'image, en utilisant 2 threads et le thread principal donne un résultat meilleur que le code séquentiel mais en utilisant plus de 2 threads, mais il consomme de plus et semble pire que le séquentiel.
J'ai essayé ce code pour accélérer le processus gradient:
for (int n = 0; n<iter_outer; n++)
{
int chunk = 1 + ((row - 1)/num_threads); //ceiling
int start=0;
int end=0;
//Launch a group of threads
for (int tid = 0; tid < num_threads; ++tid)
{
start = tid * chunk;
end = start + chunk;
t[tid] = thread(gradient, tid, g, vx, vy, row, col, 1, start, end);
}
//Launched from the main;
gradient(1, g, vx, vy, row, col,0, start, end);
//Join the threads with the main thread
for (int i = 0; i < num_threads; ++i)
{
t[i].join();
}
}
Combien de noyaux votre machine a-t-elle? Peut-être 2? – NathanOliver
Chaque fois que vous passez d'un thread à l'autre, vous avez besoin de temps pour configurer le nouveau contexte. –
Pour les threads à exécution courte, il y a un point où le temps de création d'un thread (et la commutation entre les contextes) annule le gain de vitesse dû à plusieurs threads. Je soupçonne que votre image est trop petite. –