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

C++

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

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

03.03.2014, 22:49. Просмотров 906. Ответов 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;
    }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2014, 22:49     Ошибка с распределением цикла по потокам в Open MP
Посмотрите здесь:

Мануал по сокетам и потокам C++
[ILINK32 Error] Fatal: Could not open .\Debug\Win32\Variant_1.ilf (project already open in IDE?) C++ Builder
CFilе::Open ошибка Visual C++
C++ Builder аналоги потокам?
C++ Builder C++Builder XE2: 51 ошибка, unable to open...
C++ ошибка 'CloseCollection g_coolCollection.Open(collectionname) dwError=7' при установке MSDN
Ошибка [ILINK32 Error] Fatal: Unable to open file 'IDBASECOMPONENT.OBJ' C++ Builder
Ошибка Unable to open include file '****.hpp' C++ Builder
Тест по потокам C++
C++ Builder Ошибка Unable to open OBJ file
Ошибка Cannot open file: ./sysdeps/x86_64/strlen.S C++
C++ Ошибка средств компоновщика LNK1181 // Open cv 3.0.0

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
05.03.2014, 00:29     Ошибка с распределением цикла по потокам в Open MP #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, которая участвует в редукции.
Twi7ter
3 / 3 / 1
Регистрация: 27.03.2013
Сообщений: 147
05.03.2014, 20:22  [ТС]     Ошибка с распределением цикла по потокам в Open MP #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);
grizlik78
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
05.03.2014, 21:31     Ошибка с распределением цикла по потокам в Open MP #4
Цитата Сообщение от Twi7ter Посмотреть сообщение
а почему нельзя n задавать где нибудь чз cin,а потом как границу цикла использовать
Почему нельзя? Можно. Только const надо убрать, разумеется.
Yandex
Объявления
05.03.2014, 21:31     Ошибка с распределением цикла по потокам в Open MP
Ответ Создать тему
Опции темы

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