私は空間インデックス用のモートン番号を作成していますが、私は__int128番号に変わる8個の符号なし16ビット番号を持っています。効率は非常に重要なので、純粋なソリューション(すべてをループ)または別々の8個の128ビット番号を構築するには高価です。効率的に8 __int16の数字からビットをインターリーブする方法は?
私はGCCを使用していますが、ターゲットマシンは64ビットですが、BMI2はサポートされていません。
どのように計算を高速化できますか?
私は空間インデックス用のモートン番号を作成していますが、私は__int128番号に変わる8個の符号なし16ビット番号を持っています。効率は非常に重要なので、純粋なソリューション(すべてをループ)または別々の8個の128ビット番号を構築するには高価です。効率的に8 __int16の数字からビットをインターリーブする方法は?
私はGCCを使用していますが、ターゲットマシンは64ビットですが、BMI2はサポートされていません。
どのように計算を高速化できますか?
マシンがx86でSSE2をサポートしている場合は、movmsk
命令を使用して賢明な答えがあります。フルコード用のGoogle SSE2 bit matrix transpose
[This](http://programming.sirrida.de/bit_perm.html#shuffle)は興味深いかもしれません。 –
@MatteoItaliaありがとうございます。はい、私はそれを認識しています。残念ながら、BMI2にはPDEPやPEXT命令がなく、一度に多くのコードを計算したいと考えています。 – Evil