最初の値:
私は実際には2ビット値のコンパクトなシリーズであるバイナリ値を持っています。(つまり、バイナリ値の各2ビットは0、1、2、または3を表します。)したがって、たとえば、0、3、1、2は00110110になります。このバイナリ文字列では、私が気にするのは3(または、代わりに、ビットを反転して、答えが簡単になる場合は0のみを気にすることもできます)。他のすべての数値は関係ありません(理由については後で説明します)。
2番目の値:
同じように表された2ビット値の圧縮された一連の2番目のバイナリ値があります。最初の値と同じ長さです。
算数:
最初の値の3と同じ位置にある2番目の値の2ビットの数値の合計が必要です。言い換えれば、私が持っている場合:
First: 11000011
Second: 01111101
その場合、私の答えは「2」になります(最初の値に「11」が一致したのはこれらだけだったので、「2番目」の最初の数字と最後の数字を足し合わせました)。
これをできるだけ少ないクロックサイクルで実行したいと思います(GPUまたはx86アーキテクチャのいずれかで)。ただし、私は通常、アセンブラーソリューションではなく、アルゴリズムを探しています。各番号から一度に2ビットをマスクして、いくつかのループを実行するよりも速い方法はありますか?