Упорядоченные идентификаторы потоков в OpenMP в C++

Я использую OpenMP в C++. Я хочу указать количество потоков (16), а затем запустить каждый поток с идентификатором от 0 до 15. У меня есть массив из 16 чисел, которые я хочу использовать в качестве параметров в каждом отдельном потоке. Так что я

    omp_set_dynamic(0);
    omp_set_num_threads(16);
    int tid;
#pragma omp parallel shared(myvector) private(tid)
{
    tid = omp_get_thread_num();
    // Do some calculations using myvector[tid]
}

Тем не менее, (tid) не упорядочены от 0 до 15, так как некоторые повторяются дважды или более. Как заставить его выполнить одну задачу с каждым из 16 параметров?

1 ответ

Каждый поток в команде выполняет все операторы в параллельном регионе, за исключением конструкций разделения работы.

Я пробовал этот простой код

#include <omp.h>
#include <stdio.h>

int main(){
    omp_set_dynamic(0);
    omp_set_num_threads(32);
    int tid;
    double *myvector;
#pragma omp parallel shared(myvector) private(tid)
    {
        tid = omp_get_thread_num();
        printf("Thread number = %d\n",tid);
        // Do some calculations using myvector[tid]
    }
    return 0;
}

и получил правильный результат:

Thread number = 3
Thread number = 4
Thread number = 0
Thread number = 5
Thread number = 6
Thread number = 7
Thread number = 8
Thread number = 9
Thread number = 10
Thread number = 11
Thread number = 12
Thread number = 13
Thread number = 14
Thread number = 15
Thread number = 1
Thread number = 2

Пожалуйста, проверьте его на своем компьютере или напишите больше информации о коде, который вы пробовали, и выводе, который вы получили.

Другие вопросы по тегам