⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smith_waterman_altivec.c

📁 序列对齐 Compare a protein sequence to a protein sequence database or a DNA sequence to a DNA sequenc
💻 C
📖 第 1 页 / 共 5 页
字号:
        tmp = vec_subs(H,v_gapopen);        E   = vec_max(E,tmp);                // update F value        F   = vec_subs(Fup,v_gapextend);        tmp = vec_subs(Hup2,v_gapopen);        F   = vec_max(F,tmp);                v_score_load1 = vec_perm(v_score_load1,v_zero,merge_score_load);                // add score to H        H   = vec_adds(Hup1,v_score);        H   = vec_subs(H,v_bias);                // set H to max of H,E,F        H   = vec_max(H,E);        H   = vec_max(H,F);                // Update highest score encountered this far        v_maxscore = vec_max(v_maxscore,H);                                // PROLOGUE 7        // prefetch next residue        k                = db_sequence[7];                v_score     = vec_perm(v_score_q1,  v_score_load1,  queue1_to_score);        v_score_q1  = vec_perm(v_score_q2,  v_score_load1,  queue2_to_queue1);        v_score_q2  = vec_perm(v_score_q3,  v_score_load1,  queue3_to_queue2);        v_score_q3  = vec_perm(v_score_q4,  v_score_load1,  queue4_to_queue3);        v_score_q4  = vec_perm(v_score_q5,  v_score_load1,  queue5_to_queue4);        v_score_q5  = vec_perm(v_score_q5,  v_score_load1,  queue5_with_load);                // prefetch score for next step         v_score_load1 = vec_ld(16*k,query_profile_byte);                            // load values of F and H from previous row (one unit up)        Fup    = vec_ld(0,  p);        Hup1   = vec_ld(16, p);        p += 32; // move ahead 32 bytes                // shift into place so we have complete F and H vectors        // that refer to the values one unit up from each cell        // that we are currently working on.        Fup    = vec_sld(Fup,F,15);        Hup1    = vec_sld(Hup1,H,15);                            // do the dynamic programming                 // update E value        E   = vec_subs(E,v_gapextend);        tmp = vec_subs(H,v_gapopen);        E   = vec_max(E,tmp);                // update F value        F   = vec_subs(Fup,v_gapextend);        tmp = vec_subs(Hup1,v_gapopen);        F   = vec_max(F,tmp);                v_score_load1 = vec_perm(v_score_load1,v_zero,merge_score_load);                // add score to H        H   = vec_adds(Hup2,v_score);        H   = vec_subs(H,v_bias);                // set H to max of H,E,F        H   = vec_max(H,E);        H   = vec_max(H,F);                // Update highest score encountered this far        v_maxscore = vec_max(v_maxscore,H);                                // PROLOGUE 8        // prefetch next residue        k                = db_sequence[8];                v_score     = vec_perm(v_score_q1,  v_score_load1,  queue1_to_score);        v_score_q1  = vec_perm(v_score_q2,  v_score_load1,  queue2_to_queue1);        v_score_q2  = vec_perm(v_score_q3,  v_score_load1,  queue3_to_queue2);        v_score_q3  = vec_perm(v_score_q4,  v_score_load1,  queue4_to_queue3);        v_score_q4  = vec_perm(v_score_q5,  v_score_load1,  queue5_to_queue4);        v_score_q5  = vec_perm(v_score_q5,  v_score_load1,  queue5_with_load);                // prefetch score for next step         v_score_load1 = vec_ld(16*k,query_profile_byte);                            // load values of F and H from previous row (one unit up)        Fup    = vec_ld(0,  p);        Hup2   = vec_ld(16, p);        p += 32; // move ahead 32 bytes                // shift into place so we have complete F and H vectors        // that refer to the values one unit up from each cell        // that we are currently working on.        Fup    = vec_sld(Fup,F,15);        Hup2   = vec_sld(Hup2,H,15);                            // do the dynamic programming                 // update E value        E   = vec_subs(E,v_gapextend);        tmp = vec_subs(H,v_gapopen);        E   = vec_max(E,tmp);                // update F value        F   = vec_subs(Fup,v_gapextend);        tmp = vec_subs(Hup2,v_gapopen);        F   = vec_max(F,tmp);                v_score_load1 = vec_perm(v_score_load1,v_score_load2,merge_score_load);                // add score to H        H   = vec_adds(Hup1,v_score);        H   = vec_subs(H,v_bias);                // set H to max of H,E,F        H   = vec_max(H,E);        H   = vec_max(H,F);                // Update highest score encountered this far        v_maxscore = vec_max(v_maxscore,H);                                        // PROLOGUE 9        // prefetch next residue        k                = db_sequence[9];        k8               = db_sequence[1];                v_score     = vec_perm(v_score_q1,  v_score_load1,  queue1_to_score);        v_score_q1  = vec_perm(v_score_q2,  v_score_load1,  queue2_to_queue1);        v_score_q2  = vec_perm(v_score_q3,  v_score_load1,  queue3_to_queue2);        v_score_q3  = vec_perm(v_score_q4,  v_score_load1,  queue4_to_queue3);        v_score_q4  = vec_perm(v_score_q5,  v_score_load1,  queue5_to_queue4);        v_score_q5  = vec_perm(v_score_q5,  v_score_load1,  queue5_with_load);                // prefetch score for next step         v_score_load1 = vec_ld(16*k,query_profile_byte);                    v_score_load2 = vec_ld(16*k8,query_profile_byte);                // load values of F and H from previous row (one unit up)        Fup    = vec_ld(0,  p);        Hup1    = vec_ld(16, p);        p += 32; // move ahead 32 bytes                // shift into place so we have complete F and H vectors        // that refer to the values one unit up from each cell        // that we are currently working on.        Fup    = vec_sld(Fup,F,15);        Hup1    = vec_sld(Hup1,H,15);                            // do the dynamic programming                 // update E value        E   = vec_subs(E,v_gapextend);        tmp = vec_subs(H,v_gapopen);        E   = vec_max(E,tmp);                // update F value        F   = vec_subs(Fup,v_gapextend);        tmp = vec_subs(Hup1,v_gapopen);        F   = vec_max(F,tmp);                v_score_load1 = vec_perm(v_score_load1,v_score_load2,merge_score_load);                // add score to H        H   = vec_adds(Hup2,v_score);        H   = vec_subs(H,v_bias);                // set H to max of H,E,F        H   = vec_max(H,E);        H   = vec_max(H,F);                // Update highest score encountered this far        v_maxscore = vec_max(v_maxscore,H);                                // PROLOGUE 10        // prefetch next residue        k                = db_sequence[10];        k8               = db_sequence[2];                v_score     = vec_perm(v_score_q1,  v_score_load1,  queue1_to_score);        v_score_q1  = vec_perm(v_score_q2,  v_score_load1,  queue2_to_queue1);        v_score_q2  = vec_perm(v_score_q3,  v_score_load1,  queue3_to_queue2);        v_score_q3  = vec_perm(v_score_q4,  v_score_load1,  queue4_to_queue3);        v_score_q4  = vec_perm(v_score_q5,  v_score_load1,  queue5_to_queue4);        v_score_q5  = vec_perm(v_score_q5,  v_score_load1,  queue5_with_load);                // prefetch score for next step         v_score_load1 = vec_ld(16*k,query_profile_byte);                    v_score_load2 = vec_ld(16*k8,query_profile_byte);                // load values of F and H from previous row (one unit up)        Fup    = vec_ld(0,  p);        Hup2   = vec_ld(16, p);        p += 32; // move ahead 32 bytes                // shift into place so we have complete F and H vectors        // that refer to the values one unit up from each cell        // that we are currently working on.        Fup    = vec_sld(Fup,F,15);        Hup2   = vec_sld(Hup2,H,15);                            // do the dynamic programming                 // update E value        E   = vec_subs(E,v_gapextend);        tmp = vec_subs(H,v_gapopen);        E   = vec_max(E,tmp);                // update F value        F   = vec_subs(Fup,v_gapextend);        tmp = vec_subs(Hup2,v_gapopen);        F   = vec_max(F,tmp);                v_score_load1 = vec_perm(v_score_load1,v_score_load2,merge_score_load);                // add score to H        H   = vec_adds(Hup1,v_score);        H   = vec_subs(H,v_bias);                // set H to max of H,E,F        H   = vec_max(H,E);        H   = vec_max(H,F);                // Update highest score encountered this far        v_maxscore = vec_max(v_maxscore,H);                                        // PROLOGUE 11        // prefetch next residue        k                = db_sequence[11];        k8               = db_sequence[3];                v_score     = vec_perm(v_score_q1,  v_score_load1,  queue1_to_score);        v_score_q1  = vec_perm(v_score_q2,  v_score_load1,  queue2_to_queue1);        v_score_q2  = vec_perm(v_score_q3,  v_score_load1,  queue3_to_queue2);        v_score_q3  = vec_perm(v_score_q4,  v_score_load1,  queue4_to_queue3);        v_score_q4  = vec_perm(v_score_q5,  v_score_load1,  queue5_to_queue4);        v_score_q5  = vec_perm(v_score_q5,  v_score_load1,  queue5_with_load);                // prefetch score for next step         v_score_load1 = vec_ld(16*k,query_profile_byte);                    v_score_load2 = vec_ld(16*k8,query_profile_byte);                // load values of F and H from previous row (one unit up)        Fup    = vec_ld(0,  p);        Hup1    = vec_ld(16, p);        p += 32; // move ahead 32 bytes                // shift into place so we have complete F and H vectors        // that refer to the values one unit up from each cell        // that we are currently working on.        Fup    = vec_sld(Fup,F,15);        Hup1    = vec_sld(Hup1,H,15);                            // do the dynamic programming                 // update E value        E   = vec_subs(E,v_gapextend);        tmp = vec_subs(H,v_gapopen);        E   = vec_max(E,tmp);                // update F value        F   = vec_subs(Fup,v_gapextend);        tmp = vec_subs(Hup1,v_gapopen);        F   = vec_max(F,tmp);                v_score_load1 = vec_perm(v_score_load1,v_score_load2,merge_score_load);                // add score to H        H   = vec_adds(Hup2,v_score);        H   = vec_subs(H,v_bias);                // set H to max of H,E,F        H   = vec_max(H,E);        H   = vec_max(H,F);                // Update highest score encountered this far        v_maxscore = vec_max(v_maxscore,H);                                // PROLOGUE 12        // prefetch next residue        k                = db_sequence[12];        k8               = db_sequence[4];                v_score     = vec_perm(v_score_q1,  v_score_load1,  queue1_to_score);        v_score_q1  = vec_perm(v_score_q2,  v_score_load1,  queue2_to_queue1);        v_score_q2  = vec_perm(v_score_q3,  v_score_load1,  queue3_to_queue2);        v_score_q3  = vec_perm(v_score_q4,  v_score_load1,  queue4_to_queue3);        v_score_q4  = vec_perm(v_score_q5,  v_score_load1,  queue5_to_queue4);        v_score_q5  = vec_perm(v_score_q5,  v_score_load1,  queue5_with_load);                // prefetch score for next step         v_score_load1 = vec_ld(16*k,query_profile_byte);                    v_score_load2 = vec_ld(16*k8,query_profile_byte);                // load values of F and H from previous row (one unit up)        Fup    = vec_ld(0,  p);        Hup2   = vec_ld(16, p);        p += 32; // move ahead 32 bytes                // shift into place so we have complete F and H vectors        // that refer to the values one unit up from each cell        // that we are currently working on.        Fup    = vec_sld(Fup,F,15);        Hup2   = vec_sld(Hup2,H,15);                            // do the dynamic programming                 // update E value        E   = vec_subs(E,v_gapextend);        tmp = vec_subs(H,v_gapopen);        E   = vec_max(E,tmp);                // update F value        F   = vec_subs(Fup,v_gapextend);        tmp = vec_subs(Hup2,v_gapopen);        F   = vec_max(F,tmp);                v_score_load1 = vec_perm(v_score_load1,v_score_load2,merge_score_load);                // add score to H        H   = vec_adds(Hup1,v_score);        H   = vec_subs(H,v_bias);                // set H to max of H,E,F        H   = vec_max(H,E);        H   = vec_max(H,F);                // Update highest score encountered this far        v_maxscore = vec_max(v_maxscore,H);                                        // PROLOGUE 13        // prefetch next residue        k                = db_sequence[13];        k8               = db_sequence[5];                v_score     = vec_perm(v_score_q1,  v_score_load1,  queue1_to_score);        v_score_q1  = vec_perm(v_score_q2,  v_score_load1,  queue2_to_queue1);        v_score_q2  = vec_perm(v_score_q3,  v_score_load1,  queue3_to_queue2);        v_score_q3  = vec_perm(

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -