Заполните большой массив, используя OpenMP - PullRequest
0 голосов
/ 29 июня 2019

Я хочу создать одномерный массив размером (10 ^ 7) и хочу заполнить его случайным образом. Можно ли создать 10 массивов размером 10 ^ 6 каждый, заполнить их случайным образом, а затем объединить в один массив с помощью OpenMP?

std::random_device rd{};
std::mt19937 rng{rd()};
std::bernoulli_distribution distribution(p);
int array_size = 10000000, N = 50;
array = new uint64_t[array_size];
#pragma omp parallel 
{
    #pragma omp parallel for
    for(int i = 0; i < (array_size); i++){
        uint64_t rn = 0;
        for(int j = 0; j < N; j++){
            rn = ((rn<<1)+(distribution(rng)?1:0));
        }
        array[i] = rn;
    }
}

1 Ответ

0 голосов
/ 02 июля 2019

Поскольку это массив, простое помещение случайного назначения в параллельный раздел for сделает всю работу.Библиотека OpenMP позаботится о параллельном выполнении.

std::random_device rd{};
std::mt19937 rng{rd()};
std::bernoulli_distribution distribution(p);
int array_size = 10000000, N = 50;
array = new uint64_t[array_size];
#pragma omp parallel for firstprivate(array_size)
{
    for(int i = 0; i < (array_size); i++)
        array[i] = rn;
}
...