![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 16.10.2008
Сообщений: 205
|
![]()
Есть процедура расчета некой функции. На делфи она выглядит так:
Код:
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 02.04.2008
Сообщений: 358
|
![]()
Для начала можно посмотреть асм код который делфи сделала.
В данном случае, проще разбить цикл на 4(2) потока, 4(2) ядра в помощь, никая оптимизация на ассемблере не даст выигрыш 3/4 времени из-за сложной адресации элементов массивов, хотя процентов 15-30% можно получить переписав все на fpu вручную.
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666 mail: airyashov(а)inbox.ru |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]()
Может сначала попробовать оптимизировать в Delphi. Например:
Код:
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 16.10.2008
Сообщений: 205
|
![]()
К сожалению асм код делфи для этой функции пока показать не могу, программа еще не дописана, но есть почти точно такая же функция которую я делал для проверки алгоритма, и позже его попробую выложить.
airyashov, что ты имел в виду когда сказал что проще разбить цикл на 4(2) потока? Я просто пихал этот цикл в два потока, т.к. машина двух ядерная, на никак его не разбивал. alexBlack, спасибо, я тоже уже думал оптимизировать его на делфи, но сначала хотел узнать на сколько его можно оптимизировать на асм. KrMin, KrMax, MinF задаются с исходными данными, и в процессе вычислений не меняются. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 16.10.2008
Сообщений: 205
|
![]()
Проанализировал асм код делфи, пришел к выводу что больше чем на 20% его не ускорить. В итоге решил его сначало оптимизировать как предложил
alexBlack. Посмотреть как его с компилирует делфи,и если будет возможность увеличить его производительность более чем на 30% то переписать на ассемблере, и пихнуть в два потока. Как вы считаете, это наиболее подходящий вариант, или можно что то получше придумать? |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 16.10.2008
Сообщений: 205
|
![]()
Вот пример функции в делфи:
Код:
Код:
Последний раз редактировалось gusluk; 05.12.2008 в 06:09. |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 16.10.2008
Сообщений: 205
|
![]()
Странно, но вариант предложенный alexBlack дал выигрыш по времени около 20%
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Можно ли ввести данные в таблицу StringGrid не в процессе выполнения программы а заранее | Arassir | Помощь студентам | 5 | 02.11.2008 17:34 |
нужна помощь в написании программы на ассемблере | marsela | Помощь студентам | 4 | 25.04.2008 21:42 |
Приостановка цикла для выполнения внешней программы | Uomo | Общие вопросы Delphi | 3 | 04.04.2008 11:48 |
Программы с открытым кодом | Hallo | Свободное общение | 10 | 31.05.2007 07:46 |