PARALLEL.RU

Дискуссионный клуб по параллельным вычислениям
Текущее время: 13 дек 17 0:52

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: проблема с OpenMP reduction
СообщениеДобавлено: 8 ноя 10 18:40 
Не в сети

Зарегистрирован: 8 ноя 10 18:27
Сообщения: 5
Может кто подскажет в чем дело.
Имеется следующее.

inline static Type Vec_Vec(const mtl::dense1D< Type > &A,const mtl::dense1D< Type > &B){
Type n = A[0]*B[0];
#pragma omp parallel for reduction(+:n)
for(int_type i = 1; i < B.size(); i++)
n += A[i] * B[i];
return(n);
}

Type может быть: double либо complex

при компиляции (Visual Studio 2008) возникает ошибка:
C3031 'n': variable in reduction clause must have scalar arithmetic type


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с OpenMP reduction
СообщениеДобавлено: 8 ноя 10 19:18 
Не в сети

Зарегистрирован: 5 мар 05 14:01
Сообщения: 74
Видимо, #pragma omp проверяет типы в момент компиляции, а не в момент инстанцирования. А до инстанцирования тип неизвестен, вот он и ругается. Так что стоит попробовать отказаться от шаблона, и сделать пару перегруженных функций.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с OpenMP reduction
СообщениеДобавлено: 9 ноя 10 14:32 
Не в сети

Зарегистрирован: 8 ноя 10 18:27
Сообщения: 5
coctic писал(а):
Видимо, #pragma omp проверяет типы в момент компиляции, а не в момент инстанцирования. А до инстанцирования тип неизвестен, вот он и ругается. Так что стоит попробовать отказаться от шаблона, и сделать пару перегруженных функций.

попробовал.не работает.на функцию с данными complex ругается( и опять именно на reduction


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с OpenMP reduction
СообщениеДобавлено: 9 ноя 10 14:50 
Не в сети

Зарегистрирован: 5 мар 05 14:01
Сообщения: 74
А, ну да, все верно. Он же пишет, что хочет scalar type. Так что complex - не пойдет. И вроде как по стандарту он даже почти прав:
The operator specified in a reduction clause cannot be overloaded with respect to the list items that appear in that clause.
Так что с complex видимо не выйдет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с OpenMP reduction
СообщениеДобавлено: 9 ноя 10 15:22 
Не в сети

Зарегистрирован: 8 ноя 10 18:27
Сообщения: 5
coctic писал(а):
А, ну да, все верно. Он же пишет, что хочет scalar type. Так что complex - не пойдет. И вроде как по стандарту он даже почти прав:
The operator specified in a reduction clause cannot be overloaded with respect to the list items that appear in that clause.
Так что с complex видимо не выйдет.

cпасибо.
Странно, то что с помощью прагмы удается, складывать вектора, умножать матрицу на вектор и не важно комплексные они или нет (вектора, матрицы), а вот именно reduction нельзя использовать при комплексных данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с OpenMP reduction
СообщениеДобавлено: 10 ноя 10 16:55 
Не в сети

Зарегистрирован: 21 май 08 0:32
Сообщения: 14
Откуда: ОФиВП ФФ МГУ
Ничего странного. Если вы имели в виду, что можно распараллелить цикл, внутри которого производятся операции с комплексными числами. Эта операция происходит внутри цикла с полном соответствии с синтаксисом C++, а в случае reduction это уже операция внутри OpenMP и зависит от реализации.

Можно попробовать обойти это ограничение, если в конце цикла присваивать Re и Im в отдельные переменные и редуцировать их. Правда в этом случае придётся делать синхронизацию в конце цикла (не получится с nowait) и это подойдёт только для сложения, а не для умножения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с OpenMP reduction
СообщениеДобавлено: 16 ноя 10 15:02 
Не в сети

Зарегистрирован: 8 ноя 10 18:27
Сообщения: 5
Sannis писал(а):
в случае reduction это уже операция внутри OpenMP и зависит от реализации.

спасибо. видимо. вы абсолютно правы.

Sannis писал(а):
Можно попробовать обойти это ограничение, если в конце цикла присваивать Re и Im в отдельные переменные и редуцировать их. Правда в этом случае придётся делать синхронизацию в конце цикла (не получится с nowait) и это подойдёт только для сложения, а не для умножения.

тоже про это думал, но похоже выеденного яйца стоить не будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с OpenMP reduction
СообщениеДобавлено: 18 мар 15 9:25 
Не в сети

Зарегистрирован: 18 мар 15 9:22
Сообщения: 1
Оператор, указанный в пункте сокращение не может быть перегружен по отношению к пунктам списка, которые появляются в этой статье.
Так что с complex видимо не выйдет.

_________________
We offer best quality pmp certification test papers and test-king ielts exam preparation dumps materials. You can get our 100% guaranteed questions coloradomesa.edu to help you in passing the real exam. flsouthern.edu


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB