Как ускорить вычисления в Matlab?

Форум, посвященный общим вопросам, связанным с MATLAB

Модератор: Admin

evzhur
Пользователь
Сообщения: 5
Зарегистрирован: Вс дек 07, 2014 9:44 pm

Как ускорить вычисления в Matlab?

Сообщение evzhur » Пт май 04, 2018 12:55 pm

Всем привет. Мне надо сделать вычисления в матлаб -- много циклов и действий с матрицами. Запускаю программу, жду два дня, затем запускаю программу, жду два-три дня и т.д. При этом из 8 гб оперативки задействовано всего 1 гб, а процессор на 10%. То есть Matlab считает, а у меня два браузера открыто с 30 вкладками и я еще в WOT на максималках играю. Вопрос - можно ли как-то заставить Matlab использовать ресурсы компьютера полностью? На самом деле я уже вычитал в инете ответ, что нет, но вдруг это не так.

Сегодня пришла гениальная идея - запустить несколько программ Matlab. Я запустил на одном компьютере 4 копии Matlab и каждая копия стала выполнять свою программу. И соответственно я получил 4 результата. Оказывается так можно было? Или есть подводные камни? Сейчас же пришла еще одна мысль - запускать не копии, а установить Matlab на четыре диска и запускать с каждого диска все четыре в одно время. Возможно будет быстрее считать.

Grizzly
Пользователь
Сообщения: 830
Зарегистрирован: Сб май 28, 2011 2:00 am

Re: Как ускорить вычисления в Matlab?

Сообщение Grizzly » Пт май 04, 2018 2:32 pm

parfor, если задача распараллеливается. Если нет, то вполне возможно запускать несколько копий MATLAB. От установки на несколько дисков ничего не изменится :) Вычисления в ОЗУ происходят.

Если у вас много циклов, то нужно попробовать свести их к матричным вычислениям, тогда получится загрузить ЦП сильнее, а результаты получить быстрее. Если не сводится задача к матричному решению, то поможет генерация кода и создание mex-файлов. В случае множества вложенных циклов и условий такой подход потенциально поможет в несколько раз ускорить вычисления.

Возможно, изначально неправильно был выбран язык для моделирования... В ряде случаев тот же Си может дать куда большую скорость.

sandy
Эксперт
Сообщения: 5446
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Как ускорить вычисления в Matlab?

Сообщение sandy » Сб май 05, 2018 11:37 am

В ряде случаев тот же Си может дать куда большую скорость.

Если в основе кода матричные операции, то вряд ли. Они слишком хорошо оптимизированы в ядре матлаба, включая распараллеливание по ядрам.

А вообще - про parfor уже написали. Еще стоит взглянуть, на что конкретно тратится время при работе программы:
1. profile on
2. Запустить программу на каком-нибудь умеренном объеме данных, чтобы она все-таки не несколько дней работала
3. profile report
4. Проанализировать результаты и подумать, что можно сделать.

Ну и документацию по повышению быстродействия стоит почитать, поскольку есть всякие не очень очевидные вещи - например, внутри циклов протовопоказано вызывать функции, представляющие собой m-файлы.
С уважением

Александр Сергиенко

evzhur
Пользователь
Сообщения: 5
Зарегистрирован: Вс дек 07, 2014 9:44 pm

Re: Как ускорить вычисления в Matlab?

Сообщение evzhur » Вс май 06, 2018 8:14 pm

Спасибо. У меня как раз десять циклов вложенных и внутри m файл в виде функции. Не думал, что это может вызывать проблемы.

maria_kipke
Пользователь
Сообщения: 90
Зарегистрирован: Чт окт 05, 2017 4:37 pm

Re: Как ускорить вычисления в Matlab?

Сообщение maria_kipke » Чт май 10, 2018 7:52 am

Про циклы, понятно, но вот, что касается вызова функции из файла, не заметила разницы, между вызовом из отдельного файла, и вызовом из того же скрипта, хотя, целью стояла, именно, оптимизация. Вот, что реально помогает - использование механизма вложенных функций и статических переменных.

Александр96
Пользователь
Сообщения: 1
Зарегистрирован: Чт май 17, 2018 7:46 pm

Re: Как ускорить вычисления в Matlab?

Сообщение Александр96 » Чт май 17, 2018 7:50 pm

Доброго всем вечера! У меня массив с количеством элементов около 1 млн . Мне их нужно в цикле перебрать и переобозначить элементы по условию. Как ускорить процесс ?Молотит уже часа 4 и ничего

Jey
Пользователь
Сообщения: 2658
Зарегистрирован: Вт сен 12, 2006 2:21 pm

Re: Как ускорить вычисления в Matlab?

Сообщение Jey » Пт май 18, 2018 8:54 am

Выполнить эту задачу на С++.
Помощь в Матлабе / Matlab, Qt за деньги.
Помощь в html, css, jquery, MVC за деньги.
Помощь в C# / C sharp / Си шарп за деньги.
Вконтакте: https://vk.com/id122995106
или Личное сообщение на форуме.
http://ПунктыПроката.рф

sandy
Эксперт
Сообщения: 5446
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Как ускорить вычисления в Matlab?

Сообщение sandy » Пт май 18, 2018 10:52 am

Александр96 писал(а):Доброго всем вечера! У меня массив с количеством элементов около 1 млн . Мне их нужно в цикле перебрать и переобозначить элементы по условию. Как ускорить процесс ?Молотит уже часа 4 и ничего

Код покажите. Без этого ничего конкретного сказать нельзя.
В профайлере пробовали смотреть, на что время тратится?
С уважением



Александр Сергиенко