|
34 / 34 / 4
Регистрация: 19.02.2013
Сообщений: 118
|
||||||
Наладить параллельные вычисления05.01.2015, 16:13. Показов 10376. Ответов 34
Метки || вычисления (Все метки)
Вот основной сценарий расчетов, которые мне нужны.
Погуглил как распараллелить вычисления в матлабе, на русском вообще довольно мало написано. Чтобы топик не выглядел неприлично типа:"Сделайте за меня мою работу", я вкратце опишу основные вопросы и допущения: Мне представляется, что мою проблему решит parfor, вместо for, если просто дописать, матлаб ругается на переменной Res:"Valid indices for 'Res' are restricted in PARFOR loops". Насколько я понял из небольшой статьи, в параллельном цикле нельзя модифицировать некоторые типы используемых переменных, так гарантируется то, что результаты вычислений в каждой итерации не зависят от результатов из прошлых итераций, в противном случае процесс невозможно запустить параллельно. Тут возникает правомерный вопрос: -А как же мне выводить результаты? В той статье, написано, что: "можно сохранить результаты расчёта в разные ячейки cell-array, и агрегировать результаты после завершения parfor цикла." -Что это такое и как это сделать? Кроме того, в упомянутом примере и другой литературе говорится о создании некоего пула. На сколько я понял, пул -это совокупность вычислительных ресурсов, которые участвуют в процессе. - Необходимо ли открывать Пул при вычислениях с parfor на своём компьютере (без удалённых кластеров)? - Как ускорить вычисления при помощи видеокарты? - Для этого годится любая видеокарта, или только со встроенной соответствующей технологией (CUDA или что-то подобное)? Такие в общем вопросики. Заранее спасибо!
0
|
||||||
| 05.01.2015, 16:13 | |
|
Ответы с готовыми решениями:
34
Параллельные вычисления Параллельные вычисления
|
|
34 / 34 / 4
Регистрация: 19.02.2013
Сообщений: 118
|
||||||
| 09.01.2016, 12:15 [ТС] | ||||||
|
У себя попробовал такой же код только с
Elapsed time is 0.910913 seconds. Elapsed time is 0.415450 seconds. Elapsed time is 1.943877 seconds. Очевидно для такой задачи векторизация работает эффективнее чем распараллеливание. parfor покажет более высокую производительность если в теле цикла будет м-функция.
0
|
||||||
|
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 10
|
|
| 09.01.2016, 12:19 | |
|
Krasme, второй вариант я на подкорку записал, но у меня много обработки в циклах идет. Поэтому хочется разобраться, как эти циклы распараллеливать. Поэтому интересует разница между 1 и 3 вариантом.
![]() У меня просто идет что-то типа статистического моделирования. Идет один большой цикл многократно, а внутри него много маленьких с заданием случайных чисел, их окрасом, добавлением сигнала, фильтрацией и т.п. Фактически, я одно и тоже в верхнем цикле делаю много раз - для набора статистики. Но его, заменой for на parfor, распараллелить не удается - он ругается на то, что не может определить переменные из внутренних циклов. Вот я и решил мелкие циклы распараллеливать, а толку почему-то нет.
0
|
|
|
7960 / 5121 / 2162
Регистрация: 02.02.2014
Сообщений: 13,496
|
|
| 09.01.2016, 12:28 | |
|
я параллельными вычислениями не занималась, но, как версия, может быть, "циклы в циклах" - не та задача, что удобна для распараллелирования?
0
|
|
|
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 10
|
|
| 09.01.2016, 12:32 | |
|
Krasme, для матлаба может быть, но с точки зрения здравого смысла, что может быть проще, чем распараллелить 500 независимых циклов? Так они по очереди на одном ядре крутятся, а так на 8-ми ядрах.
У меня правда, есть еще одна проблема: на рабочем компе команда matlabpool вообще не работает по не понятной причине, пока тренируюсь на ноуте.
0
|
|
|
34 / 34 / 4
Регистрация: 19.02.2013
Сообщений: 118
|
|
| 09.01.2016, 12:51 [ТС] | |
|
У меня была похожая ситуация, распараллеливать внутренние циклы зачастую не выгодно. попробуйте поместить содержимое внешнего цикла в отдельную м-функцию. Тогда ругаться при распараллеливании не должно, правда придётся сразу продумать как потом объединять результаты.
1
|
|
|
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 10
|
|||||||||||
| 09.01.2016, 14:01 | |||||||||||
|
Алексей89, как вывести результат я примерно понимаю, у меня после каждого цикла ответ либо 1, либо 0. А общий результат просто усреднение по числу циклов.
Проблема в том, что у меня много входных данных, в том числе матрицы. Матлаб пойдет, что я ему матрицу подсовываю определенного размера или её как-то описывать надо? Добавлено через 15 минут Krasme, я выяснил почему операция типа
![]() Добавлено через 9 минут А если исправить, то примерно тоже самое по времени выходит
0
|
|||||||||||
|
7960 / 5121 / 2162
Регистрация: 02.02.2014
Сообщений: 13,496
|
|||||||||||
| 09.01.2016, 14:03 | |||||||||||
|
верно, мой недогляд
![]() да, и по такому коду
0
|
|||||||||||
|
34 / 34 / 4
Регистрация: 19.02.2013
Сообщений: 118
|
|
| 09.01.2016, 14:16 [ТС] | |
|
Матрица передаваемая в функцию может быть любого размера, главное чтобы функция с ней работала корректно (не запрашивая значений из за пределов таблицы).
Смысл в том, что в один момент времени к массиву имеет доступ только 1 процесс, т.е. если в оперативе один массив, то процессы становятся в очередь, что сьедает почти всю выгоду от распараллеливания. При вызове же функции, всё что в неё передаётся - копируется в новое место в оперативе. Проще всего было бы если бы Вы выложили весь свой код а мы его упаковали для parfor.
0
|
|
|
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 10
|
|||||||||||
| 09.01.2016, 14:58 | |||||||||||
|
Krasme, те же яйца - вид с боку.
Elapsed time is 0.029463 seconds. Добавлено через 29 минут Алексей89, я бы с удовольствием весь код выложил, но, к сожалению, специфика работы не разрешает это делать. В принципе у меня получилось:
0
|
|||||||||||
|
7960 / 5121 / 2162
Регистрация: 02.02.2014
Сообщений: 13,496
|
|
| 09.01.2016, 15:09 | |
|
а если переменные сделать глобальными, а не как вход-выход для функции?
0
|
|
|
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 10
|
||||||
| 09.01.2016, 15:30 | ||||||
|
ALL
мне бы ещё решить проблему с основным компом, где не запускается matlabpool.
Добавлено через 2 минуты Krasme, не совсем понял. Если они из функции выводятся, разве они не являются глобальными? Добавлено через 18 минут Матлаб не разрешает выводит глобальные переменные из функции, даже если ей индекс присваиваю.
0
|
||||||
|
34 / 34 / 4
Регистрация: 19.02.2013
Сообщений: 118
|
|||||||||||
| 09.01.2016, 15:37 [ТС] | |||||||||||
|
У меня получилось так:
Исходный вариант Elapsed time is 0.006782 seconds. Elapsed time is 0.103077 seconds. вариант с parfor
Elapsed time is 1.463541 seconds. Векторизованный вариант
Elapsed time is 0.001149 seconds. Parfor удобно использовать, когда в цикле больше строк или есть вложенные циклы. Для этого случая он не нужен
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 10
|
||
| 09.01.2016, 16:24 | ||
|
По-пробовал на ноуте свой вариант - тоже самое: Elapsed time is 0.028909 seconds. Elapsed time is 0.035459 seconds. Векторный вариант выдает примерно тоже самое.
0
|
||
|
34 / 34 / 4
Регистрация: 19.02.2013
Сообщений: 118
|
|
| 09.01.2016, 16:35 [ТС] | |
|
Не знаю с чем это связано, но у меня каждый раз по разному выходит
причём следующие после первого разы на много быстрее: (Векторизованный вариант) Elapsed time is 0.000712 seconds. Elapsed time is 0.000903 seconds. Исходный вариант точно Ваш.
0
|
|
|
0 / 0 / 0
Регистрация: 09.01.2016
Сообщений: 10
|
||||||
| 09.01.2016, 16:42 | ||||||
|
Всё вкурил. Надо через функцию запускать сохраненную, тогда всё ок. А не как я в консоль копировать текст.
Elapsed time is 0.000514 seconds. Elapsed time is 0.011234 seconds. Elapsed time is 0.014725 seconds.
0
|
||||||
| 09.01.2016, 16:42 | |
|
Параллельные вычисления. Параллельные вычисления Параллельные вычисления Параллельные вычисления Параллельные вычисления средствами С++ 11 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|