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
 
 » biEski 11:09
 » mo2 11:09
 » JE Jacaw 11:02
 » Raist 10:59
 » korytkoBT 10:52
 » Kelso1 10:48
 » Dexter 10:46
 » Artaa 10:43
 » Promilus 10:42
 » Fl@sh 10:35
 » Wedelek 10:33
 » Kenny 10:29
 » cVas 10:29
 » mark_d 10:25
 » hokr 10:22
 » rainy 10:22
 » 3kawki 10:21
 » DJopek 10:15
 » jablo 10:14
 » selves 10:13

 Dzisiaj przeczytano
 9791 postów,
 wczoraj 27330

 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