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

PPL - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
24.08.2010, 09:13     PPL #1
Сегодня наткнулся на такую тему, как парраллельные вычисления в 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 или где-то еще встречается?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2010, 09:13     PPL
Посмотрите здесь:

Delphi Ошибка при завершении PPL Task

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

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


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

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

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

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

Метки
concurrency runtime, ppl
Опции темы

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