Обновление: прочитайте код, это НЕ о подсчете битов в одном int
Можно ли улучшить производительность следующего кода с помощью какого-нибудь умного ассемблера?
uint bit_counter[64];
void Count(uint64 bits) {
bit_counter[0] += (bits >> 0) & 1;
bit_counter[1] += (bits >> 1) & 1;
// ..
bit_counter[63] += (bits >> 63) & 1;
}
Count
находится во внутреннем цикле моего алгоритма.
Update: Архитектура: x86-64, Sandy Bridge, поэтому могут использоваться SSE4.2, AVX1 и более старые технологии, но не AVX2 или BMI1/2.
bits
переменная имеет почти случайные биты (близкие к половине нулей и половины)