Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: При моделировании Matlab'ом загрузка процессора не более 50%
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
GenEv
При моделировании загрузка процессора не более 50%.
Используется Matlab2008a x64 на WinViste x64.
Процессор 2-ядерный E6750 2.66 ГГц, 4 гига оперативки.
Есть ли какие настройки в Matlabe позволяющие использовать на полную процессор? или настройки Windows. Так же пробывал на WinXP x64 то же самое не более 50%.
Tue
Включите использование двухядерности в настройках.
GenEv
При моделировании задейственны все 2 ядра
syoma
Все зависит от модели, но даже при включенной многопроцессорности - опция в File - Preferences - Multithreading - у меня она больше одного процессора не загружает. В принципе все доходчиво описано самими Mathworks http://www.mathworks.com/access/helpdesk/h...ttonName=Search
то есть в основном вычисления выполняются последовательно, для каждой следующей команды нужны результаты предыдущей. Только некоторые инструкции можно распарралелить. Поэтому загрузить оба проца на 100% можно только вручную распараллелив вычисления - Distributed toolbox, но это уже другой вопрос и так легко не делается.
А по повоказаниям таскменеджера у меня на одной машине матлаб по 50% двух проциков забирал, а на другой 100%, но только одного. Помоему ему нельзя верить.
nsemenoff
Цитата(syoma @ Apr 4 2008, 17:48) *
Все зависит от модели, но даже при включенной многопроцессорности - опция в File - Preferences - Multithreading - у меня она больше одного процессора не загружает.
[...]
А по повоказаниям таскменеджера у меня на одной машине матлаб по 50% двух проциков забирал, а на другой 100%, но только одного. Помоему ему нельзя верить.


Каждому приложению в любой многозаданой ОС можно выделять определенное количество ресурсов... И в винде в том числе можно назначить приоритет пользовательскому процессу matlab повыше. Это сделает работу на клавиатуре и с мышкой более тормозной, но зато на 15-20% ускорит вычисления. Проверялось неоднократно smile.gif
Просто винда в самом деле не дает по умолчанию более 50% всего времени одному приложению, чтобы пользователь чувствовал себя комфортно smile.gif
syoma
Цитата
Просто винда в самом деле не дает по умолчанию более 50% всего времени одному приложению, чтобы пользователь чувствовал себя комфортно

Не согласен. Это возможно дает прирост производительности на одноядерных системах, но в многоядерных это не работает.
У меня проц. Core Quad - то есть 4 вычислительных ядра. При вашем подходе, оно должно два процессора загружать, но так никогда не происходит.
Нажмите для просмотра прикрепленного файла

В лучшем случае оно 100% грузит одно ядро, в худшем Таскменеджер показывает одинаковую нагрузку всех ядер, но суммарно все равно 25% загрузки.

При экспериментах с различными приоритетами и выбором загружаемых ядер получилась такая картинка
Нажмите для просмотра прикрепленного файла
Я выбрал максимальный приоритет для матлаба и сначала 2 ядра в пользование а затем одно. В итоге он одно стал грузить 100%, а если на 2 то распределил как-то, но суммарная загрузка двух ядер осталась та же. Если выбрать 3 ядра, то он каждое на 33% загружает и все. С моими экспериментами 3-е ядро как простаивало так и простаивает и позволяет работать всему остальному без тормозов. 4-е я загрузил XST - синтезатором для VHDL. При експериментах выяснилось, что эта прога также больше 1-го ядра не загружает. В итоге ничего не тормозит, но заставить матлаб распаралелиться или увеличить скорость вычислений таким образом не удается.
nsemenoff
Цитата(syoma @ Apr 18 2008, 12:46) *
Не согласен. Это возможно дает прирост производительности на одноядерных системах, но в многоядерных это не работает.


Есть алгоритмы, которые можно параллелить, есть такие, которые параллелить нельзя. Матлаб является линейным интерпретатором, и в общем случае он действительно не позволяет вычислять с использованием всех доступных процессоров. Но можно один процессор полностью занять матлабом, повысив приоритет, что Вы и сделали. Но ведь раньше у вас было отдано матлабу еще меньше ресурсов, разве не так?
syoma
Не так. Как жрал 25% ресурсов так и жрет. Приоритет, как я только что выяснил ни на что не влияет. А выбор процессора только определяет на сколько процессоров он раскидывает свой поток. Если 1 - то он загружает 1 проц на 100% - другие имеют 0% загрузки.
2 - 50% 50% 0% 0%
3 - 33% 33% 33% 0%
4 - 25% 25% 25% 25%

Только единственное, что загрузка не всегда одинаковая у всех ядер. Но результат всегда одинаков и не зависит от количества задействованых процессоров - 25% от всей мощности компа.
Возможно, что даже при ограничении 1-им процессором скорость должна возрасти, так как нет затрат времени на раскидывание инструкций между ядрами.
DRUID3
Цитата(Nick Semenoff @ Apr 18 2008, 16:32) *
Есть алгоритмы, которые можно параллелить, есть такие, которые параллелить нельзя.

Именно! Правильность организации многопоточных приложений это головная боль для программиста вообще-то требующая отдельной квалификации. Ну а параллельные вычисления - это абсолютно другие алгоритмы. Потому то так и дороги суперкомпы. И MatCAD так не написан изначально, может в будущем ситуауия и изменится. Но сейчас потоки 1, 2, 3, 4 разбрасываются на процы в виде 1, 3 и 2, 4. Ожидать 4-х кратного прироста производительности купив 4-х ядерный проц несколько наивно. Ни ОС, ни прикладные программы пока не специализируются на многоядерности.

Цитата(syoma @ Apr 18 2008, 16:58) *
Не так. Как жрал 25% ресурсов так и жрет. Приоритет, как я только что выяснил ни на что не влияет. А выбор процессора только определяет на сколько процессоров он раскидывает свой поток.

Да поток вообще нельзя раскидать даже на 2-а проца!!! Это атомарная единица исполнения в операционной системе.
Цитата(syoma @ Apr 18 2008, 16:58) *
Возможно, что даже при ограничении 1-им процессором скорость должна возрасти, так как нет затрат времени на раскидывание инструкций между ядрами.

А этих затрат вообще нет, просто потоки выполняются не поочередно на одном ядре, а так же поочередно на двух.
samurad
Цитата(syoma @ Apr 4 2008, 16:48) *
Все зависит от модели, но даже при включенной многопроцессорности - опция в File - Preferences - Multithreading - у меня она больше одного процессора не загружает. В принципе все доходчиво описано самими Mathworks http://www.mathworks.com/access/helpdesk/h...ttonName=Search
то есть в основном вычисления выполняются последовательно, для каждой следующей команды нужны результаты предыдущей. Только некоторые инструкции можно распарралелить. Поэтому загрузить оба проца на 100% можно только вручную распараллелив вычисления - Distributed toolbox, но это уже другой вопрос и так легко не делается.
А по повоказаниям таскменеджера у меня на одной машине матлаб по 50% двух проциков забирал, а на другой 100%, но только одного. Помоему ему нельзя верить.

Наблюдал похожую ситуацию. У меня 4-х ядерный ЦПУ, модель Xeon и WinXP x64. Ни настройки Матлаба, ни Windows не помогли преодолеть барьер 50% загрузки ЦПУ.
Мне удалось реально (с планированных 1,5 месяцев до 1 нед.) ускорить вычисления следующим нехитрым способом, изменив свою программу на Матлабе (но подойдет для любого языка стандартного последовательного программирования).

0. Изначально имею последовательную прогу (.М) с большим количеством итераций в цикле (иначе нет смысла городить огород). Границы цикла задаю параметрами, промежуточные или конечные данные сливаю в файл с уникальным именем-параметром и размножаю прогу копированием, по проге на ядро ЦПУ с хотя бы немного различными именами.
1. Запускаю параллелные сессии Матлаба (по кол-ву ядер) и в каждой загружаю свою размноженную копию проги. В них параметры цикла инициализирую в непересекаемые районы, как и названия выходных файлов - это легко автоматизировать. Чтобы не зависал интерфейс Windows, перед пуском прог понижаю приоритет всех сессий Матлаба.
2. Пускаю проги одну за другой. Проверяю (временно) загрузку ЦПУ в штатном Диспетчере Задач - каждое ядро занято на 100%.
3. После отработки всех прог (некот. могут придти к финишу раньше других), склеиваю выходные файлы всех прог в один (надо соблюсти неразрывность записей) - это тоже легко автоматизировать. Если в файлах были конечные данные, напр., сигнал, то конец работе; если промежуточные, напр., данные случайного процесса, то придется дополнительной прогой обработать их и получить конечные, напр., статистику типа мат.ожидание и дисперсия. Конец работе, пьем кофе salmari.gif .
IceCreamMan
Последний пост в этой теме May 9 2008, 20:40.
Уже матлаб R2010b....

Хотелось бы узнать, проблема не решена? Особенно с симулинком... грузит, зараза, только одно ядро из 4ех под win7 32. настроек не нахожу никаких...
IceCreamMan
ну да ладно. нашёл вот такую штуку. но что-то не могу догнать как он это сделал...
http://blogs.mathworks.com/seth/2009/03/31...ference-builds/
Alesha
Цитата(IceCreamMan @ Mar 23 2011, 23:23) *
ну да ладно. нашёл вот такую штуку. но что-то не могу догнать как он это сделал...
http://blogs.mathworks.com/seth/2009/03/31...ference-builds/

"Model reference parallel build helps us to speed up the generating the same targets for accelerated reference models as well as increasing the speed of generating code using Real Time Workshop..." Судя по всему с помощью Reference Model (модель в модели) и Parallel Computing Toolbox можно ускорить построение кода, а вот выполнение его (режим симуляции) происходит всё равно с использованием одного ядра.
Поравьте меня если я не прав.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.