From d17b33131c14864bd1eae275f49a3f148e21cf29 Mon Sep 17 00:00:00 2001 From: Leo Chan Date: Thu, 22 Oct 2020 01:53:21 -0400 Subject: Squashed commit of the sb-vbs branch. Includes the SD-VBS benchmarks modified to: - Use libextra to loop as realtime jobs - Preallocate memory before starting their main computation - Accept input via stdin instead of via argc Does not include the SD-VBS matlab code. Fixes libextra execution in LITMUS^RT. --- SD-VBS/benchmarks/disparity/src/c/computeSAD.c | 27 +++++ .../benchmarks/disparity/src/c/correlateSAD_2D.c | 34 ++++++ SD-VBS/benchmarks/disparity/src/c/disparity.h | 24 ++++ SD-VBS/benchmarks/disparity/src/c/finalSAD.c | 28 +++++ SD-VBS/benchmarks/disparity/src/c/findDisparity.c | 29 +++++ SD-VBS/benchmarks/disparity/src/c/getDisparity.c | 43 +++++++ .../benchmarks/disparity/src/c/integralImage2D2D.c | 31 +++++ SD-VBS/benchmarks/disparity/src/c/padarray2.c | 33 ++++++ SD-VBS/benchmarks/disparity/src/c/padarray4.c | 41 +++++++ .../benchmarks/disparity/src/c/script_disparity.c | 132 +++++++++++++++++++++ 10 files changed, 422 insertions(+) create mode 100644 SD-VBS/benchmarks/disparity/src/c/computeSAD.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/correlateSAD_2D.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/disparity.h create mode 100644 SD-VBS/benchmarks/disparity/src/c/finalSAD.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/findDisparity.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/getDisparity.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/integralImage2D2D.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/padarray2.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/padarray4.c create mode 100644 SD-VBS/benchmarks/disparity/src/c/script_disparity.c (limited to 'SD-VBS/benchmarks/disparity/src') diff --git a/SD-VBS/benchmarks/disparity/src/c/computeSAD.c b/SD-VBS/benchmarks/disparity/src/c/computeSAD.c new file mode 100644 index 0000000..e12bd55 --- /dev/null +++ b/SD-VBS/benchmarks/disparity/src/c/computeSAD.c @@ -0,0 +1,27 @@ +/******************************** +Author: Sravanthi Kota Venkata +********************************/ + +#include +#include +#include "disparity.h" + +void computeSAD(I2D *Ileft, I2D* Iright_moved, F2D* SAD) +{ + int rows, cols, i, j, diff; + + rows = Ileft->height; + cols = Ileft->width; + + for(i=0; i +#include +#include "disparity.h" + +void correlateSAD_2D(I2D* Ileft, I2D* Iright, I2D* Iright_moved, int win_sz, int disparity, F2D* SAD, F2D* integralImg, F2D* retSAD, I2D* range) +{ + int rows, cols; + int i, j, endRM; + //I2D *range; + + //iResetArray(range,1,2,0); + subsref(range,0,0) = 0; + subsref(range,0,1) = disparity; + + rows = Iright_moved->height; + cols = Iright_moved->width; + + for(i=0; i +#include +#include "disparity.h" + +void finalSAD(F2D* integralImg, int win_sz, F2D* retSAD) +{ + int endR, endC; + int i, j, k; + + endR = integralImg->height; + endC = integralImg->width; + + k = 0; + for(j=0; j<(endC-win_sz); j++) + { + for(i=0; i<(endR-win_sz); i++) + { + subsref(retSAD,i,j) = subsref(integralImg,(win_sz+i),(j+win_sz)) + subsref(integralImg,(i+1) ,(j+1)) - subsref(integralImg,(i+1),(j+win_sz)) - subsref(integralImg,(win_sz+i),(j+1)); + } + } + + return; +} + diff --git a/SD-VBS/benchmarks/disparity/src/c/findDisparity.c b/SD-VBS/benchmarks/disparity/src/c/findDisparity.c new file mode 100644 index 0000000..6335daf --- /dev/null +++ b/SD-VBS/benchmarks/disparity/src/c/findDisparity.c @@ -0,0 +1,29 @@ +/******************************** +Author: Sravanthi Kota Venkata +********************************/ + +#include +#include +#include "disparity.h" + +void findDisparity(F2D* retSAD, F2D* minSAD, I2D* retDisp, int level, int nr, int nc) +{ + int i, j, a, b; + + for(i=0; i +#include +#include "disparity.h" + +I2D* getDisparity(I2D* Ileft, I2D* Iright, int win_sz, int max_shift, + I2D* minSAD, I2D* retDisp, I2D* halfWin, + I2D* IrightPadded, I2D* IleftPadded, I2D* Iright_moved, + F2D* retSAD, F2D* SAD, F2D* integralImg, + I2D* range) +{ + int nr, nc, k; + int half_win_sz, rows, cols; + + nr = Ileft->height; + nc = Ileft->width; + half_win_sz=win_sz/2; + + + fResetArray(minSAD, nr, nc, 255.0*255.0); + iResetArray(retDisp, nr, nc,max_shift); + iResetArray(halfWin, 1,2,half_win_sz); + + rows = IleftPadded->height; + cols = IleftPadded->width; + fResetArray(SAD, rows, cols,255); + fResetArray(integralImg, rows, cols,0); + //fResetArray(retSAD,rows-win_sz, cols-win_sz, 0); + iResetArray(Iright_moved, rows, cols, 0); + + for( k=0; k +#include +#include "disparity.h" + +void integralImage2D2D(F2D* SAD, F2D* integralImg) +{ + int nr, nc, i, j; + + nr = SAD->height; + nc = SAD->width; + + for(i=0; i +#include +#include "disparity.h" + +I2D* padarray2(I2D* inMat, I2D* borderMat) +{ + int rows, cols, bRows, bCols, newRows, newCols; + I2D *paddedArray; + int i, j; + + rows = inMat->height; + cols = inMat->width; + + bRows = borderMat->data[0]; + bCols = borderMat->data[1]; + + newRows = rows + bRows*2; + newCols = cols + bCols*2; + + paddedArray = iSetArray(newRows, newCols, 0); + + for(i=0; i +#include +#include +#include "disparity.h" + +void padarray4(I2D* inMat, I2D* borderMat, int dir, I2D* paddedArray) +{ + int rows, cols, bRows, bCols, newRows, newCols; + int i, j; + int adir; + + adir = abs(dir); + rows = inMat->height; + cols = inMat->width; + + bRows = borderMat->data[0]; + bCols = borderMat->data[1]; + + newRows = rows + bRows; + newCols = cols + bCols; + + if(dir ==1) + { + for(i=0; i +#include +#include "disparity.h" +#include +#include "extra.h" +#define DISPARITY_MEM 1<<24 +int main(int argc, char* argv[]) +{ + SET_UP + mallopt(M_TOP_PAD, DISPARITY_MEM); + mallopt(M_MMAP_MAX, 0); + int rows = 32; + int cols = 32; + I2D *imleft, *imright; + volatile I2D* retDisparity; + I2D *IrightPadded, *IleftPadded, *Iright_moved; + I2D *retDisp, *halfWin; + I2D *range; + F2D *retSAD, *minSAD, *SAD, *integralImg; + unsigned int *start, *endC, *elapsed; + + int i, j; + char im1[100], im2[100], timFile[100]; + int WIN_SZ=8, SHIFT=64; + FILE* fp; + + printf("Image 1: "); + scanf("%s", im1); + printf("Image 2: "); + scanf("%s", im2); +#ifdef CHECK + char checkFile[100] = "./expected_C.txt"; +#endif + imleft = readImage(im1); + imright = readImage(im2); + + rows = imleft->height; + cols = imleft->width; + +#ifdef test + WIN_SZ = 2; + SHIFT = 1; +#endif +#ifdef sim_fast + WIN_SZ = 4; + SHIFT = 4; +#endif +#ifdef sim + WIN_SZ = 4; + SHIFT = 8; +#endif + + + int nr, nc, k; + int half_win_sz; + nr = imleft->height; + nc = imleft->width; + half_win_sz = WIN_SZ / 2; + + minSAD = fSetArray(nr, nc, 255.0*255.0); + retDisp = iSetArray(nr, nc, SHIFT); + halfWin = iSetArray(1,2,half_win_sz); + + + if(WIN_SZ > 1) + { + IleftPadded = padarray2(imleft, halfWin); + IrightPadded = padarray2(imright, halfWin); + } + else + { + IleftPadded = imleft; + IrightPadded = imright; + } + + int paddedRows, paddedCols; + paddedRows = IleftPadded->height; + paddedCols = IleftPadded->width; + SAD = fSetArray(paddedRows, paddedCols,255); + integralImg = fSetArray(paddedRows, paddedCols,0); + retSAD = fMallocHandle(paddedRows- WIN_SZ, paddedCols - WIN_SZ); + Iright_moved = iSetArray(paddedRows, paddedCols, 0); + + range = iMallocHandle(1, 2); + printf("starting..\n"); + for_each_job{ + retDisparity = getDisparity(imleft, imright, WIN_SZ, SHIFT, + minSAD, retDisp, halfWin, + IrightPadded, IleftPadded, Iright_moved, + retSAD, SAD, integralImg, + range); + } + printf("ending\n"); + +#ifdef CHECK + /** Self checking - use expected.txt from data directory **/ + { + int tol, ret=0; + tol = 2; +#ifdef GENERATE_OUTPUT + writeMatrix(retDisparity, argv[1]); +#endif + ret = selfCheck(retDisparity, checkFile, tol); + if (ret == -1) + printf("Error in Disparity Map\n"); + } + /** Self checking done **/ +#endif + + //end of benchmark + fFreeHandle(minSAD); + fFreeHandle(SAD); + fFreeHandle(integralImg); + iFreeHandle(IrightPadded); + iFreeHandle(IleftPadded); + iFreeHandle(Iright_moved); + fFreeHandle(retSAD); + iFreeHandle(imleft); + iFreeHandle(imright); + iFreeHandle(retDisparity); + iFreeHandle(halfWin); + iFreeHandle(range); + free(start); + free(endC); + free(elapsed); + WRITE_TO_FILE; + return 0; +} -- cgit v1.2.2