OpenMp示例程序

时间:2014-02-01 16:19:21

标签: c++ openmp

我必须使用OpenMP并行化程序,我不知道。下面的代码是类似(非常)简化的问题。我有一个类,其属性是向量及其长度。方法'work'计算向量的每个新元素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;
}

方法工作被多次调用。有人可以给我写几行代码来解释该做什么吗?

1 个答案:

答案 0 :(得分:0)

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

#pragma omp parallel for

这就是全部!!!