Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оптимизация скорости работы программ для технических расчетов


Страницы:   1 2

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 и т.д. Но опять же, это только в том случае, если их возможности годятся для твоего алгоритма.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо