/* * Find Viterbi alignment. */ static void align_utt (char *sent, /* In: Reference transcript */ float32 **mfc, /* In: MFC cepstra for input utterance */ int32 nfr, /* In: #frames of input */ char *ctlspec, /* In: Utt specifiction from control file */ char *uttid) /* In: Utterance id, for logging and other use */ { static float32 **feat = NULL; static int32 w; static int32 topn; static gauden_dist_t ***dist; static int32 *senscr; static s3senid_t *sen_active; static int8 *mgau_active; static char *s2stsegdir; static char *stsegdir; static char *phsegdir; static char *wdsegdir; int32 i, s, sid, gid, n_sen_active, best; char *arg; align_stseg_t *stseg; align_phseg_t *phseg; align_wdseg_t *wdseg; if (! feat) { /* One-time allocation of necessary intermediate variables */ /* Allocate space for a feature vector */ feat = (float32 **) ckd_calloc (n_feat, sizeof(float32 *)); for (i = 0; i < n_feat; i++) feat[i] = (float32 *) ckd_calloc (featlen[i], sizeof(float32)); /* Allocate space for top-N codeword density values in a codebook */ w = feat_window_size (); /* #MFC vectors needed on either side of current frame to compute one feature vector */ topn = *((int32 *) cmd_ln_access("-topn")); if (topn > g->n_density) { E_ERROR("-topn argument (%d) > #density codewords (%d); set to latter\n", topn, g->n_density); topn = g->n_density; } dist = (gauden_dist_t ***) ckd_calloc_3d (g->n_mgau, n_feat, topn, sizeof(gauden_dist_t)); /* Space for one frame of senone scores, and per frame active flags */ senscr = (int32 *) ckd_calloc (sen->n_sen, sizeof(int32)); sen_active = (s3senid_t *) ckd_calloc (sen->n_sen, sizeof(s3senid_t)); mgau_active = (int8 *) ckd_calloc (g->n_mgau, sizeof(int8)); /* Note various output directories */ s2stsegdir = NULL; stsegdir = NULL; phsegdir = NULL; wdsegdir = NULL; if ((arg = (char *) cmd_ln_access ("-s2stsegdir")) != NULL) s2stsegdir = (char *) ckd_salloc (arg); if ((arg = (char *) cmd_ln_access ("-stsegdir")) != NULL) stsegdir = (char *) ckd_salloc (arg); if ((arg = (char *) cmd_ln_access ("-phsegdir")) != NULL) phsegdir = (char *) ckd_salloc (arg); if ((arg = (char *) cmd_ln_access ("-wdsegdir")) != NULL) wdsegdir = (char *) ckd_salloc (arg); } /* HACK HACKA HACK BHIKSHA if (nfr <= (w<<1)) { E_ERROR("Utterance %s < %d frames (%d); ignored\n", uttid, (w<<1)+1, nfr); return; } END HACK HACKA HACK */ cyctimer_reset_all (); counter_reset_all (); timing_reset (tm_utt); timing_start (tm_utt); cyctimer_resume (tmr_utt); /* AGC and CMN */ arg = (char *) cmd_ln_access ("-cmn"); if (strcmp (arg, "current") == 0) norm_mean (mfc-4, nfr+8, cepsize); /* -4 HACKA HACK */ arg = (char *) cmd_ln_access ("-agc"); if (strcmp (arg, "max") == 0) agc_max (mfc, nfr); if (align_build_sent_hmm (sent) != 0) { align_destroy_sent_hmm (); cyctimer_pause (tmr_utt); E_ERROR("No sentence HMM; no alignment for %s\n", uttid); return; } align_start_utt (uttid); /* * A feature vector for frame f depends on input MFC vectors [f-w..f+w]. Hence * the feature vector corresponding to the first w and last w input frames is * undefined. We define them by simply replicating the first and last true * feature vectors (presumably silence regions). */ for (i = 0; i < nfr; i++) { cyctimer_resume (tmr_utt); /* Compute feature vector for current frame from input speech cepstra */ /* HACK HACKA HACK BHIKSHA if (i < w) feat_cep2feat (mfc+w, feat); else if (i >= nfr-w) feat_cep2feat (mfc+(nfr-w-1), feat); else END HACK HACKA HACK */ feat_cep2feat (mfc+i, feat); /* * Evaluate gaussian density codebooks and senone scores for input codeword. * Evaluate only active codebooks and senones. */ /* Obtain active senone flags */ cyctimer_resume (tmr_senone); align_sen_active (sen_active, sen->n_sen); /* Flag all CI senones to active if interpolating */ if (interp) { for (s = 0; s < mdef->n_ci_sen; s++) sen_active[s] = 1; } /* Turn active flags into list (for faster access) */ n_sen_active = 0; for (s = 0; s < mdef->n_sen; s++) { if (sen_active[s]) sen_active[n_sen_active++] = s; } cyctimer_pause (tmr_senone); /* Flag all active mixture-gaussian codebooks */ cyctimer_resume (tmr_gauden); for (gid = 0; gid < g->n_mgau; gid++) mgau_active[gid] = 0; for (s = 0; s < n_sen_active; s++) { sid = sen_active[s]; mgau_active[sen->mgau[sid]] = 1; } /* Compute topn gaussian density values (for active codebooks) */ for (gid = 0; gid < g->n_mgau; gid++) if (mgau_active[gid]) gauden_dist (g, gid, topn, feat, dist[gid]); cyctimer_pause (tmr_gauden); /* Evaluate active senones */ cyctimer_resume (tmr_senone); best = (int32) 0x80000000; for (s = 0; s < n_sen_active; s++) { sid = sen_active[s]; senscr[sid] = senone_eval (sen, sid, dist[sen->mgau[sid]], topn); if (best < senscr[sid]) best = senscr[sid]; } if (interp) { for (s = 0; s < n_sen_active; s++) { if ((sid = sen_active[s]) >= mdef->n_ci_sen) interp_cd_ci (interp, senscr, sid, mdef->cd2cisen[sid]); } } /* Normalize senone scores (interpolation above can only lower best score) */ for (s = 0; s < n_sen_active; s++) { sid = sen_active[s]; senscr[sid] -= best; } senscale[i] = best; cyctimer_pause (tmr_senone); /* Step alignment one frame forward */ cyctimer_resume (tmr_align); align_frame (senscr); cyctimer_pause (tmr_align); cyctimer_pause (tmr_utt); } timing_stop (tm_utt); printf ("\n"); /* Wind up alignment for this utterance */ if (align_end_utt (&stseg, &phseg, &wdseg) < 0) E_ERROR("Final state not reached; no alignment for %s\n\n", uttid); else { if (s2stsegdir) write_s2stseg (s2stsegdir, stseg, uttid, ctlspec); if (stsegdir) write_stseg (stsegdir, stseg, uttid, ctlspec); if (phsegdir) write_phseg (phsegdir, phseg, uttid, ctlspec); if (wdsegdir) write_wdseg (wdsegdir, wdseg, uttid, ctlspec); if (outsentfp) write_outsent (outsentfp, wdseg, uttid); } align_destroy_sent_hmm (); cyctimer_print_all_norm (stdout, nfr*0.01, tmr_utt); counter_print_all (stdout); printf("EXECTIME: %5d frames, %7.2f sec CPU, %6.2f xRT; %7.2f sec elapsed, %6.2f xRT\n", nfr, tm_utt->t_cpu, tm_utt->t_cpu * 100.0 / nfr, tm_utt->t_elapsed, tm_utt->t_elapsed * 100.0 / nfr); tot_nfr += nfr; }
int main(void) { DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, stack)); DEFINE(TASK_STATE, offsetof(struct task_struct, state)); DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); DEFINE(TASK_SIGPENDING, offsetof(struct task_struct, pending)); DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace)); DEFINE(TASK_MM, offsetof(struct task_struct, mm)); DEFINE(TASK_PERSONALITY, offsetof(struct task_struct, personality)); DEFINE(TASK_PID, offsetof(struct task_struct, pid)); BLANK(); DEFINE(TASK_REGS, offsetof(struct task_struct, thread.regs)); DEFINE(TASK_PT_PSW, offsetof(struct task_struct, thread.regs.gr[ 0])); DEFINE(TASK_PT_GR1, offsetof(struct task_struct, thread.regs.gr[ 1])); DEFINE(TASK_PT_GR2, offsetof(struct task_struct, thread.regs.gr[ 2])); DEFINE(TASK_PT_GR3, offsetof(struct task_struct, thread.regs.gr[ 3])); DEFINE(TASK_PT_GR4, offsetof(struct task_struct, thread.regs.gr[ 4])); DEFINE(TASK_PT_GR5, offsetof(struct task_struct, thread.regs.gr[ 5])); DEFINE(TASK_PT_GR6, offsetof(struct task_struct, thread.regs.gr[ 6])); DEFINE(TASK_PT_GR7, offsetof(struct task_struct, thread.regs.gr[ 7])); DEFINE(TASK_PT_GR8, offsetof(struct task_struct, thread.regs.gr[ 8])); DEFINE(TASK_PT_GR9, offsetof(struct task_struct, thread.regs.gr[ 9])); DEFINE(TASK_PT_GR10, offsetof(struct task_struct, thread.regs.gr[10])); DEFINE(TASK_PT_GR11, offsetof(struct task_struct, thread.regs.gr[11])); DEFINE(TASK_PT_GR12, offsetof(struct task_struct, thread.regs.gr[12])); DEFINE(TASK_PT_GR13, offsetof(struct task_struct, thread.regs.gr[13])); DEFINE(TASK_PT_GR14, offsetof(struct task_struct, thread.regs.gr[14])); DEFINE(TASK_PT_GR15, offsetof(struct task_struct, thread.regs.gr[15])); DEFINE(TASK_PT_GR16, offsetof(struct task_struct, thread.regs.gr[16])); DEFINE(TASK_PT_GR17, offsetof(struct task_struct, thread.regs.gr[17])); DEFINE(TASK_PT_GR18, offsetof(struct task_struct, thread.regs.gr[18])); DEFINE(TASK_PT_GR19, offsetof(struct task_struct, thread.regs.gr[19])); DEFINE(TASK_PT_GR20, offsetof(struct task_struct, thread.regs.gr[20])); DEFINE(TASK_PT_GR21, offsetof(struct task_struct, thread.regs.gr[21])); DEFINE(TASK_PT_GR22, offsetof(struct task_struct, thread.regs.gr[22])); DEFINE(TASK_PT_GR23, offsetof(struct task_struct, thread.regs.gr[23])); DEFINE(TASK_PT_GR24, offsetof(struct task_struct, thread.regs.gr[24])); DEFINE(TASK_PT_GR25, offsetof(struct task_struct, thread.regs.gr[25])); DEFINE(TASK_PT_GR26, offsetof(struct task_struct, thread.regs.gr[26])); DEFINE(TASK_PT_GR27, offsetof(struct task_struct, thread.regs.gr[27])); DEFINE(TASK_PT_GR28, offsetof(struct task_struct, thread.regs.gr[28])); DEFINE(TASK_PT_GR29, offsetof(struct task_struct, thread.regs.gr[29])); DEFINE(TASK_PT_GR30, offsetof(struct task_struct, thread.regs.gr[30])); DEFINE(TASK_PT_GR31, offsetof(struct task_struct, thread.regs.gr[31])); DEFINE(TASK_PT_FR0, offsetof(struct task_struct, thread.regs.fr[ 0])); DEFINE(TASK_PT_FR1, offsetof(struct task_struct, thread.regs.fr[ 1])); DEFINE(TASK_PT_FR2, offsetof(struct task_struct, thread.regs.fr[ 2])); DEFINE(TASK_PT_FR3, offsetof(struct task_struct, thread.regs.fr[ 3])); DEFINE(TASK_PT_FR4, offsetof(struct task_struct, thread.regs.fr[ 4])); DEFINE(TASK_PT_FR5, offsetof(struct task_struct, thread.regs.fr[ 5])); DEFINE(TASK_PT_FR6, offsetof(struct task_struct, thread.regs.fr[ 6])); DEFINE(TASK_PT_FR7, offsetof(struct task_struct, thread.regs.fr[ 7])); DEFINE(TASK_PT_FR8, offsetof(struct task_struct, thread.regs.fr[ 8])); DEFINE(TASK_PT_FR9, offsetof(struct task_struct, thread.regs.fr[ 9])); DEFINE(TASK_PT_FR10, offsetof(struct task_struct, thread.regs.fr[10])); DEFINE(TASK_PT_FR11, offsetof(struct task_struct, thread.regs.fr[11])); DEFINE(TASK_PT_FR12, offsetof(struct task_struct, thread.regs.fr[12])); DEFINE(TASK_PT_FR13, offsetof(struct task_struct, thread.regs.fr[13])); DEFINE(TASK_PT_FR14, offsetof(struct task_struct, thread.regs.fr[14])); DEFINE(TASK_PT_FR15, offsetof(struct task_struct, thread.regs.fr[15])); DEFINE(TASK_PT_FR16, offsetof(struct task_struct, thread.regs.fr[16])); DEFINE(TASK_PT_FR17, offsetof(struct task_struct, thread.regs.fr[17])); DEFINE(TASK_PT_FR18, offsetof(struct task_struct, thread.regs.fr[18])); DEFINE(TASK_PT_FR19, offsetof(struct task_struct, thread.regs.fr[19])); DEFINE(TASK_PT_FR20, offsetof(struct task_struct, thread.regs.fr[20])); DEFINE(TASK_PT_FR21, offsetof(struct task_struct, thread.regs.fr[21])); DEFINE(TASK_PT_FR22, offsetof(struct task_struct, thread.regs.fr[22])); DEFINE(TASK_PT_FR23, offsetof(struct task_struct, thread.regs.fr[23])); DEFINE(TASK_PT_FR24, offsetof(struct task_struct, thread.regs.fr[24])); DEFINE(TASK_PT_FR25, offsetof(struct task_struct, thread.regs.fr[25])); DEFINE(TASK_PT_FR26, offsetof(struct task_struct, thread.regs.fr[26])); DEFINE(TASK_PT_FR27, offsetof(struct task_struct, thread.regs.fr[27])); DEFINE(TASK_PT_FR28, offsetof(struct task_struct, thread.regs.fr[28])); DEFINE(TASK_PT_FR29, offsetof(struct task_struct, thread.regs.fr[29])); DEFINE(TASK_PT_FR30, offsetof(struct task_struct, thread.regs.fr[30])); DEFINE(TASK_PT_FR31, offsetof(struct task_struct, thread.regs.fr[31])); DEFINE(TASK_PT_SR0, offsetof(struct task_struct, thread.regs.sr[ 0])); DEFINE(TASK_PT_SR1, offsetof(struct task_struct, thread.regs.sr[ 1])); DEFINE(TASK_PT_SR2, offsetof(struct task_struct, thread.regs.sr[ 2])); DEFINE(TASK_PT_SR3, offsetof(struct task_struct, thread.regs.sr[ 3])); DEFINE(TASK_PT_SR4, offsetof(struct task_struct, thread.regs.sr[ 4])); DEFINE(TASK_PT_SR5, offsetof(struct task_struct, thread.regs.sr[ 5])); DEFINE(TASK_PT_SR6, offsetof(struct task_struct, thread.regs.sr[ 6])); DEFINE(TASK_PT_SR7, offsetof(struct task_struct, thread.regs.sr[ 7])); DEFINE(TASK_PT_IASQ0, offsetof(struct task_struct, thread.regs.iasq[0])); DEFINE(TASK_PT_IASQ1, offsetof(struct task_struct, thread.regs.iasq[1])); DEFINE(TASK_PT_IAOQ0, offsetof(struct task_struct, thread.regs.iaoq[0])); DEFINE(TASK_PT_IAOQ1, offsetof(struct task_struct, thread.regs.iaoq[1])); DEFINE(TASK_PT_CR27, offsetof(struct task_struct, thread.regs.cr27)); DEFINE(TASK_PT_ORIG_R28, offsetof(struct task_struct, thread.regs.orig_r28)); DEFINE(TASK_PT_KSP, offsetof(struct task_struct, thread.regs.ksp)); DEFINE(TASK_PT_KPC, offsetof(struct task_struct, thread.regs.kpc)); DEFINE(TASK_PT_SAR, offsetof(struct task_struct, thread.regs.sar)); DEFINE(TASK_PT_IIR, offsetof(struct task_struct, thread.regs.iir)); DEFINE(TASK_PT_ISR, offsetof(struct task_struct, thread.regs.isr)); DEFINE(TASK_PT_IOR, offsetof(struct task_struct, thread.regs.ior)); BLANK(); DEFINE(TASK_SZ, sizeof(struct task_struct)); /* TASK_SZ_ALGN includes space for a stack frame. */ DEFINE(TASK_SZ_ALGN, align_frame(sizeof(struct task_struct), FRAME_ALIGN)); BLANK(); DEFINE(PT_PSW, offsetof(struct pt_regs, gr[ 0])); DEFINE(PT_GR1, offsetof(struct pt_regs, gr[ 1])); DEFINE(PT_GR2, offsetof(struct pt_regs, gr[ 2])); DEFINE(PT_GR3, offsetof(struct pt_regs, gr[ 3])); DEFINE(PT_GR4, offsetof(struct pt_regs, gr[ 4])); DEFINE(PT_GR5, offsetof(struct pt_regs, gr[ 5])); DEFINE(PT_GR6, offsetof(struct pt_regs, gr[ 6])); DEFINE(PT_GR7, offsetof(struct pt_regs, gr[ 7])); DEFINE(PT_GR8, offsetof(struct pt_regs, gr[ 8])); DEFINE(PT_GR9, offsetof(struct pt_regs, gr[ 9])); DEFINE(PT_GR10, offsetof(struct pt_regs, gr[10])); DEFINE(PT_GR11, offsetof(struct pt_regs, gr[11])); DEFINE(PT_GR12, offsetof(struct pt_regs, gr[12])); DEFINE(PT_GR13, offsetof(struct pt_regs, gr[13])); DEFINE(PT_GR14, offsetof(struct pt_regs, gr[14])); DEFINE(PT_GR15, offsetof(struct pt_regs, gr[15])); DEFINE(PT_GR16, offsetof(struct pt_regs, gr[16])); DEFINE(PT_GR17, offsetof(struct pt_regs, gr[17])); DEFINE(PT_GR18, offsetof(struct pt_regs, gr[18])); DEFINE(PT_GR19, offsetof(struct pt_regs, gr[19])); DEFINE(PT_GR20, offsetof(struct pt_regs, gr[20])); DEFINE(PT_GR21, offsetof(struct pt_regs, gr[21])); DEFINE(PT_GR22, offsetof(struct pt_regs, gr[22])); DEFINE(PT_GR23, offsetof(struct pt_regs, gr[23])); DEFINE(PT_GR24, offsetof(struct pt_regs, gr[24])); DEFINE(PT_GR25, offsetof(struct pt_regs, gr[25])); DEFINE(PT_GR26, offsetof(struct pt_regs, gr[26])); DEFINE(PT_GR27, offsetof(struct pt_regs, gr[27])); DEFINE(PT_GR28, offsetof(struct pt_regs, gr[28])); DEFINE(PT_GR29, offsetof(struct pt_regs, gr[29])); DEFINE(PT_GR30, offsetof(struct pt_regs, gr[30])); DEFINE(PT_GR31, offsetof(struct pt_regs, gr[31])); DEFINE(PT_FR0, offsetof(struct pt_regs, fr[ 0])); DEFINE(PT_FR1, offsetof(struct pt_regs, fr[ 1])); DEFINE(PT_FR2, offsetof(struct pt_regs, fr[ 2])); DEFINE(PT_FR3, offsetof(struct pt_regs, fr[ 3])); DEFINE(PT_FR4, offsetof(struct pt_regs, fr[ 4])); DEFINE(PT_FR5, offsetof(struct pt_regs, fr[ 5])); DEFINE(PT_FR6, offsetof(struct pt_regs, fr[ 6])); DEFINE(PT_FR7, offsetof(struct pt_regs, fr[ 7])); DEFINE(PT_FR8, offsetof(struct pt_regs, fr[ 8])); DEFINE(PT_FR9, offsetof(struct pt_regs, fr[ 9])); DEFINE(PT_FR10, offsetof(struct pt_regs, fr[10])); DEFINE(PT_FR11, offsetof(struct pt_regs, fr[11])); DEFINE(PT_FR12, offsetof(struct pt_regs, fr[12])); DEFINE(PT_FR13, offsetof(struct pt_regs, fr[13])); DEFINE(PT_FR14, offsetof(struct pt_regs, fr[14])); DEFINE(PT_FR15, offsetof(struct pt_regs, fr[15])); DEFINE(PT_FR16, offsetof(struct pt_regs, fr[16])); DEFINE(PT_FR17, offsetof(struct pt_regs, fr[17])); DEFINE(PT_FR18, offsetof(struct pt_regs, fr[18])); DEFINE(PT_FR19, offsetof(struct pt_regs, fr[19])); DEFINE(PT_FR20, offsetof(struct pt_regs, fr[20])); DEFINE(PT_FR21, offsetof(struct pt_regs, fr[21])); DEFINE(PT_FR22, offsetof(struct pt_regs, fr[22])); DEFINE(PT_FR23, offsetof(struct pt_regs, fr[23])); DEFINE(PT_FR24, offsetof(struct pt_regs, fr[24])); DEFINE(PT_FR25, offsetof(struct pt_regs, fr[25])); DEFINE(PT_FR26, offsetof(struct pt_regs, fr[26])); DEFINE(PT_FR27, offsetof(struct pt_regs, fr[27])); DEFINE(PT_FR28, offsetof(struct pt_regs, fr[28])); DEFINE(PT_FR29, offsetof(struct pt_regs, fr[29])); DEFINE(PT_FR30, offsetof(struct pt_regs, fr[30])); DEFINE(PT_FR31, offsetof(struct pt_regs, fr[31])); DEFINE(PT_SR0, offsetof(struct pt_regs, sr[ 0])); DEFINE(PT_SR1, offsetof(struct pt_regs, sr[ 1])); DEFINE(PT_SR2, offsetof(struct pt_regs, sr[ 2])); DEFINE(PT_SR3, offsetof(struct pt_regs, sr[ 3])); DEFINE(PT_SR4, offsetof(struct pt_regs, sr[ 4])); DEFINE(PT_SR5, offsetof(struct pt_regs, sr[ 5])); DEFINE(PT_SR6, offsetof(struct pt_regs, sr[ 6])); DEFINE(PT_SR7, offsetof(struct pt_regs, sr[ 7])); DEFINE(PT_IASQ0, offsetof(struct pt_regs, iasq[0])); DEFINE(PT_IASQ1, offsetof(struct pt_regs, iasq[1])); DEFINE(PT_IAOQ0, offsetof(struct pt_regs, iaoq[0])); DEFINE(PT_IAOQ1, offsetof(struct pt_regs, iaoq[1])); DEFINE(PT_CR27, offsetof(struct pt_regs, cr27)); DEFINE(PT_ORIG_R28, offsetof(struct pt_regs, orig_r28)); DEFINE(PT_KSP, offsetof(struct pt_regs, ksp)); DEFINE(PT_KPC, offsetof(struct pt_regs, kpc)); DEFINE(PT_SAR, offsetof(struct pt_regs, sar)); DEFINE(PT_IIR, offsetof(struct pt_regs, iir)); DEFINE(PT_ISR, offsetof(struct pt_regs, isr)); DEFINE(PT_IOR, offsetof(struct pt_regs, ior)); DEFINE(PT_SIZE, sizeof(struct pt_regs)); /* PT_SZ_ALGN includes space for a stack frame. */ DEFINE(PT_SZ_ALGN, align_frame(sizeof(struct pt_regs), FRAME_ALIGN)); BLANK(); DEFINE(TI_TASK, offsetof(struct thread_info, task)); DEFINE(TI_EXEC_DOMAIN, offsetof(struct thread_info, exec_domain)); DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); DEFINE(TI_SEGMENT, offsetof(struct thread_info, addr_limit)); DEFINE(TI_PRE_COUNT, offsetof(struct thread_info, preempt_count)); DEFINE(THREAD_SZ, sizeof(struct thread_info)); /* THREAD_SZ_ALGN includes space for a stack frame. */ DEFINE(THREAD_SZ_ALGN, align_frame(sizeof(struct thread_info), FRAME_ALIGN)); BLANK(); DEFINE(ICACHE_BASE, offsetof(struct pdc_cache_info, ic_base)); DEFINE(ICACHE_STRIDE, offsetof(struct pdc_cache_info, ic_stride)); DEFINE(ICACHE_COUNT, offsetof(struct pdc_cache_info, ic_count)); DEFINE(ICACHE_LOOP, offsetof(struct pdc_cache_info, ic_loop)); DEFINE(DCACHE_BASE, offsetof(struct pdc_cache_info, dc_base)); DEFINE(DCACHE_STRIDE, offsetof(struct pdc_cache_info, dc_stride)); DEFINE(DCACHE_COUNT, offsetof(struct pdc_cache_info, dc_count)); DEFINE(DCACHE_LOOP, offsetof(struct pdc_cache_info, dc_loop)); DEFINE(ITLB_SID_BASE, offsetof(struct pdc_cache_info, it_sp_base)); DEFINE(ITLB_SID_STRIDE, offsetof(struct pdc_cache_info, it_sp_stride)); DEFINE(ITLB_SID_COUNT, offsetof(struct pdc_cache_info, it_sp_count)); DEFINE(ITLB_OFF_BASE, offsetof(struct pdc_cache_info, it_off_base)); DEFINE(ITLB_OFF_STRIDE, offsetof(struct pdc_cache_info, it_off_stride)); DEFINE(ITLB_OFF_COUNT, offsetof(struct pdc_cache_info, it_off_count)); DEFINE(ITLB_LOOP, offsetof(struct pdc_cache_info, it_loop)); DEFINE(DTLB_SID_BASE, offsetof(struct pdc_cache_info, dt_sp_base)); DEFINE(DTLB_SID_STRIDE, offsetof(struct pdc_cache_info, dt_sp_stride)); DEFINE(DTLB_SID_COUNT, offsetof(struct pdc_cache_info, dt_sp_count)); DEFINE(DTLB_OFF_BASE, offsetof(struct pdc_cache_info, dt_off_base)); DEFINE(DTLB_OFF_STRIDE, offsetof(struct pdc_cache_info, dt_off_stride)); DEFINE(DTLB_OFF_COUNT, offsetof(struct pdc_cache_info, dt_off_count)); DEFINE(DTLB_LOOP, offsetof(struct pdc_cache_info, dt_loop)); BLANK(); DEFINE(TIF_BLOCKSTEP_PA_BIT, 31-TIF_BLOCKSTEP); DEFINE(TIF_SINGLESTEP_PA_BIT, 31-TIF_SINGLESTEP); BLANK(); DEFINE(ASM_PMD_SHIFT, PMD_SHIFT); DEFINE(ASM_PGDIR_SHIFT, PGDIR_SHIFT); DEFINE(ASM_BITS_PER_PGD, BITS_PER_PGD); DEFINE(ASM_BITS_PER_PMD, BITS_PER_PMD); DEFINE(ASM_BITS_PER_PTE, BITS_PER_PTE); DEFINE(ASM_PGD_PMD_OFFSET, -(PAGE_SIZE << PGD_ORDER)); DEFINE(ASM_PMD_ENTRY, ((PAGE_OFFSET & PMD_MASK) >> PMD_SHIFT)); DEFINE(ASM_PGD_ENTRY, PAGE_OFFSET >> PGDIR_SHIFT); DEFINE(ASM_PGD_ENTRY_SIZE, PGD_ENTRY_SIZE); DEFINE(ASM_PMD_ENTRY_SIZE, PMD_ENTRY_SIZE); DEFINE(ASM_PTE_ENTRY_SIZE, PTE_ENTRY_SIZE); DEFINE(ASM_PFN_PTE_SHIFT, PFN_PTE_SHIFT); DEFINE(ASM_PT_INITIAL, PT_INITIAL); BLANK(); DEFINE(EXCDATA_IP, offsetof(struct exception_data, fault_ip)); DEFINE(EXCDATA_SPACE, offsetof(struct exception_data, fault_space)); DEFINE(EXCDATA_ADDR, offsetof(struct exception_data, fault_addr)); BLANK(); DEFINE(ASM_PDC_RESULT_SIZE, NUM_PDC_RESULT * sizeof(unsigned long)); BLANK(); return 0; }
/* * Find Viterbi alignment. */ static void align_utt(char *sent, /* In: Reference transcript */ int32 nfr, /* In: #frames of input */ char *ctlspec, /* In: Utt specifiction from control file */ char *uttid) { /* In: Utterance id, for logging and other use */ int32 i; align_stseg_t *stseg; align_phseg_t *phseg; align_wdseg_t *wdseg; int32 w; w = feat_window_size(kbcore_fcb(kbc)); /* #MFC vectors needed on either side of current frame to compute one feature vector */ if (nfr <= (w << 1)) { E_ERROR("Utterance %s < %d frames (%d); ignored\n", uttid, (w << 1) + 1, nfr); return; } ptmr_reset_all(timers); ptmr_reset(&tm_utt); ptmr_start(&tm_utt); ptmr_reset(&tm_ovrhd); ptmr_start(&tm_ovrhd); ptmr_start(timers + tmr_utt); if (align_build_sent_hmm(sent, cmd_ln_int32_r(kbc->config, "-insert_sil")) != 0) { align_destroy_sent_hmm(); ptmr_stop(timers + tmr_utt); E_ERROR("No sentence HMM; no alignment for %s\n", uttid); return; } align_start_utt(uttid); for (i = 0; i < nfr; i++) { ptmr_start(timers + tmr_utt); /* Obtain active senone flags */ ptmr_start(timers + tmr_gauden); ptmr_start(timers + tmr_senone); align_sen_active(ascr->sen_active, ascr->n_sen); /* Bah, there ought to be a function for this. */ if (kbc->ms_mgau) { ms_cont_mgau_frame_eval(ascr, kbc->ms_mgau, kbc->mdef, feat[i], i); } else if (kbc->s2_mgau) { s2_semi_mgau_frame_eval(kbc->s2_mgau, ascr, fastgmm, feat[i], i); } else if (kbc->mgau) { approx_cont_mgau_ci_eval(kbcore_svq(kbc), kbcore_gs(kbc), kbcore_mgau(kbc), fastgmm, kbc->mdef, feat[i][0], ascr->cache_ci_senscr[0], &(ascr->cache_best_list[0]), i, kbcore_logmath(kbc)); approx_cont_mgau_frame_eval(kbcore_mdef(kbc), kbcore_svq(kbc), kbcore_gs(kbc), kbcore_mgau(kbc), fastgmm, ascr, feat[i][0], i, ascr-> cache_ci_senscr[0], &tm_ovrhd, kbcore_logmath(kbc)); } ptmr_stop(timers + tmr_gauden); ptmr_stop(timers + tmr_senone); /* Step alignment one frame forward */ ptmr_start(timers + tmr_align); align_frame(ascr->senscr); ptmr_stop(timers + tmr_align); ptmr_stop(timers + tmr_utt); } ptmr_stop(&tm_utt); ptmr_stop(&tm_ovrhd); printf("\n"); /* Wind up alignment for this utterance */ if (align_end_utt(&stseg, &phseg, &wdseg) < 0) E_ERROR("Final state not reached; no alignment for %s\n\n", uttid); else { if (s2stsegdir) write_s2stseg(s2stsegdir, stseg, uttid, ctlspec, cmd_ln_boolean_r(kbc->config, "-s2cdsen")); if (stsegdir) write_stseg(stsegdir, stseg, uttid, ctlspec); if (phsegdir) write_phseg(phsegdir, phseg, uttid, ctlspec); if (phlabdir) write_phlab(phlabdir, phseg, uttid, ctlspec, cmd_ln_int32_r(kbc->config, "-frate")); if (wdsegdir) write_wdseg(wdsegdir, wdseg, uttid, ctlspec); if (outsentfp) write_outsent(outsentfp, wdseg, uttid); if (outctlfp) write_outctl(outctlfp, ctlspec); } align_destroy_sent_hmm(); ptmr_print_all(stdout, timers, nfr * 0.1); printf ("EXECTIME: %5d frames, %7.2f sec CPU, %6.2f xRT; %7.2f sec elapsed, %6.2f xRT\n", nfr, tm_utt.t_cpu, tm_utt.t_cpu * 100.0 / nfr, tm_utt.t_elapsed, tm_utt.t_elapsed * 100.0 / nfr); tot_nfr += nfr; }