-
1. Data: 2010-07-28 09:55:32
Temat: Szybkie zliczanie bitów
Od: "Sakujami" <s...@n...gmail.to>
Jak szybko zliczać bity unikając 32-krotnego lda dwusłowa przejścia w pętli
i porównywniau z maską. Funkcje podające numer pierwszego i ostatniego bitu
są szybkimi instrukcjami procesora a co ze zliczaniem? A może jest jakaś
instrukcja MMX do tego?
-
2. Data: 2010-07-28 10:19:01
Temat: Re: Szybkie zliczanie bitów
Od: Wojciech Muła <w...@p...null.onet.pl.invalid>
"Sakujami" <s...@n...gmail.to> wrote:
> Jak szybko zliczać bity unikając 32-krotnego lda dwusłowa przejścia w pętli
> i porównywniau z maską. Funkcje podające numer pierwszego i ostatniego bitu
> są szybkimi instrukcjami procesora a co ze zliczaniem? A może jest jakaś
> instrukcja MMX do tego?
Nowsze procesory, mające rozszerzenie SSE4.2 posiadają instrukcję popcnt.
W młodszych procesorach można stosować różne algorytmy. Dla krótkich słów
najprościej zrobić tablicę z prekalkulowaną liczbą bitów dla bajtów, albo
lepiej użyć metody 'Counting bits set, in parallel' z
http://graphics.stanford.edu/~seander/bithacks.html.
BTW jak się okazało, mój sposób z rozkazami SSS3 ma porównywalną
szybkość ze sprzętowym popcnt przy dużych ilościach danych:
http://wm.ite.pl/articles/sse-popcount.html
w.