一種基因字符序列快速編碼為二進(jìn)制序列的編碼方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及基因測序技術(shù),具體涉及一種基因字符序列快速編碼為二進(jìn)制序列的 編碼方法。
【背景技術(shù)】
[0002] 隨著基因測序技術(shù)的發(fā)展,測序價(jià)格呈指數(shù)下降,速度甚至超過摩爾定律。伴隨而 來的大量測序數(shù)據(jù),雖然互聯(lián)網(wǎng)以及硬件持續(xù)更新發(fā)展,測序產(chǎn)生的海量數(shù)據(jù)的壓縮、存 儲(chǔ)、傳輸依舊帶來了巨大的挑戰(zhàn)。DNA基因組序列和測序序列均由ATCG四種堿基組成,對A、 T、C、G的編碼在數(shù)據(jù)壓縮方面至關(guān)重要,通常的做法如下:由于字符大小寫混雜,可以統(tǒng)一 將字符大小寫全都轉(zhuǎn)換成大寫或小寫(或者不轉(zhuǎn)換大小寫直接判斷,判斷情況由四種增加 到八種),逐個(gè)判斷字符,再進(jìn)行二進(jìn)制編碼映射(例如a->00c->01g->10t->ll)。這樣的編 碼由于逐字進(jìn)行,對于動(dòng)輒GB甚至TB的DNA數(shù)據(jù)來說非常耗時(shí),提高編碼速度效率至關(guān)重 要。因此,現(xiàn)有的基因字符序列編碼為二進(jìn)制序列的編碼方法針對DNA測序產(chǎn)生的海量數(shù) 據(jù),在編碼時(shí)存在速度慢、效率低的問題。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明要解決的技術(shù)問題:針對現(xiàn)有技術(shù)的上述問題,提供一種編碼壓縮效率高、 編碼速度快、編碼效率高、不需要進(jìn)行大小寫轉(zhuǎn)換、實(shí)現(xiàn)方式靈活、應(yīng)用范圍廣的基因字符 序列快速編碼為二進(jìn)制序列的編碼方法。
[0004] 為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:
[0005] -種基因字符序列快速編碼為二進(jìn)制序列的編碼方法,步驟包括:
[0006] 1)從待編碼基因字符序列中取出指定數(shù)量個(gè)字符串作為當(dāng)前處理字符串;
[0007] 2)將當(dāng)前處理字符串的二進(jìn)制編碼右移1位;
[0008] 3)將右移1位后的當(dāng)前處理字符串中的每一個(gè)字符與0x3進(jìn)行數(shù)據(jù)與操作;
[0009] 4)分別將數(shù)據(jù)與操作后的結(jié)果中每一個(gè)字符中的最低兩位提取組裝得到當(dāng)前處 理字符串對應(yīng)的緊致編碼二進(jìn)制序列;
[0010] 5)判斷待編碼基因字符序列是否處理完畢,如果尚未處理完畢,則跳轉(zhuǎn)執(zhí)行步驟 1);否則,結(jié)束并退出。
[0011] 優(yōu)選地,所述步驟1)中指定數(shù)量個(gè)字符串具體是指16個(gè)字符串。
[0012] 優(yōu)選地,所述步驟2)中將當(dāng)前處理字符串右移1位時(shí),具體是指調(diào)用SSE指令集的_ mm_srlijpi64指令分別將當(dāng)前處理字符串的高64位數(shù)據(jù)、低64位數(shù)據(jù)同時(shí)右移1位。
[0013] 優(yōu)選地,所述步驟3)中進(jìn)行數(shù)據(jù)與操作時(shí),具體是指將右移1位后的當(dāng)前處理字符 串和預(yù)設(shè)的128bit掩碼調(diào)用SSE指令集的___&11(1_8;[128指令進(jìn)行數(shù)據(jù)與操作,所述掩碼由 16個(gè)0x3構(gòu)成。
[0014]優(yōu)選地,所述步驟4)的詳細(xì)步驟包括:
[0015] 4 . 1 )調(diào)用Β Μ I 2指令集的數(shù)據(jù)位抽取指令_ p e X t _ u 6 4且使用參數(shù) 0x0303030303030303uL,將數(shù)據(jù)與操作后的結(jié)果前64字節(jié)中每一個(gè)字符中的最低兩位提取 組裝得到當(dāng)前處理字符串對應(yīng)的緊致編碼二進(jìn)制序列;
[0016] 4 . 2 )調(diào)用Β Μ I 2指令集的數(shù)據(jù)位抽取指令_ p e X t _ u 6 4且使用參數(shù) 0x0303030303030303uL,將數(shù)據(jù)與操作后的結(jié)果后64字節(jié)中每一個(gè)字符中的最低兩位提取 組裝得到當(dāng)前處理字符串對應(yīng)的緊致編碼二進(jìn)制序列。
[0017]本發(fā)明種基因字符序列快速編碼為二進(jìn)制序列的編碼方法具有下述優(yōu)點(diǎn):
[0018] 1、編碼壓縮效率高、占用存儲(chǔ)空間少,本發(fā)明方法最終將每一個(gè)基因字符的8位二 進(jìn)制編碼壓縮為2位,壓縮后的體積為原體積的25%。
[0019] 2、編碼速度快、編碼效率高,本發(fā)明針對每一個(gè)當(dāng)前處理字符串僅僅需要三條指 令即可實(shí)現(xiàn)壓縮緊致編碼,相比于現(xiàn)有的編碼方法,逐字符編碼效率提高2倍以上,結(jié)合并 行位抽取優(yōu)化達(dá)到10倍以上(未進(jìn)行編譯優(yōu)化)乃至40倍以上(進(jìn)行編譯優(yōu)化),能夠極大提 高大數(shù)據(jù)的編碼壓縮、存儲(chǔ)傳輸、解壓等效率,尤其適用于海量基因數(shù)據(jù)庫的存儲(chǔ)和處理。
[0020] 3、本發(fā)明對基因字符序列的大小寫不敏感,不需要進(jìn)行基因字符的判斷。
[0021] 4、本發(fā)明以指定數(shù)量的基因字符為一組,分別將每一組基因字符的最低2位拼裝 得到該組基因字符的編碼結(jié)果的實(shí)現(xiàn)方式靈活,可以通過多種途徑靈活的實(shí)現(xiàn)該編碼方 法,例如BMI2指令集的pext指令、FPGA等等,而且可以應(yīng)用于所有DNA文本數(shù)據(jù)的編碼,具有 廣泛的應(yīng)用空間。
【附圖說明】
[0022] 圖1為本發(fā)明實(shí)施例方法的基本流程示意圖。
[0023]圖2為本發(fā)明實(shí)施例中的編碼映射原理圖。
[0024]圖3為本發(fā)明實(shí)施例中的移位原理示意圖。
[0025]圖4為本發(fā)明實(shí)施例中的數(shù)據(jù)與操作原理示意圖。
[0026]圖5為本發(fā)明實(shí)施例中的緊致編碼原理示意圖。
【具體實(shí)施方式】
[0027] 如圖1所示,本實(shí)施例基因字符序列快速編碼為二進(jìn)制序列的編碼方法的步驟包 括:
[0028] 1)從待編碼基因字符序列中取出指定數(shù)量個(gè)字符串作為當(dāng)前處理字符串;
[0029] 2)將當(dāng)前處理字符串的二進(jìn)制編碼右移1位;
[0030] 3)將右移1位后的當(dāng)前處理字符串中的每一個(gè)字符與0x3進(jìn)行數(shù)據(jù)與操作;
[0031] 4)分別將數(shù)據(jù)與操作后的結(jié)果中每一個(gè)字符中的最低兩位提取組裝得到當(dāng)前處 理字符串對應(yīng)的緊致編碼二進(jìn)制序列;
[0032] 5)判斷待編碼基因字符序列是否處理完畢,如果尚未處理完畢,則跳轉(zhuǎn)執(zhí)行步驟 1);否則,結(jié)束并退出。
[0033]參見圖2所示基因字符A、C、G、T、a、c、g、t的二進(jìn)制編碼,根據(jù)觀察可知提取字符編 碼的第1、2位,即可形成對A、C、G、T四個(gè)字母不區(qū)分大小寫的有效的二進(jìn)制編碼:a/A->0,c/ C-> 1,t/T->2,g/G->3。本實(shí)施例基于上述觀察,從字符串中快速提取與緊致二進(jìn)制編碼,并 采用SIMD并行指令進(jìn)行優(yōu)化,對字符串進(jìn)行并行批量提取與緊致。
[0034] 本實(shí)施例中,步驟1)中指定數(shù)量個(gè)字符串具體是指16個(gè)字符串。
[0035] 本實(shí)施例中,步驟2)中將當(dāng)前處理字符串右移1位時(shí),具體是指調(diào)用SSE指令集的_ mm_srli_epi64指令分別將當(dāng)前處理字符串的高64位數(shù)據(jù)、低64位數(shù)據(jù)同時(shí)右移1位。_mm_ srli_epi64指令為SSE指令集對128-bit數(shù)作移位操作函數(shù),例如針對當(dāng)前處理字符串char a[ 17 ] {"actgACTGactgACTG"},移位后的數(shù)賦值給變量b,具體指令為:
[0036] _ml28i b=_mm_srli_epi64(*(_ml28i*) (a),1)。
[0037] 如圖3所示,以基因字符A為例,其對應(yīng)的二進(jìn)制編碼為01000001,通過移位后變?yōu)?00100000;以基因字符a為例,其對應(yīng)的二進(jìn)制編碼為01100001,通過移位后變?yōu)?0110000, 通過移位以后,以此類推,使得移位后基因字符串各字符的二進(jìn)制編碼最后兩位的值與a/ A->0,c/C->l,t/T->2,g/G->3對應(yīng),為掩碼抽取做好準(zhǔn)備。
[0038] 本實(shí)施例中,步驟3)中進(jìn)行數(shù)據(jù)與操作時(shí),具體是指將右移1位后的當(dāng)前處理字符 串和預(yù)設(shè)的128bit掩碼調(diào)用SSE指令集的_