2014-02-01 4 views
-1

Мне нужно распараллелить программу с помощью OpenMP, и я понятия не имею. Код, приведенный ниже, является аналогичной (очень) полупростой задачей. У меня есть класс, атрибуты которого являются вектором и его длиной. Метод «работа» вычисляет каждый новый элемент v [i] вектора как среднее значение предыдущего и следующего после (учитывая периодические границы, т. Е. Элемент 0 является средним значением элемента 1 и элемента (len-1)), ,Пример программы OpenMp

класс:

#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

Ну, кто такой великолепный человек, который пользуется тем, что отрицает голоса на мой вопрос? Мне нужно решить эту проблему, я знаю, что это профессиональный сайт, и, вероятно, мой вопрос глуп (и очень полезен для тех людей, как я, которые учатся), но это великолепное, а не предотвращение других вопросов из моего аккаунта может научить меня, как использовать OpenMP? – Wellen

ответ

0

У меня есть решение, в методе работы класса вы должны написать перед циклом:

#pragma omp parallel for 

это все !!!

+0

Эй, Веллин, ты абсолютно прав! – Wellen

+0

Теперь только один вопрос ... если мне нужно распечатать матрицу, правильно ли использовать параллель #pragma omp перед двумя циклами? – Wellen

Смежные вопросы