Когда использовать параллельный счет - MIT HAKMEM для счетчика битов, когда проблема с памятью?

Битовый счет может быть выполнен несколькими способами, например. с установленным битовым итератором, неустановленным битовым итератором, предварительно вычисленными битами с помощью таблиц поиска или параллельного подсчета. Как я выяснил при поиске в сети, итератор неустановленных битов работает быстро, когда количество неустановленных битов меньше, и задает итератор битов наоборот. Но когда следует использовать параллельный счет, в частности MIT HAKMEM (см. Ниже)? Это кажется довольно быстрым, хотя, вероятно, медленнее, чем таблицы поиска. Всегда ли он лучше по скорости по сравнению с установкой / снятием бита? Есть ли какие-то другие мнения относительно того, что выбрать, кроме скорости и памяти?

 int BitCount(unsigned int u) {
     unsigned int uCount;

     uCount = u - ((u >> 1) & 033333333333) - ((u >> 2) & 011111111111);
     return ((uCount + (uCount >> 3)) & 030707070707) % 63;
 }
6
задан pigelin 21 December 2011 в 13:18
поделиться