一种基因字符序列快速编码为二进制序列的编码方法转让专利

申请号 : CN201510884496.8

文献号 : CN105550535B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李根宋卓

申请人 : 人和未来生物科技(长沙)有限公司

摘要 :

本发明公开了一种基因字符序列快速编码为二进制序列的编码方法,步骤包括:1)从待编码基因字符序列中取出指定数量个字符作为当前处理字符串;2)将当前处理字符串的二进制编码右移1位;3)将右移1位后的当前处理字符串中的每一个字符与0x3进行数据与操作;4)分别将数据与操作后的结果中每一个字符中的最低两位提取组装得到当前处理字符串对应的紧致编码二进制序列;5)判断待编码基因字符序列是否处理完毕,如果尚未处理完毕,则跳转执行步骤1);否则,结束并退出。本发明具有编码压缩效率高、编码速度快、编码效率高、不需要进行大小写转换、实现方式灵活、应用范围广的优点。

权利要求 :

1.一种基因字符序列快速编码为二进制序列的编码方法,其特征在于步骤包括:

1)从待编码基因字符序列中取出指定数量个字符作为当前处理字符串;

2)将当前处理字符串的二进制编码右移1位;

3)将右移1位后的当前处理字符串中的每一个字符与0x3进行数据与操作;

4)分别将数据与操作后的结果中每一个字符中的最低两位提取组装得到当前处理字符串对应的紧致编码二进制序列;

5)判断待编码基因字符序列是否处理完毕,如果尚未处理完毕,则跳转执行步骤1);否则,结束并退出。

2.根据权利要求1所述的基因字符序列快速编码为二进制序列的编码方法,其特征在于,所述步骤1)中指定数量个字符具体是指16个字符。

3.根据权利要求2所述的基因字符序列快速编码为二进制序列的编码方法,其特征在于,所述步骤2)中将当前处理字符串右移1位时,具体是指调用SSE指令集的_mm_srli_epi64指令分别将当前处理字符串的高64位数据、低64位数据同时右移1位。

4.根据权利要求3所述的基因字符序列快速编码为二进制序列的编码方法,其特征在于,所述步骤3)中进行数据与操作时,具体是指将右移1位后的当前处理字符串和预设的

128bit掩码调用SSE指令集的_mm_and_si128指令进行数据与操作,所述掩码由16个0x3构成。

5.根据权利要求4所述的基因字符序列快速编码为二进制序列的编码方法,其特征在于,所述步骤4)的详细步骤包括:

4 .1) 调用BMI2指令集的数据位抽取指令_pext_u64且使 用参数

0x0303030303030303uL,将数据与操作后的结果前64字节中每一个字符中的最低两位提取组装得到当前处理字符串对应的紧致编码二进制序列;

4 .2) 调用BMI2指令集的数据位抽取指令_pext_u64且使 用参数

0x0303030303030303uL,将数据与操作后的结果后64字节中每一个字符中的最低两位提取组装得到当前处理字符串对应的紧致编码二进制序列。

说明书 :

一种基因字符序列快速编码为二进制序列的编码方法

技术领域

[0001] 本发明涉及基因测序技术,具体涉及一种基因字符序列快速编码为二进制序列的编码方法。

背景技术

[0002] 随着基因测序技术的发展,测序价格呈指数下降,速度甚至超过摩尔定律。伴随而来的大量测序数据,虽然互联网以及硬件持续更新发展,测序产生的海量数据的压缩、存储、传输依旧带来了巨大的挑战。DNA基因组序列和测序序列均由ATCG四种碱基组成,对A、T、C、G的编码在数据压缩方面至关重要,通常的做法如下:由于字符大小写混杂,可以统一将字符大小写全都转换成大写或小写(或者不转换大小写直接判断,判断情况由四种增加到八种),逐个判断字符,再进行二进制编码映射(例如a->00c->01g->10t->11)。这样的编码由于逐字进行,对于动辄GB甚至TB的DNA数据来说非常耗时,提高编码速度效率至关重要。因此,现有的基因字符序列编码为二进制序列的编码方法针对DNA测序产生的海量数据,在编码时存在速度慢、效率低的问题。

发明内容

[0003] 本发明要解决的技术问题:针对现有技术的上述问题,提供一种编码压缩效率高、编码速度快、编码效率高、不需要进行大小写转换、实现方式灵活、应用范围广的基因字符序列快速编码为二进制序列的编码方法。
[0004] 为了解决上述技术问题,本发明采用的技术方案为:
[0005] 一种基因字符序列快速编码为二进制序列的编码方法,步骤包括:
[0006] 1)从待编码基因字符序列中取出指定数量个字符作为当前处理字符串;
[0007] 2)将当前处理字符串的二进制编码右移1位;
[0008] 3)将右移1位后的当前处理字符串中的每一个字符与0x3进行数据与操作;
[0009] 4)分别将数据与操作后的结果中每一个字符中的最低两位提取组装得到当前处理字符串对应的紧致编码二进制序列;
[0010] 5)判断待编码基因字符序列是否处理完毕,如果尚未处理完毕,则跳转执行步骤1);否则,结束并退出。
[0011] 优选地,所述步骤1)中指定数量个字符具体是指16个字符。
[0012] 优选地,所述步骤2)中将当前处理字符串右移1位时,具体是指调用SSE指令集的_mm_srli_epi64指令分别将当前处理字符串的高64位数据、低64位数据同时右移1位。
[0013] 优选地,所述步骤3)中进行数据与操作时,具体是指将右移1位后的当前处理字符串和预设的128bit掩码调用SSE指令集的_mm_and_si128指令进行数据与操作,所述掩码由16个0x3构成。
[0014] 优选地,所述步骤4)的详细步骤包括:
[0015] 4.1)调用BMI2指令集的数据位抽取指令_pext_u64且使用参数0x0303030303030303uL,将数据与操作后的结果前64字节中每一个字符中的最低两位提取组装得到当前处理字符串对应的紧致编码二进制序列;
[0016] 4.2)调用BMI2指令集的数据位抽取指令_pext_u64且使用参数0x0303030303030303uL,将数据与操作后的结果后64字节中每一个字符中的最低两位提取组装得到当前处理字符串对应的紧致编码二进制序列。
[0017] 本发明种基因字符序列快速编码为二进制序列的编码方法具有下述优点:
[0018] 1、编码压缩效率高、占用存储空间少,本发明方法最终将每一个基因字符的8位二进制编码压缩为2位,压缩后的体积为原体积的25%。
[0019] 2、编码速度快、编码效率高,本发明针对每一个当前处理字符串仅仅需要三条指令即可实现压缩紧致编码,相比于现有的编码方法,逐字符编码效率提高2倍以上,结合并行位抽取优化达到10倍以上(未进行编译优化)乃至40倍以上(进行编译优化),能够极大提高大数据的编码压缩、存储传输、解压等效率,尤其适用于海量基因数据库的存储和处理。
[0020] 3、本发明对基因字符序列的大小写不敏感,不需要进行基因字符的判断。
[0021] 4、本发明以指定数量的基因字符为一组,分别将每一组基因字符的最低2位拼装得到该组基因字符的编码结果的实现方式灵活,可以通过多种途径灵活的实现该编码方法,例如BMI2指令集的pext指令、FPGA等等,而且可以应用于所有DNA文本数据的编码,具有广泛的应用空间。

附图说明

[0022] 图1为本发明实施例方法的基本流程示意图。
[0023] 图2为本发明实施例中的编码映射原理图。
[0024] 图3为本发明实施例中的移位原理示意图。
[0025] 图4为本发明实施例中的数据与操作原理示意图。
[0026] 图5为本发明实施例中的紧致编码原理示意图。

具体实施方式

[0027] 如图1所示,本实施例基因字符序列快速编码为二进制序列的编码方法的步骤包括:
[0028] 1)从待编码基因字符序列中取出指定数量个字符作为当前处理字符串;
[0029] 2)将当前处理字符串的二进制编码右移1位;
[0030] 3)将右移1位后的当前处理字符串中的每一个字符与0x3进行数据与操作;
[0031] 4)分别将数据与操作后的结果中每一个字符中的最低两位提取组装得到当前处理字符串对应的紧致编码二进制序列;
[0032] 5)判断待编码基因字符序列是否处理完毕,如果尚未处理完毕,则跳转执行步骤1);否则,结束并退出。
[0033] 参见图2所示基因字符A、C、G、T、a、c、g、t的二进制编码,根据观察可知提取字符编码的第1、2位,即可形成对A、C、G、T四个字母不区分大小写的有效的二进制编码:a/A->0,c/C->1,t/T->2,g/G->3。本实施例基于上述观察,从字符串中快速提取与紧致二进制编码,并采用SIMD并行指令进行优化,对字符串进行并行批量提取与紧致。
[0034] 本实施例中,步骤1)中指定数量个字符具体是指16个字符。
[0035] 本实施例中,步骤2)中将当前处理字符串右移1位时,具体是指调用SSE指令集的_mm_srli_epi64指令分别将当前处理字符串的高64位数据、低64位数据同时右移1位。_mm_srli_epi64指令为SSE指令集对128-bit数作移位操作函数,例如针对当前处理字符串char a[17]{"actgACTGactgACTG"},移位后的数赋值给变量b,具体指令为:
[0036] _m128i b=_mm_srli_epi64(*(__m128i*)(a),1)。
[0037] 如图3所示,以基因字符A为例,其对应的二进制编码为01000001,通过移位后变为00100000;以基因字符a为例,其对应的二进制编码为01100001,通过移位后变为00110000,通过移位以后,以此类推,使得移位后基因字符串各字符的二进制编码最后两位的值与a/A->0,c/C->1,t/T->2,g/G->3对应,为掩码抽取做好准备。
[0038] 本实施例中,步骤3)中进行数据与操作时,具体是指将右移1位后的当前处理字符串和预设的128bit掩码调用SSE指令集的_mm_and_si128指令进行数据与操作,掩码由16个0x3构成。_mm_and_si128指令为SSE指令集的128位数据与操作函数,本步骤的指令为:
[0039] __m128i c=_mm_and_si128(b,xmm0);
[0040] 最终,将变量b与预设的128bit掩码xmm0的做位与操作结果赋值给c。本实施例中,预设的128bit掩码xmm0的步骤包括如下:首先将128bit掩码{0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3}赋值为常量;然后通过指令__m128i xmm0声明128bit变量xmm0;最终利用SSE指令集的128bit加载指令,将128bit掩码{0x3,0x3,0x3,
0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3}常量加载128bit掩码数据至xmm0。
[0041] 如图4所示,以基因字符A为例,其移位后编码为00100000,和0x3进行数据与操作后,即可得到0x0;以基因字符a为例,其移位后编码为00110000,和0x3进行数据与操作后,同样也可得到0x0;以此类推,使得移位后基因字符串二进制编码执行位与操作按照a/A->0,c/C->1,t/T->2,g/G->3进行二进制编码的转换,得到编码完成的二进制编码串。
[0042] 本实施例中,步骤4)的详细步骤包括:
[0043] 4.1)调用BMI2指令集的数据位抽取指令_pext_u64且使用参数0x0303030303030303uL,将数据与操作后的结果前64字节中每一个字符中的最低两位提取组装得到当前处理字符串对应的紧致编码二进制序列C1;本实施例中,前64字节的紧致编码二进制序列C1的指令具体为:
[0044] C1=_pext_u64(*(uint64_t*)buf,0x0303030303030303uL);其中,buf为写入内存中的与0x3进行数据与操作后的结果;
[0045] 4.2)调用BMI2指令集的数据位抽取指令_pext_u64且使用参数0x0303030303030303uL,将数据与操作后的结果后64字节中每一个字符中的最低两位提取组装得到当前处理字符串对应的紧致编码二进制序列C2;本实施例中,后64字节的紧致编码二进制序列C2的指令具体为:
[0046] C2=_pext_u64(*(uint64_t*)(buf+8),0x0303030303030303uL);其中,buf为写入内存中的与0x3进行数据与操作后的结果。
[0047] 如图4所示,以基因字符串AaCcTtGg为例,经过紧致编码后,其前64字节的紧致编码二进制序列C1为0x05,后64字节的紧致编码二进制序列C2为0Xaf,从而将128位原始字符数据压缩得到16位紧致编码后的字符数据,压缩后数据占用空间为原来的25%。
[0048] 本实施例中使用Amazon EC2的C4.large型号机器作测试环境,赋值基因字符序列“actgACTGactgACTG”(四种碱基大小写重复两次,随机模拟基因字符序列),进行109次编码循环,分别采用本实施例的编码方法与现有技术采用IF逐字符判断编码方法(表1中以“IF”表示)、SWITCH逐字符判断编码方法(表1中以“SWITCH”表示)做测试比较,分别比较不做O2编译优化和O2编译优化的结果,结果如表1所示:
[0049] 表1:采用本实施例编码方法与现有技术编码方法的编码性能比较表。
[0050]
[0051] 参见表1可知,采用本实施例的编码方法与与现有技术采用IF逐字符判断编码方法、SWITCH逐字符判断编码方法相比,在不做编译优化的情况下,本实施例约有10倍速度的提高,在进行O2编译优化后,本实施例的速度效率提高在40倍以上。
[0052] 以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。