标签:UI 矩阵相乘 单位 mat blog lib title blank void
http://blog.chinaunix.net/uid-20196318-id-3277600.html
Jerasure库提供Reed-Solomon和Cauchy Reed-Solomon两种编码算法的实现.
Reed-Solomon编解码接口
1) 编码矩阵生成
// generate matrix, last m rows
matrix = talloc(int, m*k);
for (i = 0; i < m; i++) {
for (j = 0; j < k; j++) {
matrix[i*k+j] = galois_single_divide(1, i ^ (m + j), w);
}
}
2)编码接口
void jerasure_matrix_encode(int k, int m, int w, int *matrix, char **data_ptrs, char **coding_ptrs, int size)
3)解码接口
根据存活的块,恢复出所有的数据块,如果有校验块丢失,最后会根据数据块计算出对应的校验块。
int jerasure_matrix_decode(int k, int m, int w, int *matrix, int row_k_ones, int *erasures, char **data_ptrs, char **coding_ptrs, int size)
erasures[0] = 0; // 第0个块丢失
erasures[1] = 3; // 第3个块丢失
erasures[2] = -1; // -1, 结束标识
4)恢复指定块
如果只丢失一个数据块,要运用3中的接口,则必须获取到前k个存活的块;要想使用任意K个块恢复丢失的某个数据,可先根据存活的块,计算出解码矩阵,运用矩阵乘法恢复出指定块的数据。
int jerasure_make_decoding_matrix(int k, int m, int w, int *matrix, int *erased, int *decoding_matrix, int *dm_ids)
for (i = 0; i < m + k; i++) erased[i] = 0;
erased[0] = 1; // 第0个块丢失
erased[1] = 1; // 第1个块丢失
? decoding_matrix: 解码矩阵(输出)
? dm_ids: 存储的数据块 (输出)
void jerasure_matrix_dotprod(int k, int w, int *matrix_row,
int *src_ids, int dest_id, char **data_ptrs, char **coding_ptrs, int size)
5)Cauchy Reed-Solomon编解码接口
接口及使用方式与Reed-Solomon的类似,对应的接口分别为:
不同的是,Cauchy Reed-Solomon使用的编码矩阵需要先经过转化。
int *jerasure_matrix_to_bitmatrix(int k, int m, int w, int *matrix)
返回值即为Cauchy Reed-Solomon的编码矩阵。
标签:UI 矩阵相乘 单位 mat blog lib title blank void
原文地址:http://www.cnblogs.com/sylar5/p/6490993.html