Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Twi7ter
3 / 3 / 1
Регистрация: 27.03.2013
Сообщений: 147
#1

Ошибка с распределением цикла по потокам в Open MP - C++

03.03.2014, 22:49. Просмотров 1087. Ответов 3
Метки нет (Все метки)

нужно цикл for разделить м/у потоками,но почему то ошибки выдает ,первый раз с Open MP работаю,подскажите как исправить ,пожалуйста... пишу на VS 2010 Ultimate
ошибки:
Код
Ошибка	4	error C3004: shared: предложение не допускается в директиве OpenMP "for"	
Ошибка	5	error C3017: неверный вид проверки завершения в операторе For директивы OpenMP
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma omp parallel 
    {
#pragma omp for private(i,n,a) shared(x,X1,X2) 
    for( i=1;i<n;i++)
    {
        x=a+i*h;
 
        X1=f(x);
        X2+=X1;
    }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2014, 22:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка с распределением цикла по потокам в Open MP (C++):

CFilе::Open ошибка - Visual C++
Имеются две функции m_File объявлен как CFile m_File; BOOL CDataSocket::PrepareReceiveFile(LPCTSTR lpszFilename) { // close...

Ошибка с динамическим распределением памяти - C (СИ)
Прошу найти в моей программе ошибку и ее исправить, ибо у самого уже сил нет. Сама программа должна находить решение системы методом...

Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла - Pascal ABC
при запуске в цикле while в строке x:=x div 10; выдает ошибку &quot;Нельзя изменять значение переменной цикла внутри этого цикла&quot;, объясните...

Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла - Pascal ABC
при запуске в строке If i=k Then i:=i+1; выдает ошибку &quot;Нельзя изменять значение переменной цикла внутри этого цикла&quot;. Объясните почему...

Ошибка: "Нельзя изменять значение переменной цикла внутри этого цикла" - Pascal
&quot;Нельзя изменять значение переменной цикла внутри этого цикла&quot;. Выдает вот такую ошибку в 37 строчке. Помогите исправить Program...

Ошибка "нельзя изменять значение переменной цикла внутри цикла" - Pascal ABC
пишет, что &quot;нельзя изменять значение переменной цикла внутри этого цикла&quot; var a,c:array of integer; i,j:integer; min:integer; begin ...

3
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
05.03.2014, 00:29 #2
Директива for не поддерживает shared, их надо объявлять раньше.
Мне показалось, что требуется нечто подобное:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <cmath>
#include <omp.h>
 
double f(double x) { return cos(x); }
 
int main()
{
 
    const int n = 100000000;
    double a = M_PI/2;
    double b = 3*M_PI/2;
    double h = (b - a) / n;
    double X2 = 0;
 
#pragma omp parallel shared(a, h) 
    {
#pragma omp for reduction(+ : X2)
        for(int i=1;i<n;i++)
        {
            double x = a + i * h;
            double X1 = f(x);
            X2 += X1;
        }
    }
    std::cout << "result: " << X2*h << std::endl;
}
Добавлено через 34 минуты
А вообще, не вижу необходимости задавать здесь атрибуты для каких-либо переменных, кроме X2, которая участвует в редукции.
1
Twi7ter
3 / 3 / 1
Регистрация: 27.03.2013
Сообщений: 147
05.03.2014, 20:22  [ТС] #3
Я делал так вроде работает,но все равно спасибо, а почему нельзя n задавать где нибудь чз cin,а потом как границу цикла использовать,ругаться начинает?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double X1=0,X2=0,x=0,res=0,a=0;
    int i=1;
double h=(b-a)/n;
#pragma omp parallel private(x,X1) reduction(+:X2) 
{
        
        
    #pragma omp  for 
    for( i=1;i<n;i++)
    {
        x=a+i*h;
 
        X1=f(x);
        X2+=X1;
    }
    }
        
    res=(f(a)+2*X2+f(a+n*h))*(h/2);
0
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
05.03.2014, 21:31 #4
Цитата Сообщение от Twi7ter Посмотреть сообщение
а почему нельзя n задавать где нибудь чз cin,а потом как границу цикла использовать
Почему нельзя? Можно. Только const надо убрать, разумеется.
0
05.03.2014, 21:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2014, 21:31
Привет! Вот еще темы с ответами:

Ошибка DB not open - Delphi БД
Жила на одном компьютере программа, написанная на Дельфи с БД FIREBIRD, компьютер умер, присутствует hdd от него, попытки запустить...

Ошибка: File already open (VB 6) - Visual Basic
Здравствуйте форумчане! Есть лабораторная университетская, задание таково: добавить в файл имя возраст пол человека и вывести мужчин с...

Ошибка: Could not open boxfile - VBA
Добрового времени суток. Наверное некоторые из вас знают известную игру Perfect World. У меня была виндовс 7, снёс из-за того что каким то...

Ошибка: Cannot perform operation db is not open - Delphi БД
Господа знатоки, помогите пожалуйста разобраться! есть база **.GDB в ibexpert открывается без проблем в delphi прописываю путь к базу в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru