首页 > 解决方案 > 埃拉托色尼筛的 MPI 并行编程。仅内部循环

问题描述

我正在尝试与 mpi 库和 c++ 并行化以下顺序代码的内部循环(eratosthenes 筛):

#include <stdio.h>
#include <cstdlib>
#include <vector>
#include <stdlib.h>
#include <iostream>
#include <math.h>
#include <iostream>

int main()
{
    int64_t n = 40;
    int64_t root = std::sqrt(n);
    int count = 0;

    bool* range = new bool[n];
    for (int64_t i = 0; i < n; i++)
    {
        range[i] = true;
    }
    
    for (int64_t i = 2; i <= root; i++)
    {
        if (range[i])
        {
            //Loop to be parallelized
            for (int64_t j = i * i; j < n; j += i)
            {
                range[j] = false;
            }
        }
    }
    
    for (int64_t k = 2; k < n; k++)
    {
        if (range[k])
        {
            count++;
        }
    }
    printf("Primes: %d", count);
}

我不想并行化外部循环,虽然这会是一个更好的解决方案,但我必须比较两种性能。

换句话说,我想并行消除倍数的分布,这发生在 range[j] 取值为 false 时

先感谢您。

标签: c++loopsparallel-processingmpisieve-of-eratosthenes

解决方案


推荐阅读