Я не дизайнер, я не программист, я не инженер, я просто любитель возится с компьютерами, зарегился и написал сюда только для того, что бы моя работа не пропала зря и возможно ещё кому-нибудь помогла.
Началось всё с того, что друг попросил меня прокачать и без того не слабый компьютер с мощным процессором Intel Core i7-3770K и 16 гигами оперативной памяти, для того, что бы ускорить расчёты в некой программе DIALux evo Версия 5.1.0.12411.(некоторые расчёты могут происходить по часу с лишним), собирался купить твердотельный диск. Так как внятной информации о самой программе и принципе её работы я от него не получил, пришлось скачать самому, установить на собственный компьютер и провести серию экспериментов для того, что бы решить в какую сторону следует прокачивать комп. Ниже приведу описание эксперментов с выводами и рекомендациями. Для тех кто далёк от компьютерных заморочек и непонятны некоторые аспекты, для разъяснений рекомендую воспользоваться поисковиками безкрайнего интернета.
МОй компьютер тоже имеет не слабый по нынешним меркам процессор Intel Core i7-3770 и 16 гигов оперативы, но я использую 86х Win7, а невидимую более 3,2 гб память(почти 13гб) превратил в виртуальный винчестер и перекинул тудя временные папки и подкачку, так же подтверждаю, что этот виртуальный винчестер в десятки раз быстрее любого твердотельного диска, хотя и сам физический твердотельный диск в системе имеется. Для экспериментов я создал некий, неизменяемый в последствии, абстрактный проект из произвольно расположеных объектов и светильников, с относительно малым временем обработки для уменьшения времени на проведение тестов. После большинства замеров перезагружал систему, что бы уменьшить погрешность системного кэширования.
ПРограмма мучает винт в трёх местах:
1) Исполняемая папка (статична, но увеличивается в размерах по мере добавления новых моделей, текстур и объектов, легко перемещается в любое место и работает без установки оттуда)
2) Времянка (мусорная папка TEMP, растёт по мере обработки и расчётов, обнуляется сама как только закрыт проект и программа)
3) Обращение к Винде (фоновое, служебных или парралельных программ, возможно библиотеки DX или другие)
Время запуска программы и открытие проекта в расчёт не беру, учитывается только время от начала старта расчётов, до появления окончательной картинки с разгрузкой проца.
Видеокарта в программе практически не работает, её производительностью можно пренебречь.
ПРоцессор работает весьма странно, похоже что большую часть времени он перекладывает информацию с винта в память, из памяти в подкачку из подкачки снова в память, что-то во времянку, что-то из времянки, но в большинстве ядра простаивают в лёгкой 5-20% общей нагрузке, при этом одно из ядер загружено на 50-85% когда другие почти спят или только 2 ядра работают по 40%, используются в большинстве расчётов только 4 физических ядра, а 4 логических напрягаются крайне редко. Конечно бывают моменты 90-100% нагрузки всех ядер, но бывает это крайне редко и длится очень недолго.
Прога на винте, времянка на винте (классический компьютер)
03:26(мин:сек)
03:20
Прога на винте, времянка в памяти. (программно усовершенствованный классический компьютер)
03:13
03:15
ПРога на твёрдотельнике, времянка в памяти.(компьютер с твердотельником программно усовершенствованный)
03:15
03:17
Прога в памяти, времянка в памяти. (компьютер с ооочень быстрым твердотельником)
03:16
03:16
ПРога в памяти, времянка в памяти, винда на твердотельнике (быстрее только компьютер весь обвешаный дико скоростными твердотельниками, физический винт практически не подаёт признаков жизни, всё работает в памяти или твердотельности)
03:15
03:14
Погрешность измерений +/- 1 сек.
Выводы напрашиваются сами: Как мы видим, от файловой системы (преимущство в которой даёт твёрдотельник) программа почти не зависима, на лицо простейшая неоптимизация программы под многоядерники и работу с многопоточностью, то есть разгон проца, разгон памяти, увеличение количества ядер - прироста в скорости не обеспечат. Прирост появится только с новой, более оптимизированной на многопоточность версией программы.
Получить лёгкое ускорение можно простыми манипуляциями с переносом временной и исполняемой папки в оперативную память. Использование же твердотельника лишь ускорит запуск самой программы и виндовса с приложениями, но в длительных расчётах даст лёгкое ускорение только в том случае, если мусорная папка и подкачка останутся на твёрдом диске, что общепризнанно не рекомендуется для продления жизни твердотельника, в противном случае сдохнет раньше времени от износа ячеек, что кажется не является гарантийным случаем.
По теоретическим расчётам это "лёгкое ускорение" будет примерно равно 3 минутам на 1 час расчётов, что явно не оправдывает покупку твердотельника 128гб за 5 штук.
А теперь самое интересное. Программа может работать при одновременном запуске из разных мест(нескольких копий папки с рабочей программой), т.е. осуществлять параллельные расчёты разных проектов. При этом общая длительность не суммируется, а лишь удлиняется экспоненциально количеству расчитываемых проектов.
2 одновременно (1 на винте, 1 в памяти, времянка в памяти)
03:28 (для сравнения 1 выполняется в памяти за 3:15)
визуально процессор загружен 4 физических ядра в сумме(4потока) на 40-50%, винт почти не работает.
3 одновременно (1 на винте, 2 в памяти, времянка в памяти)
04:03
визуально процессор работает уже в 6 потоков, хотя загружены по 60-70% только 4 из них. Винт по прежнему отдыхает. Во времянке мусор от программы увеличился трёхкратно, следовательно количество обращений к физическому винчстеру на обычном компьютере тоже ощутимо вырастет. Увеличение времени могу объяснить тем, что в самый последний момент расчётов обычно около 5-10 секунд идёт 100% загрузка процессора по всем потокам, что вызывает задержку в остальных расчётах и соответсвенно остальные расчёты тормозят финальную стадию, от того и время синхронной обработки вырастает по экспоненте. Закономерно предположить, что если финальные стадии не совпадут, то время выполнения будет чуть меньше.
4 одновременно (1 на винте и 3 в памяти, времянка в памяти)
04:06
Вот, теперь точно видно что все 8 потоков пашут... правда общая нагрузка проца не превышает 50% до последней стадии, на которой выпал неприятный сюрприз - третья программа прекратила расчёты выдав ошибку. Разобравшись, выяснилось, что тупо закончилась память в оперативке и файле подкачки(система 86х). Закрываем пару ёмких приложений, увеличиваем подкачку до максималки 4096мб(подкачка сидит в памяти). Хотя возможно ограничения файловой системы FAT32 виртуального винчестера не позволяют нарастить размер файла более 4 гигов.
04:55
памяти впритык хватает, но увы, 4-ая программа тупо вылетела с ошибкой, дальнейшие эксперименты на 86х битной системе не возможны.
5 одновременно - вылет системы и повально работающих прог после сообщения "закончилась свободная память"
4 поочерёдно с задержкой запуска в 20 сек (все 4 и времянка в памяти)
06:35
Памяти хватает, загрузка процессора 60%, под конец около минуты на 100%, но всё завершилось нормально, без ошибок и вылетов.
Вывод: Можно производить параллельные расчёты различных проектов при достаточном количестве памяти и подкачки, 4-5 на 86х разрядной системе и думаю 8-9 на 64х битной системе, при условии наличия мощного процессора. Вот тут уже размер и скорость оперативной памяти, увеличение частоты и количества ядер процессора, в комплексе с ускорением файловой системы (любым из способов) может дать более реальный прирост ОБЩЕЙ производительности, ЧЕМ при одиночном выполнении, но опять же с оговоркой, что длительность выполения увеличивается экспоненциально возрастанию числа палалельных расчётов. Во время расчётов даже 3-х задач компьютер довольно таки отзывчив и позволяет выполнять стороннюю деятельность в виде работы антивируса, офисных приложений, интернет-сёрфинга, паралелльной работы с очередным проектом, но во время звершения расчёта проекта идёт 100% нагрузка практически парализующая компьютер и она длится тем дольше, чем больше проектов в этот момент расчитывается, тут уже может всё капитально подвиснуть на какое то время. Вот уж действительно стоящая задачка для 6-ти и 8-ми ядерных процессоров с количеством потоков более 12 штук...
Если подойти с умом, то работа с конкретным проектом явно ускорится, если её параллельно разрабатывать в нескольких версиях. Например пока рассчитывается одно положение объектов или тип светильников, можно не терять времени и передвинуть объекты установить другие светильники вновь запустить на обработку, потом не дожидаясь переключиться на совсем другой проект с вновь подошедшим клиентом и так далее... При этом, если один из проектов завершится с ошибкой, то другие не пострадают и продолжат выполнятся. Кстати, если требования проги к ресурсам на столько минимальны, то вообще можно и другие компы в помещении напрячь на расчёты, хотя бы по паре проектов на комп.
NB: Если рабочая папка программы под завязку нагружена различными базами, текстурами, 3Д объектами(чего пока нет у моёго знакомого), то пожалуй в процессе работы (до запуска расчётов) действительно может пригодится твердотельный диск или виртуальный винчестер в памяти, однако, я уверен, что на длительность самого расчёта это почти не повлияет.
24 Декабрь 2012 в 22:13
Как ни странно, но история получила продолжение и теперь я тестирую уже другую версию DIALux 4.10. Конфиг системы тот же, разве что снова пришлось стряпать тестовый проект, т.к. проекты разных версий этих программ не совместимы. Принцип работы файловой системы я уловить не смог, да и особого различия в скорости работы с винчестера или в виртуальной памяти мною замечено не было, потому твердотельность компьютера не обсуждаю.
После непродолжительного общения с приложением меня осенило, эта проклятая примитивная прога использует всего 1 поток для вычислений, а разбивает нагрузку по ядрам сама винда, потому при работе ни один поток ни когда не загружен на 100%. Сразу напрашивается целых 2 вывода: 1) Крутые многоядерники с кучей потоков на хрен не нужны. 2) Надо как то ускорить один единственный поток вычислений. Похоже, я ошибался, когда заявлял ранее о том, что разгон процессора и памяти бесполезны. Проводим десяток экспериментов с различными частотами процессора и памяти, дабы опровергнуть или подтвердить это утверждение.
Так как оверлокингом я не увлекаюсь, то ограничусь автоматическим разгоном в биосе от Asus, а для замедления частоты процессора просто отключу режим Turbo. Частоту памяти меняю вручную.
память замедленна до 1333 среднее время расчёта
04:37 (мин:сек)
обычная частота 1600
04:35
память разогнана до 1866
04:31 похоже криво разогналась или всё же зависимость скорости расчётов от частоты памяти минимальна.
понижение частоты процессора до 3,5
05:10
В норме для моёго процессора 3,9
04:35
повышенная частота 4.2
04:20
Вот оно. Наконец, хоть какой-то имеющий смысл результат. То есть, чем быстрее процессор, тем быстрее получим результат, однако с маленькой оговоркой, предположить реальное ускорение на очень больших частотах весьма затруднительно, т.к. зависимость может оказаться не линейной. Однако это ещё не всё, в результате экспериментов выяснилась одна любопытная особенность. Оказывается(в моём понимании) многозадачность и многоядерность для Win7 это понятия условные, так как даже при незначительной нагрузке процессора сторонними программами длительность расчёта значительно возрастала. Похоже виновата сама винда, которая распределяет нагрузку между ядрами равномерно, т.е. от действующего на момент расчётов ядра отхватывается часть ресурсов на выполнение сторонних задач, хотя другие ядра с сторонними задачами могут справиться самостоятельно. Повышение приоритета процесса DIALux.exe результата не дало, осталось попробовать включать и отключать "лишние" программы.
открыто много приложений среднее время расчёта
04:48
мало приложений
04:35
закрыты все сторонние приложения и убиты все лишние задачи
04:29
Ещё один хороший результат исследования. Попробуем их объединить:
повышенная частота процессора 4,2 память замедленна с 1600 до 1333, закрыты все приложения
04:14
Увы, моих знаний особенностей разгона маловато, для того что бы заставить память и процессор работать на повышенных частотах одновременно(сплошные синие экраны смерти), однако тесты показали не такой уж значительный прирост при разгоне памяти, потому игнорируем память и суммируем скорость процессора с изоляцией от прочих программ. Достигнут максимально возможный результат на текущий момент.
повышенная частота процессора 4,2 память замедленна с 1600 до 1333, закрыты все приложения и убиты все лишние задачи
04:10
И так, подытожим всё, что удалось узнать: Для ускорения работы программы нам НЕ НУЖЕН комп с навороченным многоядерным процессором, уймой гигабайт памяти, производительной твердотельной дисковой системой и мощной игровой видеокартой. Более предпочтительным получается конфигурация с изначально скоростным и в последствии хорошо разогнанным двух-четырёх поточным процессором(i3, i5; X2, Х3), свежий(не загаженный различными программами) виндовс и желательное использование этого компьютера только под программу DIALux или отключение всего прочего софта на время расчётов.
И напоследок, ложка дёгтя. Помимо того, что эта версия программы тоже не оптимизирована под многопоточность, ситуация усугубляется тем, что фокус с множественным одновременным запуском копий программы или параллельным обсчётом нескольких проектов не катит, т.е. работать можно только с одним проектом в единственном экземпляре запущенной программы.