行数が非常に多いNx3
ビットマトリックスを使用しています。
典型的なマトリックスは次のようになります N
2^40
000
001
010
011
...
私はこのようなことをします
transform_row(5); //return 000
transform_row(10); //return 101
assemble_array(000,101);
//return a 10x3 matrix, where:
//row 5: 000
//row 10: 101
//the other rows wait for the other iteration to be filled
...//repeat
initial_matrix
myとの両方のビット パターンtransformed_matrix
は、非常に冗長であるか、非常に予備的です。たとえば、最初の列は のみで0
ある場合もあれば、 の巨大なブロックが存在する場合もあります1
。
この状況で組み立てて効率的に圧縮するためのオプションは何ですか?
独自のアセンブル アルゴリズムを使用する必要がありますか、それとも圧縮ライブラリを使用できますか?
このシーケンシャルな状況で圧縮ライブラリが効率的に機能するかどうかわからないため、自作を考えています。
assemble_array
GPUで並列実行しています。
したがって、関数はスレッドセーフで、連想的で可換である必要があります。
bit_matrix_transform.cu
bit_matrix initial_matrix;
first=0;
last=2^40;
UnaryFunction bit_vector transform_row::operator(long row_index);
BinaryFunction bit_matrix assemble_array::operator(bit_array x, bit_array y);
bit_matrix transformed_matrix = thrust::transform_reduce(first, last, transform_row, init, assemble_array);
//a bit_array being either a bit_vector or a bit_matrix