-
Data: 2015-09-01 14:40:34
Temat: Re: Szybkie szukanie ustawionego bitu
Od: szemrany <s...@o...off> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]
Reasumując chcę wszystkim podziękować za uwagi i sugestie oraz chcę
przedstawić wyniki testów. Zrobiłem 4 funkcje operujące na różnych
algorytmach i pomierzyłem ich wydajność.
Założenie: daję do sprawdzenia liczbę, która ma ustawiony dopiero 38 bit (i
inne dalej), pętla wykonuje się 10 mln razy, oto wyniki:
- Metoda klasyczna czyli pętla while i przesuwanie bitów w prawo, aż będzie
ustawiony najmłodsdzy bit
Czas: 813 ms
- Metoda dzielenia połówkowego/binarnego, algorytm z wiki:
function ctz (x)
if x = 0 return 32
n <- 0
if (x & 0x0000FFFF) = 0: n <- n + 16, x <- x >> 16
if (x & 0x000000FF) = 0: n <- n + 8, x <- x >> 8
if (x & 0x0000000F) = 0: n <- n + 4, x <- x >> 4
if (x & 0x00000003) = 0: n <- n + 2, x <- x >> 2
if (x & 0x00000001) = 0: n <- n + 1
return n
Czas: 67 ms
- Metoda z X & -X (pozostawienie tylko najmłodszego ustawionego bitu),
potem sprawdzenie młodszych 32 bitów przez &, jeśli nic nie ma to dodanie
do wyniki 32, przesunięcie starszych 32 bitów w prawo i sprawdzenie czy coś
w nich jest przez &, a gdy jest to switch na wartości od 2 do 32, który
zwraca indeks (dla 256 zwraca 8)
Czas: 51 ms
- Assemblerowa instrukcja BSF użyta dwa razy na starszych i młodszych
bitach liczby 64 bitowej:
BSF EAX, DWORD PTR [&u64]
JNZ @@Exit
BSF EAX, DWORD PTR [&u64 + 4]
JZ @@Exit
ADD EAX, 32
@@Exit:
MOV &Result, EAX
Czas: 28 ms
--
howgh
szemrany
"Trzeba z żywymi naprzód iść, po życie sięgać nowe,
a nie w uwiędłych laurów liść z uporem stroić głowę"
Następne wpisy z tego wątku
- 01.09.15 16:10 bartekltg
- 01.09.15 17:28 szemrany
- 01.09.15 22:20 szemrany
- 04.09.15 09:14 Wojciech Muła
- 04.09.15 09:53 szemrany
- 04.09.15 17:01 Wojciech Muła
- 04.09.15 20:20 szemrany
- 07.09.15 09:46 Radoslaw Szwed
Najnowsze wątki z tej grupy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
Najnowsze wątki
- 2025-02-21 Warszawa => Key Account Manager IT <=
- 2025-02-21 Warszawa => Data Engineer (Tech Lead) <=
- 2025-02-21 Aliexpress zaczął oszukiwać na bezczelnego.
- 2025-02-21 Warszawa => System Architect (Java background) <=
- 2025-02-21 Kula w łeb
- 2025-02-21 Warszawa => System Architect (background deweloperski w Java) <=
- 2025-02-21 Warszawa => Solution Architect (Java background) <=
- 2025-02-21 Lublin => JavaScript / Node / Fullstack Developer <=
- 2025-02-21 Pawel S
- 2025-02-21 Warszawa => Key Account Manager (Usługi HR) <=
- 2025-02-21 Katowice => Senior Field Sales (system ERP) <=
- 2025-02-21 Chrzanów => Programista NodeJS <=
- 2025-02-21 Wrocław => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-02-21 Warszawa => Administrator Systemów Windows IT <=
- 2025-02-21 Wrocław => Specjalista ds. Sprzedaży (transport drogowy) <=