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

C++

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

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

03.03.2014, 22:49. Просмотров 1023. Ответов 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
Посмотрите здесь:

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

Ошибка средств компоновщика LNK1181 // Open cv 3.0.0 - C++
прошу помощи если кто работал с Open cv.. загружаю проверочный код отсюда...

C++Builder XE2: 51 ошибка, unable to open... - C++ Builder
Доброго времени суток! Перешел недавно на версию XE2 и ... замучился! Иногда при компиляции проекта линковщик выдает всегда ровно одни и те...

Ошибка Unable to open OBJ file - C++ Builder
Добрый вечер возникает такая проблема: скорее всего там имя файла.obj, как его получить?

[ILINK32 Error] Fatal: Could not open .\Debug\Win32\Variant_1.ilf (project already open in IDE?) - C++ Builder
Fatal: Could not open .\Debug\Win32\Variant_1.ilf (project already open in IDE?) на русском Fatal: Не удалось открыть \ Debug \...

Ошибка Unable to open include file '****.hpp' - C++ Builder
Установил набор компонентов AlphaControls, и при добовлении какого-нибудь компонента например sEdit на форму появляется 4 ошибки.В Library...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
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);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2014, 21:31     Ошибка с распределением цикла по потокам в Open MP
Еще ссылки по теме:

Ошибка Cannot open file: ./sysdeps/x86_64/strlen.S - C++
#include &lt;cstring&gt; #include &lt;cstdlib&gt; #include &lt;cstdio&gt; #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; ...

аналоги потокам? - C++ Builder
короче есть прибор, пишу программу которая бы снимала данные с него... можно поставить таймер и по тику принимать их... Но блин если...

Тест по потокам - C++
Стыдно уже просить, но только что скинули доп. список вопросов по потокам(( Была всего одна лекция и ничего не ясно. Если не трудно,...

Ошибка [ILINK32 Error] Fatal: Unable to open file 'IDBASECOMPONENT.OBJ' - C++ Builder
Вчера все работало, компилилось и т.д Сегодня открываю проект, компилю и выдает такое Fatal: Unable to open file...

ошибка 'CloseCollection g_coolCollection.Open(collectionname) dwError=7' при установке MSDN - C++
При установке msdn98 в самом конце появляется ошибка : 'CloseCollection g_coolCollection.Open(collectionname) dwError=7' и установка...

Мануал по сокетам и потокам - C++
Где таковой достать? желательно на русском,гугл не помогает, может кто видел книжонки ? или хотя бы по потокам что бы понять как это...


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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
05.03.2014, 21:31     Ошибка с распределением цикла по потокам в Open MP #4
Цитата Сообщение от Twi7ter Посмотреть сообщение
а почему нельзя n задавать где нибудь чз cin,а потом как границу цикла использовать
Почему нельзя? Можно. Только const надо убрать, разумеется.
Yandex
Объявления
05.03.2014, 21:31     Ошибка с распределением цикла по потокам в Open MP
Ответ Создать тему
Опции темы

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