From: Peng Xiao Date: Sat, 13 Apr 2013 06:34:30 +0000 (+0800) Subject: Use a faster way to count 1's (used by Hamming) X-Git-Tag: submit/tizen/20180620.034203~3^2~1308^2~1334^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6dd601354658fa51f08775d1fe0bbd636708efeb;p=platform%2Fupstream%2Fopencv.git Use a faster way to count 1's (used by Hamming) --- diff --git a/modules/ocl/src/opencl/brute_force_match.cl b/modules/ocl/src/opencl/brute_force_match.cl index edc0bd147c..8dcb9d2070 100644 --- a/modules/ocl/src/opencl/brute_force_match.cl +++ b/modules/ocl/src/opencl/brute_force_match.cl @@ -62,15 +62,12 @@ #define DIST_TYPE 0 #endif -int bit1Count(int x) +//http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel +int bit1Count(int v) { - int c = 0; - for (int i = 0 ; i < 32 ; i++) - { - c += x & 1; - x >>= 1; - } - return c; + v = v - ((v >> 1) & 0x55555555); // reuse input as temporary + v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp + return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count } // dirty fix for non-template support