Код, публикуемый OP, никогда не будет выполняться параллельно, , поскольку ключевое слово parallel
не отображается . Тот факт, что ОП получил идентификаторы, отличные от 0, показывает, что, вероятно, его код был встроен в параллельную директиву. Однако это не ясно из его поста и может запутать новичков.
Минимальный разумный пример (для первого примера, опубликованного ОП):
#pragma omp parallel sections
{
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
}
На моей машине это печатает
id = 0,
id = 1,
показывает, что эти два раздела выполняются разными потоками.
Стоит отметить, что, однако, этот код не может извлечь больше параллелизма, чем два потока: если он выполняется с большим количеством потоков, другие потоки не имеют никакой работы и будут просто сидеть без дела.