In OpenMP quando si utilizza omp sections
, i thread verranno distribuiti ai blocchi all'interno delle sezioni o ciascun thread verrà assegnato a ciascuna sezione?Come funziona la direttiva SECTIONS in OpenMP?
Quando nthreads == 3
:
#pragma omp sections
{
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
}
uscita:
id=1
id=1
Ma quando eseguo il seguente codice:
#pragma omp sections
{
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
}
#pragma omp sections
{
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
}
uscita:
id=1
id=1
id=2
id=2
Da questi output non riesco a capire quale sia il concetto di sezioni in OpenMP.
-1 La tua risposta contiene molte inesattezze. Non puoi essere sicuro che diverse sezioni siano assegnate a thread differenti. L'ordine di output non è deterministico solo all'interno di un singolo costrutto 'sections', non tra due diverse' sezioni' (barriera implicita alla fine del costrutto) – Massimiliano