BWA-FastAlign/mate_sw.c

55 lines
2.0 KiB
C

#include "mate_sw.h"
// 初始化mate sw计算相关的数据
void init_msw_data(msw_data_t* msw, int n_threads, int msw_batch_size) {
#define _alloc_msw_num(data, num, data_type) ((data) = calloc(num, sizeof(data_type)))
#define _alloc_msw(data, data_type) ((data) = calloc(n_threads, sizeof(data_type)))
int i = 0, j = 0;
_alloc_msw(msw->t_msw_tasks, msw_task_v*);
for (i = 0; i < n_threads; ++i) {
_alloc_msw_num(msw->t_msw_tasks[i], 2, msw_task_v);
}
_alloc_msw(msw->t_msw_buf, msw_buf_t);
_alloc_msw(msw->t_msw_stats, msw_stats_t);
_alloc_msw(msw->t_msw_ref_buf, byte_vv);
_alloc_msw(msw->t_msw_seq_buf, byte_vv);
_alloc_msw(msw->t_msw_1_refs, msw_ref_v);
_alloc_msw(msw->t_msw_1_seqs, msw_seq_v);
_alloc_msw(msw->t_msw_1_xtras, int_v);
_alloc_msw(msw->t_msw_1_kswrs, msw_kswr_v);
_alloc_msw(msw->t_msw_2_refs, msw_ref_v);
_alloc_msw(msw->t_msw_2_seqs, msw_seq_v);
_alloc_msw(msw->t_msw_2_xtras, int_v);
_alloc_msw(msw->t_msw_2_kswrs, msw_kswr_v);
// 初始化缓存空间
msw_ref_t init_ref = {0};
msw_seq_t init_seq = {0};
kswr_avx_t init_kswr = {0};
byte_v init_byte_v = {0};
for (i = 0; i < n_threads; ++i) {
for (j = 0; j < msw_batch_size; ++j) {
// for ref seq buf
kv_push(byte_v, msw->t_msw_ref_buf[i], init_byte_v);
kv_push(byte_v, msw->t_msw_seq_buf[i], init_byte_v);
// for msw第一阶段
kv_push(msw_ref_t, msw->t_msw_1_refs[i], init_ref);
kv_push(msw_seq_t, msw->t_msw_1_seqs[i], init_seq);
kv_push(int, msw->t_msw_1_xtras[i], 0);
kv_push(kswr_avx_t, msw->t_msw_1_kswrs[i], init_kswr);
// for msw第二阶段
kv_push(msw_ref_t, msw->t_msw_2_refs[i], init_ref);
kv_push(msw_seq_t, msw->t_msw_2_seqs[i], init_seq);
kv_push(int, msw->t_msw_2_xtras[i], 0);
kv_push(kswr_avx_t, msw->t_msw_2_kswrs[i], init_kswr);
}
}
}