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/svm/src/c/script_svm.c | 171 +++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 SD-VBS/benchmarks/svm/src/c/script_svm.c (limited to 'SD-VBS/benchmarks/svm/src/c/script_svm.c') diff --git a/SD-VBS/benchmarks/svm/src/c/script_svm.c b/SD-VBS/benchmarks/svm/src/c/script_svm.c new file mode 100644 index 0000000..62a264d --- /dev/null +++ b/SD-VBS/benchmarks/svm/src/c/script_svm.c @@ -0,0 +1,171 @@ +/******************************** +Author: Sravanthi Kota Venkata +********************************/ + +#include +#include +#include "svm.h" +#include +#include "extra.h" +#define SVM_MEM 1<<24 +int main(int argc, char* argv[]) +{ + SET_UP + mallopt(M_TOP_PAD, SVM_MEM); + mallopt(M_MMAP_MAX, 0); + int iter, N, Ntst, i, j, k, n; + F2D* trn1, *tst1, *trn2, *tst2, *Yoffset; + alphaRet* alpha; + F2D *a_result, *result; + F2D *s; + F2D *b_result; + F2D *Xtst, *Ytst; + char im1[256]; + int dim = 256; + + N = 100; + Ntst = 100; + iter = 10; + + #ifdef test + N = 4; + Ntst = 4; + iter = 2; + #endif + + #ifdef sim_fast + N = 20; + Ntst = 20; + iter = 2; + #endif + + #ifdef sim + N = 16; + Ntst = 16; + iter = 8; + #endif + + #ifdef sqcif + N = 60; + Ntst = 60; + iter = 6; + #endif + + #ifdef qcif + N = 72; + Ntst = 72; + iter = 8; + #endif + + #ifdef vga + N = 450; + Ntst = 450; + iter = 15; + #endif + + #ifdef wuxga + N = 1000; + Ntst = 1000; + iter = 20; + #endif + + + printf("trn file 1: "); + scanf("%s", im1); + trn1 = readFile(im1); + + printf("trn file 2: "); + scanf("%s", im1); + trn2 = readFile(im1); + + printf("tst file 1: "); + scanf("%s", im1); + tst1 = readFile(im1); + + printf("tst file 2: "); + scanf("%s", im1); + tst2 = readFile(im1); + + printf("start.\n"); + for_each_job{ + alpha = getAlphaFromTrainSet(N, trn1, trn2, iter); + a_result = alpha->a_result; + b_result = alpha->b_result; + Yoffset = fSetArray(iter, N, 0); + + Xtst = usps_read_partial(tst1, tst2, -1, 1, Ntst/iter, iter); + Ytst = usps_read_partial(tst1, tst2, -1, 0, Ntst/iter, iter); + + for(i=0; i 0) + { + F2D *Xtemp, *XtstTemp, *X; + X = alpha->X; + Xtemp = fDeepCopyRange(X,j,1,0,X->width); + XtstTemp = fDeepCopyRange(Xtst, n,1,0,Xtst->width); + asubsref(s,i) = asubsref(s,i) + subsref(a_result,i,j) * subsref(Yoffset,i,j) * polynomial(3,Xtemp,XtstTemp, dim); + fFreeHandle(Xtemp); + fFreeHandle(XtstTemp); + } + } + asubsref(s,i) = asubsref(s,i) - asubsref(b_result,i); + if( asubsref(s,i) > maxs) + maxs = asubsref(s,i); + } + + fFreeHandle(s); + asubsref(result,n) = maxs; + } + } + printf("end..\n"); +#ifdef CHECK + /** Self checking - use expected.txt from data directory **/ + { + int ret=0; + float tol = 0.5; +#ifdef GENERATE_OUTPUT + fWriteMatrix(result, argv[1]); +#endif + ret = fSelfCheck(result, "expected_C.txt", tol); + if (ret == -1) + printf("Error in SVM\n"); + } + /** Self checking done **/ +#endif + + fFreeHandle(trn1); + 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; +} + + + -- cgit v1.2.2