Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » DJopek 23:15
 » Fl@sh 23:13
 » _Ion_ 23:09
 » rainy 23:05
 » rarek 23:04
 » Zbyszek.J 23:02
 » fiskomp 22:58
 » metacom 22:56
 » Visar 22:54
 » mrowa_82 22:54
 » wrrr 22:52
 » Mademan 22:50
 » DYD 22:50
 » Sebek 22:45
 » Kenny 22:44
 » Artaa 22:44
 » korytkoBT 22:42
 » Chrisu 22:40
 » 3kawki 22:36
 » PiotrexP 22:36

 Dzisiaj przeczytano
 39200 postów,
 wczoraj 40415

 Szybkie ładowanie
 jest:
wyłączone.

 
ccc
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
eLmO

pozdro eLmO
GG:1408264

  1. 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 :D

    http://flickr.com/photos/myhacien
    da

    1. 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;

  2. 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 ...

  3. 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!

    1. odkąd minęły czasy 286 , Luk 3/03/07 06:29
      nie wiem jaki sens jest bawić się w tworzenie tablic trygon.

  4. 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

  5. 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...

    1. a potem: dlaczego ta gra ma takie wymagania z tak biedną grafiką? ;) , Kriomag 3/03/07 00:01
      hehe

    2. 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

      1. 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...

  6. 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