我必须使用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;
}
方法工作被多次调用。有人可以给我写几行代码来解释该做什么吗?
答案 0 :(得分:0)
我有解决方案,在你必须在循环之前编写的类的方法工作中:
#pragma omp parallel for
这就是全部!!!