void tensorGCRTC (complex_t* y, hDim_t totm, PrimeExponent* peArr, hShort_t sizeOfPE, complex_t** gcoeffs) { #ifdef STATS gccCtr++; struct timespec s1,t1; clock_gettime(CLOCK_REALTIME, &s1); #endif #ifdef DEBUG_MODE printf("\n\nEntered tensorGCRTC\ttotm=%" PRId32 "\tnumFacts=%" PRId16 "\n[", totm, sizeOfPE); hDim_t j; for(j = 0; j < totm; j++) { printf("(%f,%f),", (y[j]).real, (y[j]).imag); } printf("]\n["); for(j = 0; j < sizeOfPE; j++) { printf("(%" PRId32 ",%" PRId16 "),", peArr[j].prime, peArr[j].exponent); } printf("]\n"); #endif void** vgcoeffs = (void**)malloc(sizeOfPE*sizeof(void*)); hDim_t i; for(i = 0; i < sizeOfPE; i++) { vgcoeffs[i] = (void*) (gcoeffs[i]); } tensorFuserCRT (y, ppGCRTC, totm, peArr, sizeOfPE, vgcoeffs, 0); #ifdef STATS clock_gettime(CLOCK_REALTIME, &t1); gccTime = tsAdd(gccTime, tsSubtract(t1,s1)); #endif }
void tensorGInvDecR (hInt_t* y, hDim_t totm, PrimeExponent* peArr, hShort_t sizeOfPE) { #ifdef STATS gidrCtr++; struct timespec s1,t1; clock_gettime(CLOCK_REALTIME, &s1); #endif tensorFuser (y, ppGInvDecR, totm, peArr, sizeOfPE, 0); #ifdef STATS clock_gettime(CLOCK_REALTIME, &t1); gidrTime = tsAdd(gidrTime, tsSubtract(t1,s1)); #endif }
void annotate(const char * str) { timespec time; clock_gettime(CLOCK_REALTIME, &time); timespec diff = tsSubtract(time, start_time); double time_sec = diff.tv_sec + diff.tv_nsec/nsec_to_sec; std::stringstream ss; ss << str << " (" << time_sec << "sec)"; annotations.push_back(std::make_pair(diff, std::string(ss.str()))); }
void tensorGCRTRq (hInt_t* y, hDim_t totm, PrimeExponent* peArr, hShort_t sizeOfPE, hInt_t** gcoeffs, hInt_t q) { #ifdef STATS gcrqCtr++; struct timespec s1,t1; clock_gettime(CLOCK_REALTIME, &s1); #endif #ifdef DEBUG_MODE printf("\n\nEntered tensorGCRTRq\ttotm=%" PRId32 "\tnumFacts=%" PRId16 "\tq=%" PRId64 "\n[", totm, sizeOfPE, q); hDim_t j; for(j = 0; j < totm; j++) { printf("%" PRId64 ",", y[j]); } printf("]\n["); for(j = 0; j < sizeOfPE; j++) { printf("(%" PRId32 ",%" PRId16 "),", peArr[j].prime, peArr[j].exponent); } printf("]\n"); #endif void** vgcoeffs = (void**)malloc(sizeOfPE*sizeof(void*)); hDim_t i; for(i = 0; i < sizeOfPE; i++) { vgcoeffs[i] = (void*) (gcoeffs[i]); } tensorFuserCRT (y, ppGCRTRq, totm, peArr, sizeOfPE, vgcoeffs, q); #ifdef DEBUG_MODE for(j = 0; j < totm; j++) { if(y[j]<0) { printf("tensorGCRTRq\n"); } } #endif #ifdef STATS clock_gettime(CLOCK_REALTIME, &t1); gcrqTime = tsAdd(gcrqTime, tsSubtract(t1,s1)); #endif }
void tensorNormSqR (hInt_t* y, hDim_t totm, PrimeExponent* peArr, hShort_t sizeOfPE) { #ifdef STATS normrCtr++; struct timespec s1,t1; clock_gettime(CLOCK_REALTIME, &s1); #endif #ifdef DEBUG_MODE printf("\n\nEntered tensorNormSqR\ttotm=%" PRId32 "\tnumFacts=%" PRId16 "\n[", totm, sizeOfPE); hDim_t i; for(i = 0; i < totm; i++) { printf("%" PRId64 ",", y[i]); } printf("]\n["); for(i = 0; i < sizeOfPE; i++) { printf("(%" PRId32 ",%" PRId16 "),", peArr[i].prime, peArr[i].exponent); } printf("]\n"); #endif hInt_t* tempSpace = (hInt_t*)malloc(totm*sizeof(hInt_t)); for(hDim_t i = 0; i < totm; i++) { tempSpace[i]=y[i]; } tensorFuser(y, ppNormSqR, totm, peArr, sizeOfPE, 0); //do dot product and return in index 0 hInt_t dotprod = 0; for(hDim_t i = 0; i < totm; i++) { dotprod += (tempSpace[i]*y[i]); } y[0] = dotprod; free(tempSpace); #ifdef STATS clock_gettime(CLOCK_REALTIME, &t1); lrTime = tsAdd(normrTime, tsSubtract(t1,s1)); #endif }
void tensorGInvPowRq (hInt_t* y, hDim_t totm, PrimeExponent* peArr, hShort_t sizeOfPE, hInt_t q) { #ifdef STATS giprqCtr++; struct timespec s1,t1; clock_gettime(CLOCK_REALTIME, &s1); #endif tensorFuser (y, ppGInvPowRq, totm, peArr, sizeOfPE, q); hDim_t j; for(j = 0; j < totm; j++) { if(y[j]<0) { y[j]+=q; } } #ifdef STATS clock_gettime(CLOCK_REALTIME, &t1); giprqTime = tsAdd(giprqTime, tsSubtract(t1,s1)); #endif }