void nvWavenetReference::run()

in src/nv-wavenet/nv_wavenet_reference.cpp [297:333]


void nvWavenetReference::run(int num_samples, int batch_size, int* yOut) {
    Matrix zeroMatrixR(m_R,batch_size,false);
    for (int row=0; row<m_R; row++) {
        for (int col=0; col<batch_size; col++) {
            zeroMatrixR.set(row,col,0.f);
        }
    }
    Matrix zeroMatrixS(m_S,batch_size,false);
    for (int row=0; row<m_S; row++) {
        for (int col=0; col<batch_size; col++) {
            zeroMatrixS.set(row,col,0.f);
        }
    }

    for (int sample=0; sample<num_samples; sample++) {
        nvWavenetEmbed(m_yInPrev, m_yInCur, *m_embeddingsPrev, *m_embeddingsCur, *m_Xt[sample][0]);
        int dilation = 1;
        for (int l=0; l<m_numLayers; l++) {
            Matrix* Xtmd = (sample < dilation) ? &zeroMatrixR : m_Xt[sample-dilation][l];
            dilation *=2;
            if (dilation > m_maxDilation) dilation = 1;
            Matrix* skipIn = (l==0) ? &zeroMatrixS : m_skipOut[l-1];
            nvWavenetLayer(m_R, batch_size, *m_Wprev[l], *m_Wcur[l], *m_Bh[l], *m_Lh[sample][l], *m_Wres[l], *m_Bres[l], *m_Wskip[l], *m_Bskip[l], *Xtmd, *m_Xt[sample][l], *m_Xt[sample][l+1], *skipIn, *m_skipOut[l], l==m_numLayers-1, sample);
        }
        nvWavenetFinal(*m_Wzs, *m_Bzs, *m_Wza, *m_Bza, *m_Wzi, *m_Bzi,
                       *m_skipOut[m_numLayers-1], *m_Xt[sample][0], *m_LhFinal[sample], *m_Zs, *m_Za, *m_P, sample, *m_Skip2);
        std::vector<int> yOut_sample(batch_size);
        nvWavenetSelect(sample, *m_P, *m_outputSelectors, yOut_sample);
        for (int b=0; b<batch_size; b++) {
            m_yInPrev[b] = m_yInCur[b];
            m_yInCur[b] = yOut_sample[b];
            yOut[b*num_samples + sample] = yOut_sample[b];
        }

    }
    m_lastSample = num_samples-1;
}