int crypto_hashblocks_sha512( unsigned char *statebytes, const unsigned char *in,crypto_uint16 inlen ) { myu64 state[8]; myu64 state_safe[8]; myu64 w[16]; unsigned char i; myu64_convert_bigendian(state[0].v, statebytes + 0, 8); for (i=0;i<8;i++) state_safe[i] = state[i]; while (inlen >= 128) { for(i=0;i<16;i++) myu64_convert_bigendian(w[i].v, in + 8*i, 1); for(i=0;i<16;i++) myF(state, w+i, i); expand(w); for(i=0;i<16;i++) myF(state, w+i, i+16); expand(w); for(i=0;i<16;i++) myF(state, w+i, i+32); expand(w); for(i=0;i<16;i++) myF(state, w+i, i+48); expand(w); for(i=0;i<16;i++) myF(state, w+i, i+64); for(i=0;i<8;i++) bigint_add64(state[i].v, state[i].v, state_safe[i].v); for(i=0;i<8;i++) state_safe[i] = state[i]; in += 128; inlen -= 128; } myu64_convert_bigendian(statebytes+0, state_safe[0].v, 8); return inlen; }
void QL::learnWts() { resetInputToCNN(); for(int i = 0; i < miniBatchSize; ++i) { setInputToCNN(dExp[miniBatch[i]].fiJN, i); } if(numTimeLearnt < 1) { std::ofstream myF("inputToCNN.txt"); printInfile(cnnInputSize, inputToCNN, myF); myF.close(); } float *qVals = caff2->forwardNGetQVal(inputToCNN); TargetLayerInputData targ; std::fill(targ.begin(), targ.end(), 0.0f); FilterLayerInputData filterInp; std::fill(filterInp.begin(), filterInp.end(), 0.0f); prepareTarget(targ, qVals); for(int i = 0; i < miniBatchSize; ++i) { filterInp[i*numAction + dExp[miniBatch[i]].act] = 1; } resetInputToCNN(); for(int i = 0; i < miniBatchSize; ++i) { setInputToCNN(dExp[miniBatch[i]].fiJ, i); } int maxLIter = info.numLearnSteps; caff->learn(inputToCNN, targ, filterInp, maxLIter); numTimeLearnt++; if(numTimeLearnt - targetUpdate >= info.targetUpdateFreq) { targetUpdate = numTimeLearnt; caff2 = caff; } }