TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
programowanie w c++ tricki , elmo 2/03/07 16:30 czesc.
czy moze ktos podac linka ( lub podzielic sie swoja wiedza)
w temacie optymalizacji kodu.
chodzi mi o takie triki jak
i=i+1 -> i++
albo (::)
czy ktos zna wiecej takich trickow ?
dziekuje i pozdrawiam
eLmOpozdro eLmO
GG:1408264 - Zamiast dzielenia i mnożenia , Conroy 2/03/07 16:41
Jeśli musisz dzielić lub mnożyć przez kolejne potęgi 2 zamiast dzielenia i mnożenia szybciej użyć przesuwania bitowego.
Np.
liczba=liczba/8 -> liczba=liczba>>3
A przesówamy o 3 bo 2^3=8.
Mnożymy w ten sam sposób przesuwając w drugą stronę:
np. liczba=liczba*32 -> liczba=liczba<<5
bo 2^5=32.
Podobnie można skorzystać z przesuwania bitowego zamiast reszty dzielenia lub części całych z dzielenia.
Np. jeśli potrzebujesz reszte z dzielenia liczby przez 8.
normalnie było by liczba=liczba%8
a można zastąpić to
liczba=liczba << 5;
liczba=liczba >> 5;
Natomiast powyższe dwie linie z przesuwaniem bitowym można zamienić na jedna wykorzystująć iloczyn logiczny do skasowania (operacje ta nazywa się maskowaniem) gornych bitow liczby, czyli:
liczba=liczba & 248;
Analogicznie dla otrzymania części całych maskuje się dolną część liczby.
Wszystkie te zabiegi jednak powinien wykryc sam kompilator i je automatycznie zoptymalizowac :Dhttp://flickr.com/photos/myhacien
da - Ten twój sposób na resztę z dzielenia przez 8 , exmac 3/03/07 11:21
jest dobry tylko dla liczb 8 bitowych. Można zastosować dla innych liczb, ale zawsze trzeba pamietać z ilu bitową liczbą mamy do czynienia. Poniższy jest szybszy i uniwersalny:
liczba &= 7;
- Swego czasu , rzymo 2/03/07 17:04
do zoptymalizowania algorytmów (chyba to były fraktale) korzystałem z zamiany liczb rzeczywistych na całkowite, tzn. przyjmowałem sobie że np. 1000 = 1.0, 1001 = 1.001, itd. Operacje na liczbach całkowitych wykonują się po prostu szybciej. Jeszcze ciekawej byłoby, gdyby zamiast przyjmować 1000 przyjęłoby się 1024 - czyli potęga dwójki i można stosować przesunięcia bitowe (patrz wyżej :) )... ITX ... - nie wiem czy Ci chodzi , j23 2/03/07 17:08
tylko o c++, ale ogólnie np. gdy masz operacje zmiennoprzecinkowe małej precyzji, można operować na przemnożonych całkowitych, a potem na końcu podzielić wynik (to szybsze niż operacje na float, ale trzeba umieć to robić, by nie było błędów zaokrągleń). Podobnie, gdy nie potrzeba obliczeń trygonometrycznych dużej precyzji, dużo szybciej jest wygenerować tablicę z wynikami i odczytywać je z tablicy itp. stare i znane w każdym podręczniku metody.Dumny nosiciel moherowego beretu!
Me gustan tomar mis copas
Żubrówka es lo mejor! - odkąd minęły czasy 286 , Luk 3/03/07 06:29
nie wiem jaki sens jest bawić się w tworzenie tablic trygon.
- Jest jedno ciekawe źródło informacji , JOTEM 2/03/07 17:31
zajrzyj na strony AMD (zwłaszcza) i Intela. Tam ściągnij tutoriale optymalizacyjne. Są zwykle do C i assemblera. Kopalnia technik dla nowych procesorów.Poryjemy..zrobaczymy - Ale bzdury ! , pachura 2/03/07 23:47
1. Co ma operator :: do optymalizacji kodu?
2. 99% nowoczesnych kompilatorow automatycznie optymalizuje kod, tj. rozwija petle, uzywa rejestrow zamiast zmiennych w pamieci, zastepuje mnozenie/dzielenie przez potegi dwojki shiftowaniem, etc. etc. Nie ma sensu tracic na to czasu - jedynie zoptymalizowac sam algorytm. Takie niskopoziomowe sztuczki byly dobre w latach 90-tych...- a potem: dlaczego ta gra ma takie wymagania z tak biedną grafiką? ;) , Kriomag 3/03/07 00:01
hehe - Zasadniczo też tak myślałem :-) , JOTEM 3/03/07 17:18
dopóki nie zobaczyłem, co daje w przypadku nowoczesnego procesora rozbicie zwykłej pętli sumującej elementy tablicy na dwa osobne sumowania. Tego (i podobnych operacji) żaden kompilator raczej nie zrobi, bo to za duża ingerencja w kod programu. Optymalizowaniem algorytmu też tego nazwać nie można. Ale ogólnie, to się całkowicie z Tobą zgodzę.
Pozdrawiam.Poryjemy..zrobaczymy - Hmmm... dziwne , pachura 3/03/07 21:34
Jakiego kompilatora używałeś? Ustawiłeś mu maksymalny poziom optymalizacji? Takie rzeczy raczej powinny być wykrywane i rozbijane na wiele operacji...
- Aha, jeszcze jedno , pachura 2/03/07 23:49
Niektorzy uwazaja ze krotszy kod zrodlowy = szybszy kod wykonywalny. Nie jest to prawda... |
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|