OpenMP示例程序

OpenMp example program

本文关键字:程序 例程 OpenMP      更新时间:2023-10-16

我必须与OpenMP并行化一个程序,我不知道。下面的代码是一个类似的(非常)半填充的问题。我有一个属性,其属性是向量及其lenght。该方法"工作"将向量的每个新元素V [i]计算为前一个的平均值和一个之后的平均值(考虑到周期性界限,即元素0是元素1和元素(LEN-1)的平均值)。

类:

#include<vector>
#include<iostream>
class A{
private:
    std::vector<int> v;
    int len;
public:
    A(): len(0), v(0){
        v[0] = 0;
    }
    A(unsigned n): len(n), v(n){
        for(int i = 0; i < len; i++)
            v[i] = 2*(i+1);
    }
    void work(){
        std::vector<int> temp(len);
        for(int i = 0; i < len; i++)
            temp[i] = (v[((i-1+len)%len)] + v[((i+1)%len)]) / 2;
        v.swap(temp);
    }
    void out(){
        for(int i = 0; i < len; i++)
            std::cout << v[i] << "  ";
        std::cout << std::endl;
    }
    ~A(){}
};

主:

#include <iostream>
#include "omp.h"
#include "class.cpp"
int main () {
    A a(5);
    for(int i = 0; i < 10; i++){
        a.work();
    }
    a.out();
    return 0;
}

该方法工作被称为多次。有人可以给我写几行代码来解释该怎么办吗?

我有解决方案,在循环之前必须写的类方法中:

#pragma omp parallel for

全是!