Интересная бумага: Серый код .(Это PDF)
Страница 16 PDF содержит алгоритм для определения, какой бит переключать.В общем случае требуется 32 операции, чтобы определить, какой бит изменить.Если вы можете сэкономить один бит из своего счетчика (что фактически сделает его 31-разрядным счетчиком), вы можете сделать так, чтобы среднее время приращения занимало меньше операций.переключается всякий раз, когда четность четна, если вы можете сохранить бит четности, то любая другая операция приращения будет включать просто переключение младшего бита.И, конечно, вы должны переключать бит четности с каждой операцией.
Когда четность нечетна, вам просто нужно выполнить ту часть алгоритма, которая находит бит для переключения.Но так как вы уже знаете, что соотношение странно, вам не нужно проверять каждый бит.Вы можете остановиться, когда найдете бит, который удовлетворяет условию.
Я недостаточно знаком с SIMD, чтобы сказать, есть ли способ оптимизировать его.
Тем не менее, это не яснодля меня, что такая вещь была бы улучшением по сравнению с «до 31 операции», что взял бы «обычный» двоичный счетчик.Опять же, половина ваших операций потребует всего одну итерацию.Похоже, что основным преимуществом использования кода Грея было бы то, что требуется только одна запись в память (две, если вы используете вышеупомянутый бит контроля четности), тогда как другой метод может потребовать до 32 записей в память.