Найти все 2-битные значения, которые совпадают с другим двоичным шаблоном, а затем суммировать их

Первое значение:

У меня есть двоичное значение, которое на самом деле представляет собой компактную серию 2-битных значений. (То есть каждые 2 бита в двоичном значении представляют 0, 1, 2 или 3.) Так, например, 0, 3, 1, 2 становится 00110110.В этой двоичной строке все, что меня волнует, это 3 (или, альтернативно, я мог бы перевернуть биты и заботиться только о 0, если это облегчит ваш ответ). Все остальные числа не имеют значения (по причинам, которые мы рассмотрим чуть позже).

Второе значение:

У меня есть второе двоичное значение, которое также представляет собой сжатую серию 2-битных значений, представленных таким же образом. Он имеет ту же длину, что и первое значение.

Математика:

Мне нужна сумма 2-битных чисел во втором значении, которые имеют ту же позицию, что и 3 из первого значения. Другими словами, если бы у меня было:

First:  11000011
Second: 01111101

Тогда мой ответ был бы "2" (я сложил первое и последнее число из "Второго" вместе, потому что это были единственные, у которых было "11" в Первом Значение, которое соответствует им.)

Я хочу сделать это за как можно меньшее количество тактов (либо на графическом процессоре, либо на архитектуре x86). Однако я обычно ищу алгоритм, а не решение на ассемблере. Есть ли способ быстрее, чем маскировать два бита за раз от каждого числа и запускать несколько циклов?

6
задан Max Kanat-Alexander 12 May 2012 в 09:35
поделиться