Моя программа игнорирует цикл for в параллельном регионе - PullRequest
1 голос
/ 19 апреля 2020

Я должен сделать программу, которая рассчитывает Пи по методу Монте-Карло. Поэтому я использую библиотеку omp для создания потоков, ошибки не отображаются, и она действительно работает, если я установил количество потоков только в 1 поток. Но если я попытаюсь с 2 потоками или более, цикл полностью игнорируется. Любая идея, почему?

#pragma omp parallel num_threads(threads) private(nthreads,points_inside) //parallel region
    {
        int tid_set_clock = omp_get_thread_num() + 1;
        srand(time(0)*tid_set_clock);
        double coord[2];//coordinates
        double dist_cent;//distance from center of a unitary circle to any point
        nthreads = omp_get_num_threads();
        for(int i=0;i<(num_points*(1/nthreads));i++){//generaion of N points
            coord[0] = 2*((double)rand()/(double)(RAND_MAX));
            coord[1] = 2*((double)rand()/(double)(RAND_MAX));
            dist_cent = sqrt(pow((1-coord[0]),2)+pow((1-coord[1]),2));
            if(dist_cent>=1){
                points_inside--;
            }
        }
    }

Это параллельная секция, если количество потоков равно 1, оно будет работать нормально, но если 2 или больше, то просто не вводится для цикл

Есть идеи о том, что происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...