解决了读文件的bug,原因是target有些行是0,没有碱基,保留了测试代码

This commit is contained in:
zzh 2023-09-03 23:59:24 +08:00
parent 395b2e598d
commit c04c6541ef
9 changed files with 252 additions and 98 deletions

View File

@ -1,9 +1,10 @@
CC= gcc CC= gcc
#CFLAGS= -g -Wall -Wno-unused-function -mavx2 #CFLAGS= -g -Wall -Wno-unused-function -mavx2
CFLAGS= -Wall -Wno-unused-function -O2 -mavx2 CFLAGS= -Wall -Wno-unused-function -O2 -mavx2
DFLAGS= -DSHOW_PERF DFLAGS= -DSHOW_PERF -DDEBUG_RETURN_VALUE
#DFLAGS= -DSHOW_PERF -DDEBUG_OUT -DDEBUG_RETURN_VALUE #DFLAGS= -DSHOW_PERF -DDEBUG_OUT -DDEBUG_RETURN_VALUE
PROG= sw_perf PROG= sw_perf
PROG2= get_line
INCLUDES= INCLUDES=
LIBS= LIBS=
SUBDIRS= . SUBDIRS= .
@ -30,9 +31,12 @@ endif
all:$(PROG) all:$(PROG)
sw_perf:$(OBJS) main.o $(PROG):$(OBJS) main.o
$(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) main.o -o $@ -L. $(LIBS) $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) main.o -o $@ -L. $(LIBS)
$(PROG2): get_line.o
$(CC) $(CFLAGS) $(LDFLAGS) get_line.o -o $@ -L. $(LIBS)
clean: clean:
rm -f *.o a.out $(PROG) *~ *.a rm -f *.o a.out $(PROG) *~ *.a

BIN
get_line 100755

Binary file not shown.

61
get_line.c 100644
View File

@ -0,0 +1,61 @@
/*********************************************************************************************
Description: Get specific line of a txt file
Copyright : All right reserved by NCIC.ICT
Author : Zhang Zhonghai
Date : 2023/08/28
***********************************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define READ_BUF_SIZE 102400000
int main(int argc, char *argv[])
{
if (argc < 3)
{
fprintf(stderr, "Please input the file path and the line number you want to get!\n");
return 1;
}
const char *in_path = argv[1];
size_t expect_line_num = atoi(argv[2]);
FILE *in_f = fopen(in_path, "r");
char *read_buf = (char *)malloc(READ_BUF_SIZE);
int actual_size = 0;
int expect_size = READ_BUF_SIZE;
size_t cur_line_num = 0;
size_t last_line_pos = 0;
size_t cur_line_pos = 0;
int i, j;
int flag_found = 0;
// 读取数据
actual_size = fread(read_buf, 1, expect_size, in_f);
while (actual_size > 0)
{
for (i = 0; i < actual_size; ++i)
if (read_buf[i] == '\n')
{
cur_line_num += 1;
last_line_pos = cur_line_pos;
cur_line_pos = i;
if (cur_line_num == expect_line_num)
{
for (j = last_line_pos + 1; j <= cur_line_pos; ++j)
{
fprintf(stdout, "%c", read_buf[j]);
}
flag_found = 1;
break;
}
}
if (flag_found)
break;
actual_size = fread(read_buf, 1, expect_size, in_f);
}
if (!flag_found)
fprintf(stderr, "Invalid line number!\n");
return 0;
}

View File

@ -289,6 +289,13 @@ int ksw_extend_avx2(thread_mem_t *tmem,
int16_t ins[tlen + 1][qlen + 2]; int16_t ins[tlen + 1][qlen + 2];
int16_t del[tlen + 1][qlen + 2]; int16_t del[tlen + 1][qlen + 2];
int16_t score[tlen + 1][qlen + 2]; int16_t score[tlen + 1][qlen + 2];
for (dii = 0; dii <= tlen; ++dii)
{
for (djj = 0; djj <= qlen; ++djj)
{
ins[dii][djj] = del[dii][djj] = score[dii][djj] = 0;
}
}
ins[0][0] = del[0][0] = score[0][0] = init_score; ins[0][0] = del[0][0] = score[0][0] = init_score;
ins[0][1] = MAX(0, init_score - (o_ins + e_ins)); ins[0][1] = MAX(0, init_score - (o_ins + e_ins));
del[1][0] = MAX(0, init_score - (o_del + e_del)); del[1][0] = MAX(0, init_score - (o_del + e_del));
@ -307,16 +314,15 @@ int ksw_extend_avx2(thread_mem_t *tmem,
end1 = D; // 闭区间 end1 = D; // 闭区间
else else
end1 = qlen; end1 = qlen;
beg1 = MAX(D - window_size, beg1); // beg1 = MAX(D - window_size, beg1);
end1 = MIN(D + window_size, end1); // end1 = MIN(D + window_size, end1);
// beg = MAX(beg1, beg);
// end = MIN(end1, end);
// if (beg > end)
// break;
beg = MAX(beg1, beg); beg = beg1;
end = MIN(end1, end); end = end1;
if (beg > end)
break;
// beg = beg1;
// end = end1;
iend = D - beg; // ref开始计算的位置倒序 iend = D - beg; // ref开始计算的位置倒序
span = end - beg; span = end - beg;
@ -415,20 +421,20 @@ int ksw_extend_avx2(thread_mem_t *tmem,
} }
// 调整计算的边界 // 调整计算的边界
for (j = beg; LIKELY(j <= end); ++j) // for (j = beg; LIKELY(j <= end); ++j)
{ //{
int has_val = hA1[j - 1] | hA2[j]; // int has_val = hA1[j - 1] | hA2[j];
if (has_val) // if (has_val)
break; // break;
} //}
beg = j; // beg = j;
for (j = end + 1; LIKELY(j >= beg); --j) // for (j = end + 1; LIKELY(j >= beg); --j)
{ //{
int has_val = hA1[j - 1] | hA2[j]; // int has_val = hA1[j - 1] | hA2[j];
if (has_val) // if (has_val)
break; // break;
} //}
end = j + 1 <= qlen ? j + 1 : qlen; // end = j + 1 <= qlen ? j + 1 : qlen;
// beg = 0; // beg = 0;
// end = qlen; // uncomment this line for debugging // end = qlen; // uncomment this line for debugging
@ -441,9 +447,9 @@ int ksw_extend_avx2(thread_mem_t *tmem,
{ {
for (djj = 0; djj <= qlen; ++djj) for (djj = 0; djj <= qlen; ++djj)
{ {
fprintf(score_f_arr[1], "%-3d", score[dii][djj]); fprintf(score_f_arr[1], "%-4d", score[dii][djj]);
fprintf(ins_ext_f_arr[1], "%-3d", ins[dii][djj]); fprintf(ins_ext_f_arr[1], "%-4d", ins[dii][djj]);
fprintf(del_ext_f_arr[1], "%-3d", del[dii][djj]); fprintf(del_ext_f_arr[1], "%-4d", del[dii][djj]);
} }
fprintf(score_f_arr[1], "\n"); fprintf(score_f_arr[1], "\n");
fprintf(ins_ext_f_arr[1], "\n"); fprintf(ins_ext_f_arr[1], "\n");

View File

@ -317,16 +317,15 @@ int ksw_extend_avx2_u8(thread_mem_t *tmem,
end1 = D; // 闭区间 end1 = D; // 闭区间
else else
end1 = qlen; end1 = qlen;
beg1 = MAX(D - window_size, beg1); // beg1 = MAX(D - window_size, beg1);
end1 = MIN(D + window_size, end1); // end1 = MIN(D + window_size, end1);
// beg = MAX(beg1, beg);
// end = MIN(end1, end);
// if (beg > end)
// break;
beg = MAX(beg1, beg); beg = beg1;
end = MIN(end1, end); end = end1;
if (beg > end)
break;
// beg = beg1;
// end = end1;
iend = D - beg; // ref开始计算的位置倒序 iend = D - beg; // ref开始计算的位置倒序
span = end - beg; span = end - beg;
@ -394,22 +393,22 @@ int ksw_extend_avx2_u8(thread_mem_t *tmem,
} }
// 调整计算的边界 // 调整计算的边界
for (j = beg; LIKELY(j <= end); ++j) // for (j = beg; LIKELY(j <= end); ++j)
{ //{
int has_val = hA1[j - 1] | hA2[j]; // int has_val = hA1[j - 1] | hA2[j];
if (has_val) // if (has_val)
break; // break;
} //}
beg = j; // beg = j;
for (j = end + 1; LIKELY(j >= beg); --j) // for (j = end + 1; LIKELY(j >= beg); --j)
{ //{
int has_val = hA1[j - 1] | hA2[j]; // int has_val = hA1[j - 1] | hA2[j];
if (has_val) // if (has_val)
break; // break;
else // else
hA0[j - 1] = 0; // hA0[j - 1] = 0;
} //}
end = j + 1 <= qlen ? j + 1 : qlen; // end = j + 1 <= qlen ? j + 1 : qlen;
// swap m, h, e, f // swap m, h, e, f
SWAP_DATA_POINTER; SWAP_DATA_POINTER;

View File

@ -58,14 +58,14 @@ int ksw_extend_normal(thread_mem_t *tmem, int qlen, const uint8_t *query, int tl
max_off = 0; max_off = 0;
beg = 0, end = qlen; beg = 0, end = qlen;
#ifdef DEBUG_OUT #ifdef DEBUG_OUT
fprintf(score_f_arr[0], "%-3d", h0); fprintf(score_f_arr[0], "%-4d", h0);
fprintf(ins_ext_f_arr[0], "%-3d", h0); fprintf(ins_ext_f_arr[0], "%-4d", h0);
fprintf(del_ext_f_arr[0], "%-3d", h0); fprintf(del_ext_f_arr[0], "%-4d", h0);
for (j = 0; LIKELY(j < end); ++j) // 遍历query字符序列 for (j = 0; LIKELY(j < end); ++j) // 遍历query字符序列
{ {
fprintf(score_f_arr[0], "%-3d", MAX(h0 - o_ins - (j + 1) * e_ins, 0)); fprintf(score_f_arr[0], "%-4d", MAX(h0 - o_ins - (j + 1) * e_ins, 0));
fprintf(ins_ext_f_arr[0], "%-3d", MAX(h0 - o_ins - (j + 1) * e_ins, 0)); fprintf(ins_ext_f_arr[0], "%-4d", MAX(h0 - o_ins - (j + 1) * e_ins, 0));
fprintf(del_ext_f_arr[0], "%-3d", 0); fprintf(del_ext_f_arr[0], "%-4d", 0);
} }
fprintf(score_f_arr[0], "\n"); fprintf(score_f_arr[0], "\n");
fprintf(ins_ext_f_arr[0], "\n"); fprintf(ins_ext_f_arr[0], "\n");
@ -83,8 +83,8 @@ int ksw_extend_normal(thread_mem_t *tmem, int qlen, const uint8_t *query, int tl
end = i + w + 1; end = i + w + 1;
if (end > qlen) // 终点不超过query长度 if (end > qlen) // 终点不超过query长度
end = qlen; end = qlen;
// beg = 0; beg = 0;
// end = qlen; end = qlen;
// compute the first column // compute the first column
if (beg == 0) if (beg == 0)
{ {
@ -95,15 +95,15 @@ int ksw_extend_normal(thread_mem_t *tmem, int qlen, const uint8_t *query, int tl
else else
h1 = 0; h1 = 0;
#ifdef DEBUG_OUT #ifdef DEBUG_OUT
fprintf(ins_ext_f_arr[0], "%-3d", 0); fprintf(ins_ext_f_arr[0], "%-4d", 0);
fprintf(del_ext_f_arr[0], "%-3d", MAX(h0 - o_del - (i + 1) * e_del, 0)); fprintf(del_ext_f_arr[0], "%-4d", MAX(h0 - o_del - (i + 1) * e_del, 0));
#endif #endif
for (j = beg; LIKELY(j < end); ++j) // 遍历query字符序列 for (j = beg; LIKELY(j < end); ++j) // 遍历query字符序列
{ {
#ifdef DEBUG_OUT #ifdef DEBUG_OUT
fprintf(score_f_arr[0], "%-3d", h1); fprintf(score_f_arr[0], "%-4d", h1);
fprintf(ins_ext_f_arr[0], "%-3d", f); fprintf(ins_ext_f_arr[0], "%-4d", f);
fprintf(del_ext_f_arr[0], "%-3d", eh[j].e); fprintf(del_ext_f_arr[0], "%-4d", eh[j].e);
#endif #endif
// At the beginning of the loop: eh[j] = { H(i-1,j-1), E(i,j) }, f = F(i,j) and h1 = H(i,j-1) // At the beginning of the loop: eh[j] = { H(i-1,j-1), E(i,j) }, f = F(i,j) and h1 = H(i,j-1)
// Similar to SSE2-SW, cells are computed in the following order: // Similar to SSE2-SW, cells are computed in the following order:
@ -130,7 +130,7 @@ int ksw_extend_normal(thread_mem_t *tmem, int qlen, const uint8_t *query, int tl
f = f > t ? f : t; // computed F(i,j+1) f = f > t ? f : t; // computed F(i,j+1)
} }
#ifdef DEBUG_OUT #ifdef DEBUG_OUT
fprintf(score_f_arr[0], "%-3d", h1); fprintf(score_f_arr[0], "%-4d", h1);
fprintf(score_f_arr[0], "\n"); fprintf(score_f_arr[0], "\n");
fprintf(ins_ext_f_arr[0], "\n"); fprintf(ins_ext_f_arr[0], "\n");
fprintf(del_ext_f_arr[0], "\n"); fprintf(del_ext_f_arr[0], "\n");
@ -142,8 +142,8 @@ int ksw_extend_normal(thread_mem_t *tmem, int qlen, const uint8_t *query, int tl
max_ie = gscore > h1 ? max_ie : i; // max_ie表示取得全局最大分值时target字符串的位置 max_ie = gscore > h1 ? max_ie : i; // max_ie表示取得全局最大分值时target字符串的位置
gscore = gscore > h1 ? gscore : h1; gscore = gscore > h1 ? gscore : h1;
} }
if (m == 0) // 遍历完query之后当前轮次的最大分值为0则跳出循环 // if (m == 0) // 遍历完query之后当前轮次的最大分值为0则跳出循环
break; // break;
if (m > max) // 当前轮最大分值大于之前的最大分值 if (m > max) // 当前轮最大分值大于之前的最大分值
{ {
max = m, max_i = i, max_j = mj; // 更新取得最大值的target和query的位置 max = m, max_i = i, max_j = mj; // 更新取得最大值的target和query的位置
@ -163,12 +163,12 @@ int ksw_extend_normal(thread_mem_t *tmem, int qlen, const uint8_t *query, int tl
} }
} }
// update beg and end for the next round // update beg and end for the next round
for (j = beg; LIKELY(j < end) && eh[j].h == 0 && eh[j].e == 0; ++j) // for (j = beg; LIKELY(j < end) && eh[j].h == 0 && eh[j].e == 0; ++j)
; // ;
beg = j; // beg = j;
for (j = end; LIKELY(j >= beg) && eh[j].h == 0 && eh[j].e == 0; --j) // for (j = end; LIKELY(j >= beg) && eh[j].h == 0 && eh[j].e == 0; --j)
; // ;
end = j + 2 < qlen ? j + 2 : qlen; // 剪枝没考虑f即insert // end = j + 2 < qlen ? j + 2 : qlen; // 剪枝没考虑f即insert
// beg = 0, end = qlen; // uncomment this line for debugging // beg = 0, end = qlen; // uncomment this line for debugging
// fprintf(stderr, "\n"); // fprintf(stderr, "\n");
// fprintf(stderr, "%d\n", end); // fprintf(stderr, "%d\n", end);

110
main.c
View File

@ -1,3 +1,11 @@
/*********************************************************************************************
Description: The entry for sw performance tests
Copyright : All right reserved by NCIC.ICT
Author : Zhang Zhonghai
Date : 2023/08/20
***********************************************************************************************/
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -31,10 +39,43 @@ int64_t time_sw[KERNEL_NUM] = {0};
#endif #endif
#ifdef DEBUG_RETURN_VALUE #ifdef DEBUG_RETURN_VALUE
#define OUTPUT_RETVAL(kernel_num) \ #define OUTPUT_RETVAL_1(kernel_num) \
fprintf(retval_f_arr[kernel_num], "%d\t%d\t%d\t%d\t", score[kernel_num], info_arr[i][0], info_arr[i][1], info_arr[i][2]); \
for (j = cur_query_pos - info_arr[i][0]; j < cur_query_pos; ++j) \
{ \
fprintf(retval_f_arr[kernel_num], "%c", t_2bit2char[(uint8_t)query_arr[j]]); \
} \
fprintf(retval_f_arr[kernel_num], "\t"); \
for (j = cur_target_pos - info_arr[i][1]; j < cur_target_pos; ++j) \
{ \
fprintf(retval_f_arr[kernel_num], "%c", t_2bit2char[(uint8_t)target_arr[j]]); \
} \
fprintf(retval_f_arr[kernel_num], "\n");
#define OUTPUT_RETVAL_SCORE \
fprintf(retval_f_arr[kernel_num], "%d\t%d\t%d\t%d\t%d\t%d\n", score[kernel_num], qle, tle, gtle, gscore, max_off[0]) fprintf(retval_f_arr[kernel_num], "%d\t%d\t%d\t%d\t%d\t%d\n", score[kernel_num], qle, tle, gtle, gscore, max_off[0])
// fprintf(retval_f_arr[kernel_num], " %d %d\n", cur_query_pos, info_arr[i][0]);
// fprintf(retval_f_arr[kernel_num], "%d\t%d\t%d\t%d\n", score[kernel_num], info_arr[i][0], info_arr[i][1], info_arr[i][2])
#define OUTPUT_RETVAL_target(kernel_num) \
for (j = cur_target_pos - info_arr[i][1]; j < cur_target_pos; ++j) \
{ \
fprintf(retval_f_arr[kernel_num], "%c", t_2bit2char[(uint8_t)target_arr[j]]); \
} \
fprintf(retval_f_arr[kernel_num], "\n");
#define OUTPUT_RETVAL_query(kernel_num) \
for (j = cur_query_pos - info_arr[i][0]; j < cur_query_pos; ++j) \
{ \
fprintf(retval_f_arr[kernel_num], "%c", t_2bit2char[(uint8_t)query_arr[j]]); \
} \
fprintf(retval_f_arr[kernel_num], "\n");
#define OUTPUT_RETVAL_INFO(kernel_num) \
fprintf(retval_f_arr[kernel_num], "%-8d%-8d%-8d\n", info_arr[i][0], info_arr[i][1], info_arr[i][2]);
#define OUTPUT_RETVAL(kernel_num) OUTPUT_RETVAL_target(kernel_num)
#else #else
#define OUTPUT_RETVAL(out_f) #define OUTPUT_RETVAL(kernel_num)
#endif #endif
#define _PERFORMANCE_TEST_NORMAL(kernel_num, func) \ #define _PERFORMANCE_TEST_NORMAL(kernel_num, func) \
@ -78,7 +119,15 @@ int64_t time_sw[KERNEL_NUM] = {0};
cur_target_pos += info_arr[i][1]; \ cur_target_pos += info_arr[i][1]; \
OUTPUT_RETVAL(kernel_num); \ OUTPUT_RETVAL(kernel_num); \
} }
#define _PERFORMANCE_TEST_AVX2_T1(kernel_num, func) \
cur_query_pos = 0; \
cur_target_pos = 0; \
for (i = 0; i < block_line_num; ++i) \
{ \
cur_query_pos += info_arr[i][0]; \
cur_target_pos += info_arr[i][1]; \
OUTPUT_RETVAL(kernel_num); \
}
#ifdef SHOW_PERF #ifdef SHOW_PERF
#define PERFORMANCE_TEST_NORMAL(kernel_num, func) \ #define PERFORMANCE_TEST_NORMAL(kernel_num, func) \
start_time = get_mseconds(); \ start_time = get_mseconds(); \
@ -87,7 +136,7 @@ int64_t time_sw[KERNEL_NUM] = {0};
#define PERFORMANCE_TEST_AVX2(kernel_num, func) \ #define PERFORMANCE_TEST_AVX2(kernel_num, func) \
start_time = get_mseconds(); \ start_time = get_mseconds(); \
_PERFORMANCE_TEST_AVX2(kernel_num, func); \ _PERFORMANCE_TEST_AVX2_T1(kernel_num, func); \
time_sw[kernel_num] += get_mseconds() - start_time time_sw[kernel_num] += get_mseconds() - start_time
#else #else
#define PERFORMANCE_TEST_NORMAL(kernel_num, func) _PERFORMANCE_TEST_NORMAL(kernel_num, func) #define PERFORMANCE_TEST_NORMAL(kernel_num, func) _PERFORMANCE_TEST_NORMAL(kernel_num, func)
@ -98,7 +147,7 @@ int64_t time_sw[KERNEL_NUM] = {0};
int read_seq_line(char *read_buf, FILE *f_ptr, char *out_arr) int read_seq_line(char *read_buf, FILE *f_ptr, char *out_arr)
{ {
if (fgets(read_buf, READ_BUF_SIZE, f_ptr) == NULL) if (fgets(read_buf, READ_BUF_SIZE, f_ptr) == NULL)
return 0; return -1;
int line_size = strlen(read_buf); int line_size = strlen(read_buf);
assert(line_size < READ_BUF_SIZE); assert(line_size < READ_BUF_SIZE);
if (read_buf[line_size - 1] == '\n') if (read_buf[line_size - 1] == '\n')
@ -152,7 +201,7 @@ int main(int argc, char *argv[])
FILE *query_f = 0, *target_f = 0, *info_f = 0; FILE *query_f = 0, *target_f = 0, *info_f = 0;
// 每次读取一定量的数据,然后执行,直到处理完所有数据 // 每次读取一定量的数据,然后执行,直到处理完所有数据
int total_line_num = 0; // 目前处理的总的数据行数 int64_t total_line_num = 0; // 目前处理的总的数据行数
int block_line_num = 0; // 当前循环包含的数据行数 int block_line_num = 0; // 当前循环包含的数据行数
int cur_query_pos, cur_target_pos; int cur_query_pos, cur_target_pos;
int64_t start_time; int64_t start_time;
@ -204,8 +253,14 @@ int main(int argc, char *argv[])
while (!feof(target_f) && cur_read_size < BLOCK_BUF_SIZE) while (!feof(target_f) && cur_read_size < BLOCK_BUF_SIZE)
{ {
int line_size = read_seq_line(read_buf, target_f, target_arr + cur_read_size); int line_size = read_seq_line(read_buf, target_f, target_arr + cur_read_size);
// fprintf(stderr, "line: %d\n", line_size); // for (j = 0; j < line_size; ++j)
if (line_size == 0) //{
// // fprintf(stderr, "%c", t_2bit2char[(uint8_t)read_buf[j]]);
// fprintf(stderr, "%c", t_2bit2char[(uint8_t)target_arr[j + cur_read_size]]);
// }
// fprintf(stderr, "\n");
// fprintf(retval_f_arr[1], "%d\n", line_size);
if (line_size == -1)
break; break;
cur_read_size += line_size; cur_read_size += line_size;
++block_line_num; ++block_line_num;
@ -217,7 +272,13 @@ int main(int argc, char *argv[])
for (i = 0; i < block_line_num; ++i) for (i = 0; i < block_line_num; ++i)
{ {
int line_size = read_seq_line(read_buf, query_f, query_arr + cur_read_size); int line_size = read_seq_line(read_buf, query_f, query_arr + cur_read_size);
if (line_size == 0) // int j;
// for (j = cur_read_size; j < cur_read_size + line_size; ++j)
//{
// fprintf(retval_f_arr[0], "%c", t_2bit2char[(uint8_t)query_arr[j]]);
// }
// fprintf(retval_f_arr[0], "\n");
if (line_size == -1)
break; break;
cur_read_size += line_size; cur_read_size += line_size;
} }
@ -236,26 +297,43 @@ int main(int argc, char *argv[])
// fprintf(stderr, "%s\n", read_buf); // fprintf(stderr, "%s\n", read_buf);
} }
cur_read_size = 0;
for (i = 0; i < block_line_num; ++i)
{
for (j = cur_read_size; j < cur_read_size + info_arr[i][1]; ++j)
{
fprintf(retval_f_arr[0], "%c", t_2bit2char[(uint8_t)target_arr[j]]);
}
fprintf(retval_f_arr[0], "\n");
cur_read_size += info_arr[i][1];
}
// for (i = 0; i < block_line_num; ++i)
//{
// fprintf(retval_f_arr[0], "%d\n", info_arr[i][1]);
//}
// 性能测试 // 性能测试
// normal sw // normal sw
PERFORMANCE_TEST_NORMAL(0, ksw_extend_normal); // PERFORMANCE_TEST_NORMAL(0, ksw_extend_normal);
// avx2 // avx2
PERFORMANCE_TEST_AVX2(1, ksw_extend_avx2); // PERFORMANCE_TEST_AVX2(1, ksw_extend_avx2);
// avx2 heuristics // avx2 heuristics
PERFORMANCE_TEST_AVX2(2, ksw_extend_avx2_heuristics); // PERFORMANCE_TEST_AVX2(2, ksw_extend_avx2_heuristics);
// avx2 mem aligned // avx2 mem aligned
PERFORMANCE_TEST_AVX2(3, ksw_extend_avx2_aligned); // PERFORMANCE_TEST_AVX2(3, ksw_extend_avx2_aligned);
// avx2 u8 // avx2 u8
PERFORMANCE_TEST_AVX2(4, ksw_extend_avx2_u8); // PERFORMANCE_TEST_AVX2(4, ksw_extend_avx2_u8);
// avx2 u8 heuristics // avx2 u8 heuristics
PERFORMANCE_TEST_AVX2(5, ksw_extend_avx2_u8_heuristics); // PERFORMANCE_TEST_AVX2(5, ksw_extend_avx2_u8_heuristics);
// avx2 u8 mem aligned // avx2 u8 mem aligned
PERFORMANCE_TEST_AVX2(6, ksw_extend_avx2_u8_aligned); // PERFORMANCE_TEST_AVX2(6, ksw_extend_avx2_u8_aligned);
} }
fprintf(stderr, "%ld\n", total_line_num);
#ifdef SHOW_PERF #ifdef SHOW_PERF
char *kernel_names[7] = { char *kernel_names[7] = {
"normal", "normal",

View File

@ -1,2 +1,4 @@
#!/bin/bash #!/bin/bash
/home/zzh/work/sw_perf/sw_perf /home/zzh/work/sw_perf/input/q.fa /home/zzh/work/sw_perf/input/t.fa /home/zzh/work/sw_perf/input/i.txt #/home/zzh/work/sw_perf/sw_perf /home/zzh/work/sw_perf/input/q.fa /home/zzh/work/sw_perf/input/t.fa /home/zzh/work/sw_perf/input/i.txt
/home/zzh/work/sw_perf/sw_perf /home/zzh/work/sw_perf/input/q_d.fa /home/zzh/work/sw_perf/input/t_d.fa /home/zzh/work/sw_perf/input/i_d.txt

View File

@ -9,6 +9,10 @@
#ifndef __UTILS_H #ifndef __UTILS_H
#define __UTILS_H #define __UTILS_H
extern char t_2bit2char[5];
extern unsigned char nst_nt4_table[256];
// 将碱基字符转成2位编码 // 将碱基字符转成2位编码
void convert_char_to_2bit(char *str); void convert_char_to_2bit(char *str);