Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Operacje matematyczne czy warunki - szybkosc

Ostatnio zmodyfikowano 2012-10-20 18:01
Autor Wiadomość
diego997
Temat założony przez niniejszego użytkownika
Operacje matematyczne czy warunki - szybkosc
» 2012-10-20 11:46:35
Cześć mam pytanie co jest szybsze, powiedzmy że wykonywane to jest non stop podczas działania programu:

1.Taka operacja matematyczna:

C/C++
((( Box[ x ][ y ] - 1 ) % 5 ) * 25 )

2. Czy wykonanie jednego z pięciu warunków i zwrócenie wartości:

C/C++
if( Box[ x ][ y ] = 1 )
     return cos1;
else if( Box[ x ][ y ] = 2 )
     return cos2;

.
.
.
else if( Box[ x ][ y ] = 5 )
     return cos5;

P-67115
jsc
» 2012-10-20 12:09:45
Chyba nie dadzą tego samego wyniku.
P-67117
cyklopek11
» 2012-10-20 12:30:06
Myślę, że najprostszy sposób aby to sprawdzić to:
- napisz prosty program który zawiera tylko to co chcesz sprawdzić i dodatkowo wywołanie jakiś dwóch funkcji (np. funkcja 1, funkcja 2, nie inline) przed Twoją instrukcją i za Twoją instrukcją.
- kompilacja obu form kodu do wersji release przy tych samych ustawieniach środowiska
- deasemblacja obu wynikowych programów i przyjrzenie się ile instrukcji asemblera jest w jednym i w drugim pomiędzy:
call adres_funkcja1 a call adres_funkcja2 (te funkcje po to aby łatwiej w asemblerze znaleźć Twój fragment)
P-67118
Mrovqa
» 2012-10-20 14:31:19
Jeżeli istnieje taka możliwość to powinno się unikać warunków. Procesor przetwarzając konkretną instrukcję przygotowuje się na kilka instrukcji do przodu - oczywiście z powodu szybkości. Gdy napotka skok, to sterowanie ląduje gdzieś indziej = na marne przygotowywał się wcześniej. Czyli w skrócie - cache procesora jest czyszczony. Gynvael Coldwind pisał kiedyś o tym na blogu i dawał przykłady dla wyrażeń warunkowych - w sporej liczbie sytuacji da się ich uniknąć, trzeba tylko pomyśleć :)
P-67124
RazzorFlame
» 2012-10-20 18:01:15
Diego jak już coś to:
=
 !=
==
 - te dwa operatory się różnią
P-67133
« 1 »
  Strona 1 z 1