|
|
  |
При моделировании Matlab'ом загрузка процессора не более 50%, Как бы сделать что бы Matlab использовал весь ЦПУ |
|
|
|
Apr 4 2008, 12:28
|

Участник

Группа: Участник
Сообщений: 16
Регистрация: 29-11-06
Пользователь №: 22 884

|
При моделировании загрузка процессора не более 50%. Используется Matlab2008a x64 на WinViste x64. Процессор 2-ядерный E6750 2.66 ГГц, 4 гига оперативки. Есть ли какие настройки в Matlabe позволяющие использовать на полную процессор? или настройки Windows. Так же пробывал на WinXP x64 то же самое не более 50%.
|
|
|
|
|
Apr 18 2008, 08:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Цитата Просто винда в самом деле не дает по умолчанию более 50% всего времени одному приложению, чтобы пользователь чувствовал себя комфортно Не согласен. Это возможно дает прирост производительности на одноядерных системах, но в многоядерных это не работает. У меня проц. Core Quad - то есть 4 вычислительных ядра. При вашем подходе, оно должно два процессора загружать, но так никогда не происходит.
В лучшем случае оно 100% грузит одно ядро, в худшем Таскменеджер показывает одинаковую нагрузку всех ядер, но суммарно все равно 25% загрузки. При экспериментах с различными приоритетами и выбором загружаемых ядер получилась такая картинка
Я выбрал максимальный приоритет для матлаба и сначала 2 ядра в пользование а затем одно. В итоге он одно стал грузить 100%, а если на 2 то распределил как-то, но суммарная загрузка двух ядер осталась та же. Если выбрать 3 ядра, то он каждое на 33% загружает и все. С моими экспериментами 3-е ядро как простаивало так и простаивает и позволяет работать всему остальному без тормозов. 4-е я загрузил XST - синтезатором для VHDL. При експериментах выяснилось, что эта прога также больше 1-го ядра не загружает. В итоге ничего не тормозит, но заставить матлаб распаралелиться или увеличить скорость вычислений таким образом не удается.
|
|
|
|
|
Apr 18 2008, 13:32
|

Частый гость
 
Группа: Свой
Сообщений: 88
Регистрация: 12-02-07
Из: СПб
Пользователь №: 25 280

|
Цитата(syoma @ Apr 18 2008, 12:46)  Не согласен. Это возможно дает прирост производительности на одноядерных системах, но в многоядерных это не работает. Есть алгоритмы, которые можно параллелить, есть такие, которые параллелить нельзя. Матлаб является линейным интерпретатором, и в общем случае он действительно не позволяет вычислять с использованием всех доступных процессоров. Но можно один процессор полностью занять матлабом, повысив приоритет, что Вы и сделали. Но ведь раньше у вас было отдано матлабу еще меньше ресурсов, разве не так?
|
|
|
|
|
Apr 19 2008, 05:01
|

山伏
    
Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294

|
Цитата(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-им процессором скорость должна возрасти, так как нет затрат времени на раскидывание инструкций между ядрами. А этих затрат вообще нет, просто потоки выполняются не поочередно на одном ядре, а так же поочередно на двух.
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
May 9 2008, 17:40
|
Частый гость
 
Группа: Свой
Сообщений: 121
Регистрация: 9-05-08
Из: Япония
Пользователь №: 37 385

|
Цитата(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. После отработки всех прог (некот. могут придти к финишу раньше других), склеиваю выходные файлы всех прог в один (надо соблюсти неразрывность записей) - это тоже легко автоматизировать. Если в файлах были конечные данные, напр., сигнал, то конец работе; если промежуточные, напр., данные случайного процесса, то придется дополнительной прогой обработать их и получить конечные, напр., статистику типа мат.ожидание и дисперсия. Конец работе, пьем кофе  .
Сообщение отредактировал samurad - May 9 2008, 17:47
|
|
|
|
|
Mar 23 2011, 11:17
|
Участник

Группа: Участник
Сообщений: 55
Регистрация: 17-02-08
Пользователь №: 35 120

|
Последний пост в этой теме May 9 2008, 20:40. Уже матлаб R2010b....
Хотелось бы узнать, проблема не решена? Особенно с симулинком... грузит, зараза, только одно ядро из 4ех под win7 32. настроек не нахожу никаких...
|
|
|
|
|
Dec 20 2011, 07:25
|
Участник

Группа: Свой
Сообщений: 72
Регистрация: 28-05-08
Из: Минск
Пользователь №: 37 873

|
Цитата(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 можно ускорить построение кода, а вот выполнение его (режим симуляции) происходит всё равно с использованием одного ядра. Поравьте меня если я не прав.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|