Operacje matematyczne czy warunki - szybkosc
Ostatnio zmodyfikowano 2012-10-20 18:01
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: ((( Box[ x ][ y ] - 1 ) % 5 ) * 25 )
2. Czy wykonanie jednego z pięciu warunków i zwrócenie wartości: if( Box[ x ][ y ] = 1 ) return cos1; else if( Box[ x ][ y ] = 2 ) return cos2;
. . . else if( Box[ x ][ y ] = 5 ) return cos5;
|
|
jsc |
» 2012-10-20 12:09:45 Chyba nie dadzą tego samego wyniku. |
|
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)
|
|
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ć :) |
|
RazzorFlame |
» 2012-10-20 18:01:15 Diego jak już coś to: = != == - te dwa operatory się różnią |
|
« 1 » |