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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
#1

PPL - C++

24.08.2010, 09:13. Просмотров 1394. Ответов 6

Сегодня наткнулся на такую тему, как парраллельные вычисления в VS2010.
Для примера:
C++
1
2
3
4
5
6
7
#include <ppl.h>
 
int main()
{
   int nsum = 0;
   Concurrency::parallel_for(1, 100001, [&](int n){nsum += n;});
}
Всего PPL предлагает следующие вещи.

Парралельные алгоритмы:
  • parralel_for
  • parralel_for_each
  • parralel_invoke
Парраллельные контейнеры:
  • concurrent_vector
  • concurrent_queue
  • combinable
Парраллельные задачи:
  • Structured
  • Unstructured

Хотелось бы узнать, что это вообще за зверь такой, фишка это только VS2010 или где-то еще встречается?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2010, 09:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос PPL (C++):

TCriticalSection в библиотеке PPL(TTask) - Delphi
Добрый день уважаемые форумчане. Возник вопрос. Имеется глобальная переменная var global_var: String; Так же имеется...

Ошибка при завершении PPL Task - Delphi
Есть такая процедура: procedure TForm1.beginCrossDetectTask(platform_id: Integer); var pl_id : Integer; db_query1: TFDQuery;...

TCriticalSection в библиотеке PPL(TTask) - Delphi
Добрый день уважаемые форумчане. Возник вопрос. Имеется глобальная переменная var global_var: String; Так же имеется...

Ошибка при завершении PPL Task - Delphi
Есть такая процедура: procedure TForm1.beginCrossDetectTask(platform_id: Integer); var pl_id : Integer; db_query1: TFDQuery;...

TCriticalSection в библиотеке PPL(TTask) - Delphi
Добрый день уважаемые форумчане. Возник вопрос. Имеется глобальная переменная var global_var: String; Так же имеется...

Ошибка при завершении PPL Task - Delphi
Есть такая процедура: procedure TForm1.beginCrossDetectTask(platform_id: Integer); var pl_id : Integer; db_query1: TFDQuery;...

TCriticalSection в библиотеке PPL(TTask) - Delphi
Добрый день уважаемые форумчане. Возник вопрос. Имеется глобальная переменная var global_var: String; Так же имеется...

Ошибка при завершении PPL Task - Delphi
Есть такая процедура: procedure TForm1.beginCrossDetectTask(platform_id: Integer); var pl_id : Integer; db_query1: TFDQuery;...

TCriticalSection в библиотеке PPL(TTask) - Delphi
Добрый день уважаемые форумчане. Возник вопрос. Имеется глобальная переменная var global_var: String; Так же имеется...

Ошибка при завершении PPL Task - Delphi
Есть такая процедура: procedure TForm1.beginCrossDetectTask(platform_id: Integer); var pl_id : Integer; db_query1: TFDQuery;...

TCriticalSection в библиотеке PPL(TTask) - Delphi
Добрый день уважаемые форумчане. Возник вопрос. Имеется глобальная переменная var global_var: String; Так же имеется...

Ошибка при завершении PPL Task - Delphi
Есть такая процедура: procedure TForm1.beginCrossDetectTask(platform_id: Integer); var pl_id : Integer; db_query1: TFDQuery;...

TCriticalSection в библиотеке PPL(TTask) - Delphi
Добрый день уважаемые форумчане. Возник вопрос. Имеется глобальная переменная var global_var: String; Так же имеется...

Ошибка при завершении PPL Task - Delphi
Есть такая процедура: procedure TForm1.beginCrossDetectTask(platform_id: Integer); var p

TCriticalSection в библиотеке PPL(TTask) - Delphi
Добрый день уважаемые форумчане. Возник вопрос. Имеется глобальная переменная var global_var: String; Так же имеется...

Ошибка при завершении PPL Task - Delphi
Есть такая процедура: procedure TForm1.beginCrossDetectTask(platform_id: Integer); var pl_id : Integer; db_query1: TFDQuery;...


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

Или воспользуйтесь поиском по форуму:
6
MikeSoft
Эксперт С++
3800 / 1776 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
24.08.2010, 13:40 #2
fasked, честно говоря, раньше о таком не слышал...
Описания и примеры есть здесь: Библиотека параллельных шаблонов
И ещё немного про отладку: Parallel Debugging


Судя из "вопросов, заданных гуглу" использование таких методов доступно пока только в VS2010.

В VS2008 я юзал OMP ...
Пример использования я приводил здесь: Оптимизация кода
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
03.04.2015, 01:59 #3
А boost::tread это не одно и тоже что и PPL? Чем они отличаются? В boost::tread там все понятно создал много потоков и вычисляешь, а в PPL как потоки создаются? Я то и то пробовал, PPL намного медленее работает, потому что не понятно как создать потоки, а в boost создал 17 потоков и быстрее считает намного, можно и 170 потоков создать вообще ускорится наверно, не пробовал) .

Добавлено через 7 минут
Есть массив из 18000 элементов и для каждого элемента нужно сделать вычисление в функции, в одном потоке функция работать будет несколько суток, сделал с помощью ППЛ, быстрее работает, но все рамно медленно.
Разбил по 1к элементов и создал 18 потоков и по сравнению с ППЛ просто летает, очень быстро вычисляет. Правда процессор грузится 50 - 70%. А с ППЛ ничего не грузится, как то оно не понятно как параллельно вычисляет. Так что получается ППЛ это фигня boost::thread лучше да?
0
Super__Enot
33 / 43 / 8
Регистрация: 14.03.2015
Сообщений: 134
03.04.2015, 02:10 #4
Цитата Сообщение от ninja2 Посмотреть сообщение
можно и 170 потоков создать вообще ускорится наверно, не пробовал) .
всему есть придел. А вообще нет смысла создавать потоков больше чем n*1.5, где n - число процессоров или ядер. PPL также как и boost предназначен для создания большого количества потоков, однако он не может равномерно распределять их исходя из ресурсов компьютера. Для ускорения работы программы путем ее распаралеливания лучше подходит MPI.

Добавлено через 5 минут
Цитата Сообщение от ninja2 Посмотреть сообщение
А boost::tread это не одно и тоже что и PPL? Чем они отличаются?
У PPL есть поддержка межпроцессорных сообщений об ошибках и контроль за самостоянием каждого процесса, эти отчеты жрут процессорное время так ка протцу приходится отвлекаться на их обработку.
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
03.04.2015, 02:11 #5
Цитата Сообщение от Super__Enot Посмотреть сообщение
А вообще нет смысла создавать потоков больше чем n*1.5, где n - число процессоров или ядер.
2 процессора и 18 потоков создал, так работает каждый поток. А ППЛ вообще медленно, даже компьютер не грузит.
0
Super__Enot
33 / 43 / 8
Регистрация: 14.03.2015
Сообщений: 134
03.04.2015, 02:27 #6
В PPL есть система прерываний и оценка приоритета выполняемой задачи именно по этому он работает медленнее, но зато он более приятен обычному пользователю(и программа вроде быстрее работает и комп вроде как не виснет ),
Цитата Сообщение от ninja2 Посмотреть сообщение
Правда процессор грузится 50 - 70%.
при использовании MPI загрузка каждого ядра(процессора)-100% правда винда(или Linex) зависает практически мертво, но зато прога работает максимально быстро. плю не тратится время на обмен сообщениями между процессами. Есть процесс МАСТЕР он один раз рассылает данные всем процессам и команду старт, дальше каждый процесс работает (грубо говоря) как отдельный комп и не шлет ни коких сообщений о своем статусе не мастеру не другим слейвам.
1
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,688
03.04.2015, 02:36 #7
Цитата Сообщение от Super__Enot Посмотреть сообщение
А вообще нет смысла создавать потоков больше чем n*1.5, где n - число процессоров или ядер.
можно ссылку где вычитали такое?
0
Yandex
Объявления
03.04.2015, 02:36
Ответ Создать тему
Опции темы

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