Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.04;
Скачать: CL | DM;

Вниз

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

 
knever ©   (2007-01-18 13:47) [0]

Для начала, спасибо всем кто согласить обсудить тему.

Иногда приходиться писать программы для расчета физических процессов. Если говорить о сложных и не стационарных прочесах, то 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

Спасибо...


 
DrPass ©   (2007-01-18 13:58) [1]


> Первая моя мысль как оптимизировать поменять Double на Single
> помогло но не так как я думал

И не должно помочь. Размер данных - да, конечно. А объем вычислений ну никак не может сократиться. От того, что ты в троллейбус вместо 10 пассажиров посадишь 5, его скорость не увеличится. Точно так же и процессор. И double, и single обрабатываются фактически одной операцией.


> Идеи, которые скоро хочу попробовать, запихнуть все это
> в dll а вдруг поможет:)

Неа :)


> Попробую расчетную часть написать в на Assembler (правда
> с ним плохо знаком)

Скажем так - профессиональный ассемблерщик может написать код, лучший, чем это сделает оптимизирующий компилятор. Но это профессиональный.
Реальный выигрыш ты можешь получить, только если использовать дополнительные модули процессора - SSE, MMX и т.д. Но опять же, это только в том случае, если их возможности годятся для твоего алгоритма.


 
knever ©   (2007-01-18 14:16) [2]


> Скажем так - профессиональный ассемблерщик может написать
> код, лучший, чем это сделает оптимизирующий компилятор.
> Но это профессиональный.


> И double, и single обрабатываются фактически одной операцией.

кокой и как?

можно использовать скажем сдвиг.


> Реальный выигрыш ты можешь получить, только если использовать
> дополнительные модули процессора - SSE, MMX и т.д.

как ими пользоваться?


 
Сергей М. ©   (2007-01-18 14:24) [3]


> кокой и как?
>
> можно использовать скажем сдвиг.
>
>


Опа ... Приехали ...

Кокой сдвиг, конечно, и можно осуществить, но больно, черт побери !)


> как ими пользоваться?


В соответствии с мануалом производителя ЦП с соотв.системой команд.


 
knever ©   (2007-01-18 14:26) [4]


> DrPass ©  


> И не должно помочь. Размер данных - да, конечно. А объем
> вычислений ну никак не может сократиться. От того, что ты
> в троллейбус вместо 10 пассажиров посадишь 5, его скорость
> не увеличится. Точно так же и процессор. И double, и single
> обрабатываются фактически одной операцией.


Честно не совсем понятно почему мне казалось что (например)
double 8,876857457476457575765765868686846447^7,675765765757657567575757
рассчитывает дольше чем
single
8,8768574574764575^7,675765765 так как single может содержать меньшее количество знаков


 
knever ©   (2007-01-18 14:27) [5]


> Сергей М. ©   (18.01.07 14:24) [3]
>

> В соответствии с мануалом производителя ЦП с соотв.системой
> команд.

очень помог:)


 
Сергей М. ©   (2007-01-18 14:29) [6]


> knever ©   (18.01.07 14:26) [4]
>
>


Ты мануал к процессору от его производителя читал ? Прежде чем рассуждать про оптимизацию ?


> казалось


Когда кажется, тогда крестятся... Или штудируют спецлитературу по сабжу.


 
Сергей М. ©   (2007-01-18 14:29) [7]


> очень помог


Старался как мог.


 
Котик Б   (2007-01-18 14:43) [8]


> вдруг начинает считать 140 миллиона расчетных величин и
> выводить их матрицами 2*(300*5800*40)…


Люди - по моему Вы зажрались !!!

Средняя выборка из базы данных длиться дольше чем 20-25 секунд...
А о таких скоростных показателях лет 5 назад можно было только мечтать :)

PS: Лет 10 тому учавствовал в разработке програмки для строительства (расчет напряжений в балках) - так полученный через 3-4 часа промежуточный результат - это считалось очень быстро, а вывод полной диаграммы напряжений за 24 часа - нормально...


 
knever ©   (2007-01-18 15:08) [9]

Сергей М. ©

Я не обиделся честно.

Но у меня к Вам убедительная просьба.
Форум это такой электронный разговор.
Ели вы можете помочь или сказать что дельное то скажите (например «Ты мануал к процессору от его производителя читал ? Прежде чем рассуждать про оптимизацию.», нет я не читал это и так ясно но вы как специалист могли дать ссылку где прочесть (по теме № главы ели это книга и т.д) или сказать если нет ссылки я тебе вышлю другими словами вы могли помочь»). А вы только показали что вы являетесь более квалифицированным специалистом по данной теме, причем не совеем корректно… причем даже мою опечатку нашли и обратили на это внимание

P.S.  К вам не относиться это так шутка. «Лучше молчать и казаться идиотом – чем затоварить и развеять всякие сомнения»


 
knever ©   (2007-01-18 15:11) [10]

Котик Б


> Средняя выборка из базы данных длиться дольше чем 20-25
> секунд...
> А о таких скоростных показателях лет 5 назад можно было
> только мечтать :)
>
> PS: Лет 10 тому учавствовал в разработке програмки для строительства
> (расчет напряжений в балках) - так полученный через 3-4
> часа промежуточный результат - это считалось очень быстро,
>  а вывод полной диаграммы напряжений за 24 часа - нормально.
> ..

Согласен Но сейчас машины по быстрее и я уверен что мою программу можно сделать быстрее если лишь разобраться в принципах работы компьютера. И я подумал что кто-то сталкивался с этой проблемой и сможет помочь.


 
ors_archangel ©   (2007-01-18 15:15) [11]


> knever ©   (18.01.07 15:08) [9]

Оптимизация - неотрывна от задачи, какой мат аппарат у тебя?


 
ors_archangel ©   (2007-01-18 15:16) [12]

Например, стандартная exp из Math оптимизируется на 133%:
// From "How to optimize for the Pentium family of microprocessors"
// ©2000 Agner Fog:
// "FSCALE is often used in the calculation of exponential
// functions. The following code shows an exponential function
// without the slow FRNDINT and FSCALE instructions:"
function exp(x: extended): extended;
asm
{       ->      tbyte ptr [esp] - x argument
       <-      st0 - exp(x) value                  }
       FLDL2E
       FLD     TBYTE PTR [ESP+8]             // x
       FMUL                                  // z = x*log2(e)
       FIST    DWORD PTR [ESP+8]             // round(z)
       SUB     ESP, 12

       MOV     DWORD PTR [ESP], 0
       MOV     DWORD PTR [ESP+4], 80000000H
       FISUB   DWORD PTR [ESP+20]            // z - round(z)
       MOV     EAX, [ESP+20]
       ADD     EAX,3FFFH
       MOV     [ESP+8],EAX
       JLE     @@UNDERFLOW
       CMP     EAX,8000H
       JGE     @@OVERFLOW
       F2XM1
       FLD1
       FADD                                  // 2^(z-round(z))
       FLD     TBYTE PTR [ESP]               // 2^(round(z))

       ADD     ESP,12
       FMUL                                  // 2^z = e^x
       //fstp    tbyte ptr [esp+8]
       pop     ebp
       ret     12

@@UNDERFLOW:
       FSTP    ST
       FLDZ                                  // return 0
       //fstp    tbyte ptr [esp+8]
       ADD     ESP,12
       pop     ebp
       ret     12

@@OVERFLOW:
       PUSH    07F800000H                    // +infinity
       FSTP    ST
       FLD     DWORD PTR [ESP]               // return infinity
       //fstp    tbyte ptr [esp+8]
       ADD     ESP,16
       pop     ebp
       ret     12
end;


 
Сергей М. ©   (2007-01-18 15:17) [13]


> вы как специалист могли дать ссылку где прочесть


Ну ты сам подумай, о каких ссылках может идти речь, если ты даже не сподобился уточнить, о каком конкретно ЦП какого конкретно производителя идет речь ?

Это все равно что спросить  "каким шанцевым инструментом - ложкой, вилкой, лопатой и т.д. и т.п. - мне за обедом употреблять некое заранее неизвестное вам блюдо"

)


 
knever ©   (2007-01-18 15:19) [14]


> ors_archangel ©

Если я тебя правильно понял то мой мат аппарат это «нестационарная теплопроводность через критерий Фурье» это сложение и умножение построчно методом последовательных приближений.


 
ors_archangel ©   (2007-01-18 15:19) [15]


> Сергей М. ©   (18.01.07 15:17) [13]

"программа на Delphi" вам не о чём не говорит


 
knever ©   (2007-01-18 15:22) [16]

Сергей М.

Что это даст? Пишу на одном компе люди работают на другом. Получаться что нужно как то… даже не знаю..


 
Сергей М. ©   (2007-01-18 15:23) [17]


> ors_archangel ©   (18.01.07 15:19) [15]
> "программа на Delphi" вам не о чём не говорит


Абсолютно и о чем)

Делфи - это просто широкоизвестное имя интегрированной среды разработки приложений. БЕЗ очевидной (не требующей уточнения) привязки к конкретной аппаратно-программной платформе исполнения этих приложений.


 
ors_archangel ©   (2007-01-18 15:24) [18]


> knever ©   (18.01.07 15:19) [14]

Я имел в виду, какие элементарные мат операции используются, можете привести фрагмент кода для примера?
И if с=0 then b:=10 медленнее C:=1000*10, потому что в первом случае есть ветвление, т.е. переход, т.е. рестрарт декодоров, сброс выборки и т.д., а во втором имеем одну операцию умножения, ещё смотри http://delphimaster.net/view/15-1169034260/


 
Desdechado ©   (2007-01-18 15:24) [19]

Приведи хоть пару формул и их реализаций в твоем коде.
Будет хоть повод поговорить об оптимизации, а то воду в ступе толчем.


 
knever ©   (2007-01-18 15:24) [20]


> ors_archangel ©   (18.01.07 15:16) [12]
> Например, стандартная exp из Math оптимизируется на 133%:
>
Спасибо постараюсь разобраться.


 
Сергей М. ©   (2007-01-18 15:25) [21]


> knever ©   (18.01.07 15:22) [16]


Возьми на вооружение пакет Intel Math kernel Library и не мучайся - пока еще добрая половина народа использует Intel- или Intel-совместимые процессоры.


 
ors_archangel ©   (2007-01-18 15:27) [22]


> Сергей М. ©   (18.01.07 15:23) [17]

Извини, я просто подумал, что ты придераешься, беру свои слова обратно


 
knever ©   (2007-01-18 15:28) [23]

Извините сегодня все.

Desdechado ©

ок.


 
ors_archangel ©   (2007-01-18 15:31) [24]


>  knever ©   (18.01.07 15:22) [16]

Кстати да, можно перевести код в C и компилировать DLL с помощью Intel Compiler при полной оптимизации, уверен, будет ощутимый прирост посравнению с "оптимизирующим" компиляторм Delphi - ведь, как правильно сказал Сергей М., Делфи - "БЕЗ очевидной (не требующей уточнения) привязки к конкретной аппаратно-программной платформе исполнения этих приложений."


 
Alx2 ©   (2007-01-18 21:08) [25]

>knever ©   (18.01.07 15:19)

А почему-бы не уйти от последовательных приближений, или сократить их каким-нибудь стандартным сеточным методом? Потом, задачи теплопроводности - штука достаточно проработанная. Может, стоит в сети поискать быстрые устойчивые алгоритмы?

Хотя, я уже фантазирую. Как расчетная задача сформулирована?


 
VEZ   (2007-01-18 23:12) [26]

Большинство функций используют в качестве параметров и результата Double-значение, то есть если передавать туда Single-значения, то получается будут лишние операции приведения типов.


 
Сергей М. ©   (2007-01-19 09:38) [27]


> VEZ   (18.01.07 23:12) [26]


Не все так просто.



Страницы: 1 вся ветка

Текущий архив: 2007.02.04;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.037 c
6-1157144470
Орион
2006-09-02 01:01
2007.02.04
Прокси для TWebBrowser


3-1162972185
igor666
2006-11-08 10:49
2007.02.04
Проблема с ADOQuery


15-1168928181
vajo
2007-01-16 09:16
2007.02.04
Выбор компьютера


8-1150035064
Whitevova
2006-06-11 18:11
2007.02.04
Микрофон. И всё с ним связанное.


2-1168911194
kingsoft
2007-01-16 04:33
2007.02.04
Открытие шаблона Microsoft Excel