IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Скорость выполнения программ
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5

Репутация: -  0  +


Всем привет
Хотелось бы поделиться "способами" как ускорить выполнения программ (Без применения asm)

1.Замечено что цикл while выполняется чуть быстрее чем for
2.Умножение при преобразований координат лучше заменить сдвигом

Может кто еще что знает...

PS

Да кстати есть еще один вопрос :
В чем разница если я напишу на asm (например вкл мыши) или воспользуюсь оператором inline
По моему никакой.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


вообще InLine абсолютно ненужная вещь...
вставлять машкоды можно и без неё...
немного тупо поставлен сабж...
есть разные оптимизации...высокоуровневая,  оптим-ия на ср-ем ур-не и на низком
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


2PingOfDeath: Применительно к Паскалю или пофигу (оптимизация)??
Единственное что могу сказать по
Цитата
Да кстати есть еще один вопрос :
В чем разница если я напишу на asm (например вкл мыши) или воспользуюсь оператором inline
По моему никакой.
:
Оператор INLINE просто вставляет кусок описанного кода на место его упоминания, а вот асм, если оформлено в виде процедуры вызывает эту процедуру, как следствие неб. задержка на call & ret.

2___Alex___: Наверное программисты фирмы Borland полные придурки??!! А если тебе надо вставить кусочек на асме в 20 разных мест, причем АБСОЛЮТНО одинаковый и оформить его не в виде процедуры, а именно куска кода??!!
И насчет тупо поставленного сабжа - это хрень!
Сабж поставлен конкретно: оптимизация языковых конструкций высокого уровня.
А что еще за СРЕДНИЙ уровень????????

типа того...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 17

Репутация: -  0  +


Я что-то про координаты не понял...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


to GLuk
"А если тебе надо вставить кусочек на асме в 20 разных мест, причем АБСОЛЮТНО одинаковый и оформить его не в виде процедуры, а именно куска кода??!! "
скопируй нужное число раз
почему же в Delphi Inline нет?
потому что он попросту не нужен
и повторяясь говорю - машкод можно и без него вставлять
а на счёт оптимизации - у Зубкова написано
сам помнится на него линк давал smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


Ну вот, чел предложил тему, а ты говняешь ее на корню...
В таком случае на форуме вообще нечего обсуждать, ведь все можно и прочитать  ;)
И все-таки ты почему-то пропустил вопрос про оптимизацию СРЕДНЕГО уровня. Я мож Зубкова и не читал, но про такое никогда не слышал??!
INLINE:
А теперь усложним задачу; представь себе код в 2000 байт, который нужно вставить в 2963 места; и ты его будешь КОПИРОВАТЬ?!! Причина твоего неприятия к INLINE кроется, вероятно, в твоих целях и задачах при реализации коих тебе просто была не нужна эта возможность...

2Max: Что ты не понял?? Какие координаты?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





Группа: Пользователи
Сообщений: 5

Репутация: -  0  +


Max N. Medentsev:
Операции сдвига можно (иногда) применять при умножении или делении
А про координаты это так к примеру...

___ALex___:
Что же тупого в теме ? Вопрос поставлен четко ...
(Насколько я понимаю название темы должно быть кратким  и
всем понятным)
А насчет почитать - всегда рад...
Только где?

GLuk:
Спасибо насчет inline...

All:
Речь идет только о паскале. Т.е. как только средсвами паскала
можно добится максимальной скорости выполнения...
(Какие лучше операторы использовать или заменять
их другими...)

PS
Мож кто знает: оператор port[ ] делает небольшую задержку после отправки данных в порт?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


GLuk
насчёт оптим-ии: высокий ур-нь - выбор эфф-ого алг-ма
ср-ий - оптим-ия сущ-его алг-ма(его реализация)
низкий - опт-ии под арх-ру проца
то есть перестановка инс-ий и подобноеа
а насчёт InLine-а я тебя не понял
какая разница что написать
asm
DB  0EAH
DW 10
DW 20
end;
или тоже InLine-ом...

PingOfDeath
а чтобы выяснить есть задержки какие или нет смотри код генер-ый комп0ом и делай выводы - оптимален он или нет
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


2___Alex___:
Насчет оптимизации; я, вероятно, низковато думал... я тер по поводу оптимизации на уровне ЯЗЫКОВЫХ конструкций! А где ты, кстати, почитал по этому поводу??
Насчет INLINE'a: Фишка в том, что инлайн конструкция ВСТАВЛЯЕТ кусок кода на место вызова. А ежели на асме оформлено в виде процедуры, то соответственно идет задержка на call & ret, типа того. Но если оформлено в теле программы, то ессесно никаких различий.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


GLuk
у Зубкова
где бы почитать про арх-ру проца?
везде больно мало и часто непонятно...
кстати есть отличный док по BASM-у в Delphi
надо?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


там именно всё по сабжу
берётся пакс-ий код типа
function Min(const A, B: Extended): Extended;
begin
if A < B then Result := A else Result := B
end;
анализ-ся ассем-ый код в который компилится этот паск-ий код и
проводится оптимизация
очень полезное чтиво
заодно и оценишь эффективность компилятора
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






проблема: многократно (порядка 100 000 раз) выполняется вызов функции, причем неизвестно какой именно, но из числа 10ти заранее известных. На каждом витке цыкла от некоторых условий (достаточно простых) зависит, какую же из них. Использовать выбор if или case - слишком медленно. Как ускорить?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


В принципе большой разницы нету, все равно в конечном счете все сведется к cmp ax,bx j...; Выложи сам код.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


Есть вариант.
Заводится массив из 10 процедур и обращение к ним идёт по индексу (без сравнений) с последующим его (индексом) изменением.
Но это подходит для редких случаев (напр. для автоматов).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


вот еще частенько нужно...
for i:=1 to N do A[i]:=0 // N - размер массива
заменяем на
fillchar(A, sizeof(A), 0)
И короче, и (вроде как) быстрее


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


про строки:
Скороть работы со строками будет выше, если:
вместо lenght(s) использовать ORD(s[0]);


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.10.2020 7:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name