我正在使用一个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