From 899765845196007c695a2f858dbe3a41b8db4a2b Mon Sep 17 00:00:00 2001 From: Joshua Bakita Date: Sun, 7 Mar 2021 19:14:19 -0500 Subject: SD-VBS: Fix memory leaks and tweak allocation bounds - Fix leaks in localization, multi_ncut, svm, and texture_synthesis - Lower preallocation for sift and texture_synthesis to match memory profile with QCIF - Remove trailing whitespace in script_localization.c --- .../localization/src/c/script_localization.c | 203 ++++++++++----------- .../multi_ncut/src/c/script_multi_ncut.c | 1 + SD-VBS/benchmarks/sift/src/c/script_sift.c | 2 +- SD-VBS/benchmarks/svm/src/c/script_svm.c | 21 ++- .../src/c/script_texture_synthesis.c | 4 +- .../benchmarks/texture_synthesis/src/c/texture.c | 2 + 6 files changed, 119 insertions(+), 114 deletions(-) (limited to 'SD-VBS') diff --git a/SD-VBS/benchmarks/localization/src/c/script_localization.c b/SD-VBS/benchmarks/localization/src/c/script_localization.c index ed37132..ddd2215 100644 --- a/SD-VBS/benchmarks/localization/src/c/script_localization.c +++ b/SD-VBS/benchmarks/localization/src/c/script_localization.c @@ -78,7 +78,7 @@ int main(int argc, char* argv[]) vel = fSetArray(n, 3, 0); ones = fSetArray(n,1,1); - + F2D *randn; randn = randWrapper(n,3); @@ -96,38 +96,38 @@ int main(int argc, char* argv[]) } - + { F2D *eulAngle, *randn; eulAngle = fSetArray(n, 3, 0); randn = randWrapper(n,1); - + for(i=0; iheight, gyro->width); t1 = fDeepCopy(randW); - + for(i=0; i<(n*3); i++) { asubsref(t1,i) = asubsref(randW,i) * M_STDDEV_GYRO; @@ -174,103 +174,99 @@ int main(int argc, char* argv[]) } fFreeHandle(t1); abcd = fSum2(abc, 2); - + norm_gyro = fMallocHandle(abcd->height,abcd->width); angleAlpha = fMallocHandle(abcd->height, abcd->width); - + for(i=0; i<(abcd->height*abcd->width); i++) { asubsref(norm_gyro, i) = sqrt(asubsref(abcd,i)); asubsref(angleAlpha,i) = asubsref(norm_gyro,i) * gyroTimeInterval; } - + qD_r += angleAlpha->height + gyro->height; qD_c += angleAlpha->width + 3; - + fFreeHandle(t); - fFreeHandle(abcd); - + fFreeHandle(abcd); + cosA = fSetArray(angleAlpha->height, angleAlpha->width, 0); sinA = fSetArray(angleAlpha->height, angleAlpha->width, 0); - + for(i=0; i<(cosA->height*cosA->width); i++) asubsref(cosA,i) = cos( asubsref(angleAlpha,i) /2 ); - + for(i=0; i<(sinA->height*sinA->width); i++) asubsref(sinA,i) = sin( asubsref(angleAlpha,i) /2 ); - - + + fFreeHandle(abc); abc = fSetArray(1,3,1); t1 = fMtimes(norm_gyro, abc); t = ffDivide(gyro, t1); fFreeHandle(t1); - + abcd = fMtimes(sinA, abc); t1 = fTimes(t, abcd); quatDelta = fHorzcat(cosA, t1); - + fFreeHandle(abcd); fFreeHandle(t); fFreeHandle(t1); fFreeHandle(abc); - + t = quatMul(quat, quatDelta); fFreeHandle(quat); fFreeHandle(quatDelta); quat = fDeepCopy(t); - + fFreeHandle(t); fFreeHandle(norm_gyro); fFreeHandle(gyro); fFreeHandle(angleAlpha); fFreeHandle(cosA); fFreeHandle(sinA); - - } + } } - + if( asubsref(sType,0) ==4) { //Observation - float tempSum=0; F2D *Ovel; float OvelNorm; int i; - - + asubsref(STDDEV_GPSPos, 0) = asubsref(sData, 6); asubsref(STDDEV_GPSPos, 4) = asubsref(sData,7); asubsref(STDDEV_GPSPos, 8) = 15; - + Opos = fDeepCopyRange(sData, 0, 1, 0, 3); - + //Initialize - for(i=0; i<(pos->height*pos->width); i++) tempSum += asubsref(pos,i); - + if(tempSum == 0) { F2D *t, *t1; t = fMtimes( randW, STDDEV_GPSPos); t1 = fMtimes(ones, Opos); - + for(i=0; i<(pos->height*pos->width); i++) asubsref(pos,i) = asubsref(t,i) + asubsref(t1,i); - + fFreeHandle(t); fFreeHandle(t1); } - else + else { int rows, cols; int mnrows, mncols; - + rows = STDDEV_GPSPos->height; cols = STDDEV_GPSPos->width; - + temp_STDDEV_GPSPos = fSetArray(rows,cols,1); for( mnrows=0; mnrows0.5) { F2D *t; @@ -298,7 +294,7 @@ int main(int argc, char* argv[]) Ovel = fDivide(t, OvelNorm); qConj = quatConj(quat); fFreeHandle(t); - + { t = fSetArray(1,3,0); subsref(t,0,0) = 1; @@ -309,7 +305,7 @@ int main(int argc, char* argv[]) asubsref(t,0) = 1; asubsref(t,4) = 1; asubsref(t,8) = 1; - + { int i; for(i=0; i<(t->height*t->width); i++) @@ -317,7 +313,7 @@ int main(int argc, char* argv[]) w = mcl( orgWorld, Ovel, t); generateSample(w, quat, vel, pos); } - + fFreeHandle(t); fFreeHandle(w); fFreeHandle(orgWorld); @@ -325,81 +321,81 @@ int main(int argc, char* argv[]) } fFreeHandle(Ovel); } - + if( asubsref(sType,0) ==1) { //Observation F2D *Ovel; F2D *t, *t1, *t2; float valVel; - + t = fSetArray(vel->height, 1, 0); - + for(i=0; iheight; i++) { subsref(t,i,0) = sqrt(pow(subsref(vel,i,0),2) + pow(subsref(vel,i,1),2) + pow(subsref(vel,i,2),2)); } - + Ovel = fSetArray(1, 1, asubsref(sData,0)); valVel = 1.0/STDDEV_ODOVel; - + t1 = fSetArray(1,1,(1.0/STDDEV_ODOVel)); w = mcl (t, Ovel, t1); generateSample(w, quat, vel, pos); - - + + fFreeHandle(w); fFreeHandle(t); fFreeHandle(t1); fFreeHandle(Ovel); } - + if( asubsref(sType,0) ==3) { //Observation F2D *t; t = fSetArray(1, 3, 0); asubsref(t,2) = -9.8; - + accl = fDeepCopyRange(sData, 0, 1, 0, 3); - gtemp = fMtimes( ones, t); + gtemp = fMtimes( ones, t); gravity = quatRot(gtemp, quat); - + fFreeHandle(gtemp); fFreeHandle(t); t = fSetArray(3,3,0); asubsref(t,0) = 1; asubsref(t,4) = 1; asubsref(t,8) = 1; - - { + + { int i; for(i=0; i<(t->height*t->width); i++) asubsref(t,i) = asubsref(t,i)/STDDEV_ACCL; w = mcl( gravity, accl, t); } - + generateSample(w, quat, vel, pos); fFreeHandle(t); //Motion model t = fMtimes(ones, accl); fFreeHandle(accl); - + accl = fMinus(t, gravity); - + fFreeHandle(w); fFreeHandle(gravity); fFreeHandle(t); - + { - //pos=pos+quatRot(vel,quatConj(quat))*acclTimeInterval+1/2*quatRot(accl,quatConj(quat))*acclTimeInterval^2+randn(n,3)*M_STDDEV_POS; - + //pos=pos+quatRot(vel,quatConj(quat))*acclTimeInterval+1/2*quatRot(accl,quatConj(quat))*acclTimeInterval^2+randn(n,3)*M_STDDEV_POS; + F2D *s, *is; int i; is = quatConj(quat); s = quatRot(vel, is); fFreeHandle(is); - + for(i=0; i<(s->height*s->width); i++) { asubsref(s,i) = asubsref(s,i)*acclTimeInterval; //+(1/2); @@ -409,9 +405,9 @@ int main(int argc, char* argv[]) pos = fDeepCopy(is); fFreeHandle(is); fFreeHandle(s); - + /** pos_ above stores: pos+quatRot(vel,quatConj(quat))*acclTimeInterval **/ - + is = quatConj(quat); s = quatRot(accl, is); t = fDeepCopy(s); @@ -419,36 +415,36 @@ int main(int argc, char* argv[]) { asubsref(t,i) = 1/2*asubsref(s,i)*acclTimeInterval*acclTimeInterval; } - + /** t_ above stores: 1/2*quatRot(accl,quatCong(quat))*acclTimeInterval^2 **/ - + fFreeHandle(s); fFreeHandle(is); s = randnWrapper(n,3); - + for(i=0; i<(s->height*s->width); i++) { asubsref(s,i) = asubsref(s,i) * M_STDDEV_POS; } - + /** s_ above stores: randn(n,3)*M_STDDEV_POS **/ - + is = fPlus(pos, t); fFreeHandle(pos); pos = fPlus(is, s); - + fFreeHandle(s); fFreeHandle(t); fFreeHandle(is); - + // vel=vel+accl*acclTimeInterval+randn(n,3)*M_STDDEV_VEL; %?? - + t = fDeepCopy(accl); for(i=0; i<(accl->height*accl->width); i++) asubsref(t,i) = asubsref(accl,i) * acclTimeInterval; - + is = fPlus(vel, t); - + fFreeHandle(accl); fFreeHandle(t); s = randnWrapper(n,3); @@ -456,30 +452,30 @@ int main(int argc, char* argv[]) { asubsref(s,i) = asubsref(s,i) * M_STDDEV_VEL; } - + fFreeHandle(vel); vel = fPlus(is, s); fFreeHandle(is); fFreeHandle(s); } - + } - + // Self check { F2D* temp; float quatOut=0, velOut=0, posOut=0; int i; - + for(i=0; i<(quat->height*quat->width); i++) quatOut += asubsref(quat, i); - + for(i=0; i<(vel->height*vel->width); i++) velOut += asubsref(vel, i); - + for(i=0; i<(pos->height*pos->width); i++) posOut += asubsref(pos, i); - + subsref(resultMat,0,icount) = quatOut; subsref(resultMat,1,icount) = velOut; subsref(resultMat,2,icount) = posOut; @@ -490,10 +486,16 @@ int main(int argc, char* argv[]) if (asubsref(isEOF,0) == 1) break; } + fFreeHandle(STDDEV_GPSPos); + iFreeHandle(index); + iFreeHandle(sType); + iFreeHandle(isEOF); + fFreeHandle(quat); + fFreeHandle(randW); } #ifdef CHECK - + // Self checking - use expected.txt from data directory { int ret=0; @@ -508,18 +510,11 @@ int main(int argc, char* argv[]) // Self checking done #endif - - fFreeHandle(STDDEV_GPSPos); - iFreeHandle(index); - iFreeHandle(sType); - iFreeHandle(isEOF); fFreeHandle(fid); fFreeHandle(resultMat); fFreeHandle(pos); fFreeHandle(vel); - fFreeHandle(quat); fFreeHandle(ones); - fFreeHandle(randW); fFreeHandle(randn); WRITE_TO_FILE return 0; diff --git a/SD-VBS/benchmarks/multi_ncut/src/c/script_multi_ncut.c b/SD-VBS/benchmarks/multi_ncut/src/c/script_multi_ncut.c index 77c6b71..b836824 100644 --- a/SD-VBS/benchmarks/multi_ncut/src/c/script_multi_ncut.c +++ b/SD-VBS/benchmarks/multi_ncut/src/c/script_multi_ncut.c @@ -75,6 +75,7 @@ int main(int argc, char* argv[]) free(segments); free(tempOut); free(imageOut); + iFreeHandle(kernel); free(edgeWeights); free(in); free(ind); diff --git a/SD-VBS/benchmarks/sift/src/c/script_sift.c b/SD-VBS/benchmarks/sift/src/c/script_sift.c index ab39ae3..40b16d4 100644 --- a/SD-VBS/benchmarks/sift/src/c/script_sift.c +++ b/SD-VBS/benchmarks/sift/src/c/script_sift.c @@ -7,7 +7,7 @@ Author: Sravanthi Kota Venkata #include "sift.h" #include #include "extra.h" -#define SIFT_MEM 1<<29 +#define SIFT_MEM 1<<24 void normalizeImage(F2D* image) { int i; diff --git a/SD-VBS/benchmarks/svm/src/c/script_svm.c b/SD-VBS/benchmarks/svm/src/c/script_svm.c index f1ce963..d77291c 100644 --- a/SD-VBS/benchmarks/svm/src/c/script_svm.c +++ b/SD-VBS/benchmarks/svm/src/c/script_svm.c @@ -16,7 +16,7 @@ int main(int argc, char* argv[]) int iter, N, Ntst, i, j, k, n; F2D* trn1, *tst1, *trn2, *tst2, *Yoffset; alphaRet* alpha; - F2D *a_result, *result; + F2D *a_result, *result = NULL; F2D *s; F2D *b_result; F2D *Xtst, *Ytst; @@ -87,6 +87,10 @@ int main(int argc, char* argv[]) tst2 = readFile(im1); for_each_job { + // Clear the results from our last job + if (result) + fFreeHandle(result); + alpha = getAlphaFromTrainSet(N, trn1, trn2, iter); a_result = alpha->a_result; b_result = alpha->b_result; @@ -133,6 +137,14 @@ int main(int argc, char* argv[]) fFreeHandle(s); asubsref(result,n) = maxs; } + + fFreeHandle(Yoffset); + fFreeHandle(alpha->a_result); + fFreeHandle(alpha->b_result); + fFreeHandle(alpha->X); + free(alpha); + fFreeHandle(Xtst); + fFreeHandle(Ytst); } #ifdef CHECK @@ -154,14 +166,7 @@ int main(int argc, char* argv[]) fFreeHandle(tst1); fFreeHandle(trn2); fFreeHandle(tst2); - fFreeHandle(Yoffset); fFreeHandle(result); - fFreeHandle(alpha->a_result); - fFreeHandle(alpha->b_result); - fFreeHandle(alpha->X); - free(alpha); - fFreeHandle(Xtst); - fFreeHandle(Ytst); WRITE_TO_FILE return 0; } diff --git a/SD-VBS/benchmarks/texture_synthesis/src/c/script_texture_synthesis.c b/SD-VBS/benchmarks/texture_synthesis/src/c/script_texture_synthesis.c index 2ebb423..a3042e5 100644 --- a/SD-VBS/benchmarks/texture_synthesis/src/c/script_texture_synthesis.c +++ b/SD-VBS/benchmarks/texture_synthesis/src/c/script_texture_synthesis.c @@ -5,7 +5,7 @@ Author: Sravanthi Kota Venkata #include "texture.h" #include #include "extra.h" -#define TEXTURE_MEM 1<<28 +#define TEXTURE_MEM 1<<20 int WIDTHin,HEIGHTin; F2D *target, *result; int WIDTH,HEIGHT; @@ -48,6 +48,8 @@ int main(int argc, char **argv) fFreeHandle(target); fFreeHandle(result); free(atlas); + free(xloopout - WIDTH/2); + free(yloopout - HEIGHT/2); WRITE_TO_FILE return 0; } diff --git a/SD-VBS/benchmarks/texture_synthesis/src/c/texture.c b/SD-VBS/benchmarks/texture_synthesis/src/c/texture.c index fb0f1ae..b268df9 100644 --- a/SD-VBS/benchmarks/texture_synthesis/src/c/texture.c +++ b/SD-VBS/benchmarks/texture_synthesis/src/c/texture.c @@ -150,6 +150,8 @@ void create_texture(F2D *image, params *data) arrayref(atlas,aa(j,i)+1) = besty; } } + free(candlistx); + free(candlisty); } // Creates a list of valid candidates for given pixel using only L-shaped causal area -- cgit v1.2.2