Anonymní profil voty – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil voty – Programujte.comAnonymní profil voty – Programujte.com

 

Příspěvky odeslané z IP adresy 81.19.47.–

C / C++ › Efektivni promenne.
12. 1. 2011   #137746

To Anonymní uživatel :

No tak jo, zkusil jsem jednoduchý test.

Následující kód je označen jak Out-Loop.



#include <cstdio>

int main()
{
int a = 0;
int b;
int c;
int d;
int e;

while(a < 1000000000)
{
b = a + 1;
c = b * a;
d = c + b - a;
e = a - d + c;

if(e == 42)
{
printf("%i\n", e);
}
++a;
}
}


Následující kód je označen jak In-Loop.


#include <cstdio>

int main()
{
int a = 0;

while(a < 1000000000)
{
int b = a + 1;
int c = b * a;
int d = c + b - a;
int e = a - d + c;

if(e == 42)
{
printf("%i\n", e);
}
++a;
}
}


Měřil jsem přes příkaz time, brána hodnota user (čas, který program strávil během v userspace, udáváno v sekundách), překládáno pomocí gcc 4.45 x86_64-gnu-linux bez optimalizací (-O0) a s optimalizacemi (-O3). Zde jsou výsledky.



Out-Loop -O0
8.41, 8.33, 8.40, 8.26, 8.38

In-Loop -O0
8.31, 7.96, 8.05, 8.40, 8.33

Out-Loop -O3
0.84, 0.84, 0.86, 0.85, 0.85

In-Loop -O3
0.83, 0.85, 0.86, 0.87, 0.84


Bez optimalizací je paradoxně o fous rychlejší In-Loop varianta. S optimalizacemi je úplně jedno, až na to, že vykonávání je o řád rychlejší oproti variantě bez optimalizací.

C / C++ › Efektivni promenne.
10. 1. 2011   #137679

To LukAss741 : IMHO je to úplně jedno, pokud jsou zapnuty optimalizace překladače. Ty proměnné v cyklu, pokud nejsou nikde dále potřeba a jsou určeny pouze pro to vyhodnocení podmínky, budou s největší pravděpodobností přeloženy pouze na hrátky mezi registry procesoru.
A pokud tě ale opravdu _hodně_ trápí, která metoda bude ta úplně nejrychlejší, pak nezbývá nic jiného, než si to ověřit měřením. Skutečně a nekecám.

voty
C / C++ › Efektivni promenne.
10. 1. 2011   #137676

To LukAss741 : Teoreticky pracuje rychleji ten druhý případ, neboť není potřeba proměnné "vytvářet" a "rušit" při každém vstupu do cyklu. Nicméně osobně bych doporučil 1. řešení, neboť je milé, že proměnné již nejsou po skončení cyklu platné a nehrozí, že se budou plést s jinými proměnnými o nějaký kus dále. Krom toho, pokud jde o rychlost, tak předpokládám zapnuté optimalizace kompilátoru, který si to stejně zoptimalizuje tak, jak uzná za vhodné. Nesnažte se dělat optimalizace, které za vás může dělat někdo jiný.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý