forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Методы оптимизации (http://forum.boolean.name/showthread.php?t=1615)

impersonalis 03.10.2006 01:06

Re: Методы оптимизации
 
Удобным так же может оказаться более абстрактная реализация, описанного tormoz-ом метода: присваивать имени меша (name) хендл информационной структуры, а не хендл типа, поставленного в соответсвиее мешу напрямую. Это позволяет проводить более непривязанный анализ, и даже создать жалкое подобие ООП: в функцию передаётся entity пикунтого меша, из имени entity извлекается квази-укзатель на информационную структуру, получаем доступ к структуре, узнаём: к какому типу объектов поставлен в соответствие данный меш, квази-укзатель на конкретный элемент этого типа, и всё что нам необходимо.

HolyDel 03.10.2006 02:56

Re: Методы оптимизации
 
добавлю еще немного про оптимизацию.

во первых постарайтесь избегать делений например a/5 лучше заменить на a*0.2, так как второй вариант раза в три быстрее.

если число нужно умножить на что то вроде 2, 4, 8, 16 и т.д. или тем более разделить то можно обойтись логическим сдвигом (который рулит:) ). например a/16 можно заменить на a shr 4, для умножения соответственно a shl 4. четверка это степень двойки для число 16.

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

очень быстро выполняются логические операции (or, xor, and, not).

пока все.

jimon 03.10.2006 08:52

Re: Методы оптимизации
 
Цитата:

во первых постарайтесь избегать делений например a/5 лучше заменить на a*0.2, так как второй вариант раза в три быстрее.
зависит от процесора

Цитата:

если число нужно умножить на что то вроде 2, 4, 8, 16 и т.д. или тем более разделить то можно обойтись логическим сдвигом (который рулит :) )
ето правильно, хотя некоторые компиляторы сами меняют умножение\деление на сдвиги

Цитата:

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

Цитата:

очень быстро выполняются логические операции (or, xor, and, not).
все логические операции являются самыми быстрыми из всех вообще

Platon 03.10.2006 13:08

Re: Методы оптимизации
 
Цитата:

Сообщение от jimon
втом то и дело что блиц конвертит код в asm :)

А какая разница? Главное как он конвертит.
Ты у себя проверял оба варианта? (с not state и c 1-state)
Я проверил - 1-state быстрее выполняется, у меня по крайней мере.

И еще, может я чего то не допонял, почему это NOT быстрее SUB? Ну теоретически-то да - быстрее, но на практике у меня одинаковы :)
Проверял на пурике
Код:

state = #False
time = GetTickCount_();timeGetTime_()
For i = 0 To 10000000
  ;                          ;Ticks
  !MOV eax, dword[v_state]  ;1
  !NOT eax                  ;1
  !MOV dword[v_state], eax  ;1
Next
MessageBox_(0, Str(timeGetTime_() - time), "", #MB_OK)

state = #False
time = GetTickCount_();timeGetTime_()
For i = 0 To 10000000
  ;                          ;Ticks
  !MOV eax, 1                ;1
  !SUB eax, dword[v_state]  ;2
  !MOV dword[v_state], eax  ;1
Next
MessageBox_(0, Str(timeGetTime_() - time), "", #MB_OK)

End

оба варианта показывают 31
ЗЫ
Может дело в проце?
P4 630 Prescott 3.0 Ghz 2x

jimon 03.10.2006 18:57

Re: Методы оптимизации
 
Cyan
тут лутче писать на чистом asm
и двух ядерный проц тут ничего толком не дает
хотя лутче проверить еще на amd
мож какаято оптимизация в cpu стоит ? :) хотя хз - я же не intel :)

Platon 04.10.2006 07:41

Re: Методы оптимизации
 
jimon
Писал и на чистом асм в пурике, и на FASM - один и тот же результат - скорость выполнения одинаковая.

jimon 04.10.2006 08:44

Re: Методы оптимизации
 
Cyan значит ето скорость ALU... :)


Часовой пояс GMT +4, время: 10:41.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot