タグ付けされた質問 「swar」

8
64ビット整数のパックされた8ビット整数を並列に1で減算、ハードウェアSIMDなしのSWAR
私が64ビット整数を持っている場合、それを8要素のパックされた8ビット整数の配列として解釈しています。1ある要素の結果が別の要素の結果に影響を与えることなくオーバーフローを処理しながら、各パック整数から定数を減算する必要があります。 私は現在このコードを使用していますが、機能しますが、パックされた各8ビット整数の減算を並列に実行し、メモリアクセスを行わないソリューションが必要です。x86では、psubbパックされた8ビット整数を減算するようなSIMD命令を並列で使用できますが、コーディング対象のプラットフォームはSIMD命令をサポートしていません。(この場合はRISC-V)。 したがって、SWAR(レジスタ内のSIMD)を実行して、のバイト間のキャリー伝播を手動でキャンセルしようとしています。uint64_tこれと同等の処理を実行します。 uint64_t sub(uint64_t arg) { uint8_t* packed = (uint8_t*) &arg; for (size_t i = 0; i < sizeof(uint64_t); ++i) { packed[i] -= 1; } return arg; } これはビット演算子で実行できると思いますが、よくわかりません。SIMD命令を使用しないソリューションを探しています。独自のソリューションを実装できるように、非常に移植性のあるCまたはC ++のソリューション、またはその背後にある理論だけを探しています。
77 c++  c  bit-manipulation  simd  swar 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.