Cwiczenie: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Aneczka (dyskusja | edycje)
Nie podano opisu zmian
 
Aneczka (dyskusja | edycje)
Nie podano opisu zmian
 
(Nie pokazano 2 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
=Proste eksperymenty ze środowiskiem=
=Proste eksperymenty ze środowiskiem=


\begin{exe}
 
Który program wykona się szybciej:
Który program wykona się szybciej:
\begin{C}
 
x = 1.0;
x = 1.0;
for( i = 0; i < N; i++)
'''for'''( i = 0; i < N; i++)
x = x/3.0;  
x = x/3.0;  
\end{C}
 
czy
czy
\begin{C}
x = 1.0; f = 1.0/3.0;
for( i = 0; i < N; i++)
x = x*f;
\end{C}
\end{exe}


\begin{sol}
x = 1.0; f = <math>1.0/3.0</math>;
'''for'''( i = 0; i < N; i++)
x = x*f;
 
 
Oczywiście, szybszy będzie program nie wykorzystujący dzielenia. Optymalizujący
Oczywiście, szybszy będzie program nie wykorzystujący dzielenia. Optymalizujący
kompilator (\lstux!gcc -O3!) strawi, a nawet będzie jeszcze bardziej zadowolony z pozornie
kompilator (\lstux!gcc -O3!) strawi, a nawet będzie jeszcze bardziej zadowolony z pozornie
rozrzutnego kodu  
rozrzutnego kodu  
\begin{C}
x = 1.0;  
x = 1.0;  
for( i = 0; i < N; i++)
'''for'''( i = 0; i < N; i++)
x = x*(1.0/3.0);  
x = x*(1.0/3.0);  
\end{C}
 
dlatego, że stałą, przez którą trzeba mnożyć <math>x</math>, wyliczy przed wykonaniem
dlatego, że stałą, przez którą trzeba mnożyć <math>x</math>, wyliczy przed wykonaniem
programu.  
programu.  


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Sprawdź, czy z wyłączoną optymalizacją ten kod okaże się najwolniejszy
Sprawdź, czy z wyłączoną optymalizacją ten kod okaże się najwolniejszy
ze wszystkich...  
ze wszystkich...
 
<div class="mw-collapsible-content" style="display:none">Okazuje się, że nie!</div>
\ans{Okazuje się, że nie!}
</div>
 
\end{sol}

Aktualna wersja na dzień 08:56, 18 lip 2006

Proste eksperymenty ze środowiskiem

Który program wykona się szybciej:

x = 1.0;
for( i = 0; i < N; i++)
x = x/3.0; 

czy

x = 1.0; f = 1.0/3.0;
for( i = 0; i < N; i++)
x = x*f; 


Oczywiście, szybszy będzie program nie wykorzystujący dzielenia. Optymalizujący kompilator (\lstux!gcc -O3!) strawi, a nawet będzie jeszcze bardziej zadowolony z pozornie rozrzutnego kodu

x = 1.0; 
for( i = 0; i < N; i++)
x = x*(1.0/3.0); 

dlatego, że stałą, przez którą trzeba mnożyć x, wyliczy przed wykonaniem programu.

Sprawdź, czy z wyłączoną optymalizacją ten kod okaże się najwolniejszy ze wszystkich...