|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.12.2008, 06:51 | #1 |
Форумчанин
Регистрация: 16.10.2008
Сообщений: 205
|
оптимизировать для максимальной скорости выполнения программы, т.е. заменить ее кодом на ассемблере
Есть процедура расчета некой функции. На делфи она выглядит так:
Код:
|
04.12.2008, 08:46 | #2 |
Форумчанин
Регистрация: 02.04.2008
Сообщений: 358
|
Для начала можно посмотреть асм код который делфи сделала.
В данном случае, проще разбить цикл на 4(2) потока, 4(2) ядра в помощь, никая оптимизация на ассемблере не даст выигрыш 3/4 времени из-за сложной адресации элементов массивов, хотя процентов 15-30% можно получить переписав все на fpu вручную.
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666 mail: airyashov(а)inbox.ru |
04.12.2008, 14:44 | #3 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Может сначала попробовать оптимизировать в Delphi. Например:
Код:
|
05.12.2008, 04:02 | #4 |
Форумчанин
Регистрация: 16.10.2008
Сообщений: 205
|
К сожалению асм код делфи для этой функции пока показать не могу, программа еще не дописана, но есть почти точно такая же функция которую я делал для проверки алгоритма, и позже его попробую выложить.
airyashov, что ты имел в виду когда сказал что проще разбить цикл на 4(2) потока? Я просто пихал этот цикл в два потока, т.к. машина двух ядерная, на никак его не разбивал. alexBlack, спасибо, я тоже уже думал оптимизировать его на делфи, но сначала хотел узнать на сколько его можно оптимизировать на асм. KrMin, KrMax, MinF задаются с исходными данными, и в процессе вычислений не меняются. |
05.12.2008, 05:06 | #5 |
Форумчанин
Регистрация: 16.10.2008
Сообщений: 205
|
Проанализировал асм код делфи, пришел к выводу что больше чем на 20% его не ускорить. В итоге решил его сначало оптимизировать как предложил
alexBlack. Посмотреть как его с компилирует делфи,и если будет возможность увеличить его производительность более чем на 30% то переписать на ассемблере, и пихнуть в два потока. Как вы считаете, это наиболее подходящий вариант, или можно что то получше придумать? |
05.12.2008, 06:06 | #6 |
Форумчанин
Регистрация: 16.10.2008
Сообщений: 205
|
Вот пример функции в делфи:
Код:
Код:
Последний раз редактировалось gusluk; 05.12.2008 в 06:09. |
10.12.2008, 04:21 | #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 |