|
Master of Orion
|
|
| 20.02.2015, 11:27 | |
|
korvin_, это был пример, никто не мешает взять сколь угодно больше N.
А в шарпе насколько я помню, он возьмет сколько-то потоков из пула, будет им пихать задачи, сумма будет считаться локально для каждого потока, после этого только в конце будет количество синхронизаций по количеству потоков при записи в итоговую переменную. В результате все плюсы параллелизации без минусов. Да, придется попросить тредпул выделить сколько-то потоков, но этот оверхед просто копеечный. На малых задачах на него пофиг, на средних и больше профит только, причем с размером задачи он растет.
0
|
|
| 20.02.2015, 11:27 | |
|
Ответы с готовыми решениями:
926
ООП или функции
литература и/или статьи по ООП |
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|||
| 20.02.2015, 14:27 | |||
|
0
|
|||
|
Master of Orion
|
|||
| 20.02.2015, 15:08 | |||
|
0
|
|||
|
Master of Orion
|
|
| 20.02.2015, 15:16 | |
|
Если вопрос про внутреннее устройство, то там все очень умно параллелится с минимумом накладных расходов. Система автоматически определяет оптимальное количество потоков, хотя можно вручную задать, а можно оставить на откуп заложенной эвристике, после чего умно разбивает по ним. Если получится, найду еще картинку.
0
|
|
|
Модератор
|
||||||
| 20.02.2015, 15:17 | ||||||
|
Psilon, В этом выражении
Из синтаксиса непонятно где граница распараллеливания.
0
|
||||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|||||||||||||
| 20.02.2015, 15:28 | |||||||||||||
|
Кликните здесь для просмотра всего текста
Просто из C# кода не совсем очевидно, что оно работает именно так.
0
|
|||||||||||||
|
Master of Orion
|
|||
| 20.02.2015, 15:29 | |||
|
KolodeznyDiver, метод AsParallel() возвращает обертку (ParallelQuery<T>) над коллекцией, которую ей передали. Все поледующие методы в цепочке будут вызваны параллельно. То есть и Select и Sum.
Немного об устройстве:
0
|
|||
|
Модератор
|
|
| 20.02.2015, 15:56 | |
|
Psilon, Приведённый Вами материал очень интересен. Но, мне, по прежнему, непонятна ситуация с Sum(). Дело в том, что как распаралелить преобразование (или фильтрацию) каждого элемента контейнера - понятно. Может происходить автоматом. А преобразования вида "из многих в один" не очевидны для распарралеливания. К примеру. для Sum() (или среднего, или максимума или даже сортировки) мы можем, имея по несколько элементов обрабатываемого контейнера на трэд, их распараллелить, но для каждого по разному алгоритму. К примеру сумма частичных сумм равна сумме сразу всего, но нет так с арифметическим средним.
Тем, более, что получится для свёртки в которой промежуточный результат зависит от предыдущих и она может вообще не распараллеливаться? Т.е. для некоторых ф-ий, типа Sum описаны свои алгоритмы распараллеливания, а если встретится ф-ия, стратегия распараллеливания которой неизвестна, то до её выполнения должны все треды сойтись в один?
0
|
|
|
Master of Orion
|
|
| 20.02.2015, 16:06 | |
|
KolodeznyDiver, ну как-то он всё-таки параллелит, учитывая трехкратное превосходство уже после 10 миллионов целых чисел (а тут чем сложнее задача, тем больше профит, потому что на создание потоков для примитивных чисел много сил уходит).
Я пробовал копаться в исходниках фреймворка - нихрена не понял если вдруг интересно, можете сами поизучать ![]() http://referencesource.microso... merable.cs
0
|
|
|
Master of Orion
|
|
| 20.02.2015, 16:21 | |
|
KolodeznyDiver, будет. Пример же выше. Я же даже использовал обобщенный Aggregate (это так называется reduce в шарпе), чтобы не говорить, что в Sum() или Average() какие-то специализированные алгоритмы.
0
|
|
|
Модератор
|
|||||||
| 20.02.2015, 16:45 | |||||||
|
А если попробовать что то типа Aggregate((acc,elm) => ((abs(acc) % 10)> 5)? acc*acc+elm : elm-acc) ? Добавлено через 4 минуты ... хотя ... окводратуривание накапливаемого значения - это уж перебор - переполнится быстро скажем
0
|
|||||||
|
Master of Orion
|
||
| 20.02.2015, 16:53 | ||
|
KolodeznyDiver, всё, понял. Смысл в том, что присвоение как и инкремент в шарпе - это атомарная операция. Как только пытаемся сделать функцию сколько-нибудь сложной, тут же получаем расхождение из-за состояния гонки. Нужно четко указывать, что и как делать, тогда он сможет всё сделать правильно:
http://stackoverflow.com/quest... oing-wrong http://blogs.msdn.com/b/pfxtea... 76194.aspx ![]() Добавлено через 6 минут кстати по ссылке на мсдн как раз ваш случай про Average
0
|
||
|
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
|
|
| 20.02.2015, 17:07 | |
|
0
|
|
|
Модератор
|
|||
| 20.02.2015, 17:25 | |||
|
Если так, то кошмар - ведёт к трудно отлавливаемым багам. Насчёт атомарности: а Вы попробуйте сложную ф-ию в Select, когда она просто применяется к каждому элементу массива. Думаю, в этом случае, всё правильно без дополнительных плясок получится. И, проверьте, всё таки просто одни Sum() и Average() на больших массивах. Добавлено через 5 минут И для оленьпиад удобно - как не напиши, компилятор в 1 секундк код утопчет.
0
|
|||
|
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
|
||||||||
| 20.02.2015, 17:40 | ||||||||
![]() А почему так?
0
|
||||||||
|
Master of Orion
|
||||||||||||||
| 20.02.2015, 17:46 | ||||||||||||||
А когда надо - не трудно и подумать чутка.
0
|
||||||||||||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|
| 20.02.2015, 17:49 | |
|
0
|
|
| 20.02.2015, 17:49 | |
|
Гавнокоддинг или учить ООП? прога или игра ооп
Определить, программа с ооп или нет Изучаю ООП можно или нет так? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|