55 lines
2.0 KiB
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);
|
|
}
|
|
}
|
|
} |