![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимизация скорости работы программ для технических расчетов
knever © (2007-01-18 13:47:00)Для начала, спасибо всем кто согласить обсудить тему.
Иногда приходиться писать программы для расчета физических процессов. Если говорить о сложных и не стационарных прочесах, то 20-40 тысяч расчетных величин в, прицепи достаточно.
Но вдруг начальство рассудило, что надо повысить точность и добавить пару элементов. И что же делать, если вдруг написанная программа на Delphi, вдруг начинает считать 140 миллиона расчетных величин и выводить их матрицами 2*(300*5800*40)…
Сразу появилось несколько нюансов.
1. Время расчета при загрузке ЦПУ 100%(по диспетчеру задач на PМ-1,7 512) 20-25 секунд.
2. Файл подкачки 2 ГБ!!!!
Уточнение:
2 массива [1..301,0..5841,0..41] array of Double объявлены как глобальные переменные.
Сократить количество величин нельзя и упростить формулы тоже.
Первая моя мысль как оптимизировать поменять Double на Single помогло но не так как я думал. Я думал что сократиться время расчета а оно вросло 28-33 секунды зато в место 1,8 стало около 700 Мб.
Идеи, которые скоро хочу попробовать, запихнуть все это в dll а вдруг поможет:)
Попробую расчетную часть написать в на Assembler (правда с ним плохо знаком)
Может кто сталкивался и что-нибудь подскажет, о оптимизации или о принципах роботы Delphi и компьютера с такими вещами.
Например меня всегда интересовало на какую сточку уходит больше ресурсов компьютера: сколько времени тратит( как это посчитать), и что дольше обрабатывается
if с=0 then b:=10
или
C:=1000*10
Спасибо...
Сергей М. (2007-01-18 14:29:00) [21]
> очень помог
Старался как мог.
Сергей М. (2007-01-18 14:29:00) [22]
> knever © (18.01.07 14:26) [4]
>
>
Ты мануал к процессору от его производителя читал ? Прежде чем рассуждать про оптимизацию ?
> казалось
Когда кажется, тогда крестятся... Или штудируют спецлитературу по сабжу.
knever (2007-01-18 14:27:00) [23]
> Сергей М. © (18.01.07 14:24) [3]
>
> В соответствии с мануалом производителя ЦП с соотв.системой
> команд.
очень помог:)
knever (2007-01-18 14:26:00) [24]
> DrPass ©
> И не должно помочь. Размер данных - да, конечно. А объем
> вычислений ну никак не может сократиться. От того, что ты
> в троллейбус вместо 10 пассажиров посадишь 5, его скорость
> не увеличится. Точно так же и процессор. И double, и single
> обрабатываются фактически одной операцией.
Честно не совсем понятно почему мне казалось что (например)
double 8,876857457476457575765765868686846447^7,675765765757657567575757
рассчитывает дольше чем
single
8,8768574574764575^7,675765765 так как single может содержать меньшее количество знаков
Сергей М. (2007-01-18 14:24:00) [25]
> кокой и как?
>
> можно использовать скажем сдвиг.
>
>
Опа ... Приехали ...
К окой сдвиг, конечно, и можно осуществить, но больно, черт побери !)
> как ими пользоваться?
В соответствии с мануалом производителя ЦП с соотв.системой команд.
knever (2007-01-18 14:16:00) [26]
> Скажем так - профессиональный ассемблерщик может написать
> код, лучший, чем это сделает оптимизирующий компилятор.
> Но это профессиональный.
> И double, и single обрабатываются фактически одной операцией.
кокой и как?
можно использовать скажем сдвиг.
> Реальный выигрыш ты можешь получить, только если использовать
> дополнительные модули процессора - SSE, MMX и т.д.
как ими пользоваться?
DrPass (2007-01-18 13:58:00) [27]
> Первая моя мысль как оптимизировать поменять Double на Single
> помогло но не так как я думал
И не должно помочь. Размер данных - да, конечно. А объем вычислений ну никак не может сократиться. От того, что ты в троллейбус вместо 10 пассажиров посадишь 5, его скорость не увеличится. Точно так же и процессор. И double, и single обрабатываются фактически одной операцией.
> Идеи, которые скоро хочу попробовать, запихнуть все это
> в dll а вдруг поможет:)
Неа :)
> Попробую расчетную часть написать в на Assembler (правда
> с ним плохо знаком)
Скажем так - профессиональный ассемблерщик может написать код, лучший, чем это сделает оптимизирующий компилятор. Но это профессиональный.
Реальный выигрыш ты можешь получить, только если использовать дополнительные модули процессора - SSE, MMX и т.д. Но опять же, это только в том случае, если их возможности годятся для твоего алгоритма.