Zauważyłem, że moja aplikacja nds działa trochę szybciej, gdy zastępuję wszystkie wystąpienia bajtów liczbami całkowitymi. wszystkie przykłady online umieszczają przypadki u8/u16, gdy tylko jest to możliwe. Czy istnieje konkretny powód, dlaczego tak się dzieje?Dlaczego liczby całkowite są przetwarzane szybciej niż bajty w NDS?
Odpowiedz
Głównym procesorem używanym przez Nintendo DS jest 32-bitowy procesor ARM9.
odniesienia: http://en.wikipedia.org/wiki/ARM9
Zwykle procesor będzie przeprowadzał operacje w trybie word sizes, w tym przypadku 32-bitowym. W zależności od operacji konwersja bajtów do liczb całkowitych lub odwrotnie może powodować dodatkowe obciążenie procesora. Ta konwersja i potencjalny brak instrukcji dla wartości innych niż 32-bitowe liczby całkowite mogą powodować brak prędkości.
W uzupełnieniu do tego, co powiedział Daniel Li, dostęp do pamięci na platformach ARM musi być dopasowany do słów, tzn. Pobrane w pamięci muszą być wielokrotnością 32 bitów. Pobieranie zmiennej bajtowej z pamięci pociąga za sobą pobranie całego słowa zawierającego odpowiedni bajt i wykonanie wymaganych operacji bitowych w celu dopasowania go do najmniej znaczących bitów rejestru procesora.
Te dodatkowe instrukcje są automatycznie wysyłane przez kompilator, ponieważ zna on faktyczne wyrównanie zmiennych.
- 1. cudaMemset() - czy ustawia bajty lub liczby całkowite?
- 2. Jak usunąć liczby całkowite z tablicy mniejszej niż X?
- 3. Do czego przydatne są liczby całkowite o minimalnej szerokości?
- 4. Dlaczego Wybierz 1 szybciej niż Wybierz liczbę (*)?
- 5. Is + = szybciej niż - =?
- 6. Jak szybciej generować liczby losowe w R?
- 7. Java szybciej niż C
- 8. Zadania selera nie są przetwarzane
- 9. Coś szybciej niż ImageMagick?
- 10. Dlaczego liczby Fibonacciego są istotne w informatyce?
- 11. Gson. Wyodrębnij liczby całkowite jako liczby całkowite, a nie jako liczby podwójne
- 12. Jak sortować liczby całkowite alfabetycznie?
- 13. Wyodrębnij liczby całkowite z zakresów
- 14. Mathematica: Określić, czy wszystkie liczby całkowite na liście są mniejsze od liczby?
- 15. C++ dowolnej długości liczby całkowite
- 16. W jaki sposób przetwarzane są `: ~ @` i `:! @`?
- 17. W ruby, file.readlines.each nie szybciej niż file.open.each_line, dlaczego?
- 18. Długie liczby całkowite w PHP dla oszczędzania
- 19. Wyświetl liczby całkowite tylko w etykiecie AxisY?
- 20. Jak liczby całkowite mnożą się w C++?
- 21. Dlaczego C# kompiluje się znacznie szybciej niż C++?
- 22. Hash table szybciej w C# niż C++?
- 23. C# szybciej niż SortedList sortowanie <>
- 24. Kiedy należy wyraźnie podać liczby całkowite?
- 25. Dlaczego funkcja fwrite libc działa szybciej niż funkcja zapisu syscall?
- 26. dodając dwa podpisane lub niepodpisane liczby całkowite
- 27. foldl jest rekurencyjne, więc dlaczego foldr działa szybciej niż foldl?
- 28. C++ konwersja liczb zmiennoprzecinkowych na liczby całkowite
- 29. dlaczego Firefox uruchamia ten kod 10x szybciej niż Chrome
- 30. Dlaczego druga pętla for zawsze działa szybciej niż pierwsza?
Czy możesz podać przykładowy kod? Podejrzewam, że widzisz przykłady deklarujące zmienne 8/16 bitowe w strukturach, a zamiast tego używasz ich jako locals. –