summaryrefslogtreecommitdiffstats
path: root/SD-VBS/benchmarks/svm/src
diff options
context:
space:
mode:
authorLeo Chan <leochanj@live.unc.edu>2020-10-22 01:53:21 -0400
committerJoshua Bakita <jbakita@cs.unc.edu>2020-10-22 01:56:35 -0400
commitd17b33131c14864bd1eae275f49a3f148e21cf29 (patch)
tree0d8f77922e8d193cb0f6edab83018f057aad64a0 /SD-VBS/benchmarks/svm/src
parent601ed25a4c5b66cb75315832c15613a727db2c26 (diff)
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.
Diffstat (limited to 'SD-VBS/benchmarks/svm/src')
-rw-r--r--SD-VBS/benchmarks/svm/src/c/cal_learned_func.c42
-rw-r--r--SD-VBS/benchmarks/svm/src/c/examineExample.c67
-rw-r--r--SD-VBS/benchmarks/svm/src/c/getAlphaFromTrainSet.c98
-rw-r--r--SD-VBS/benchmarks/svm/src/c/polynomial.c42
-rw-r--r--SD-VBS/benchmarks/svm/src/c/script_svm.c171
-rw-r--r--SD-VBS/benchmarks/svm/src/c/svm.h38
-rw-r--r--SD-VBS/benchmarks/svm/src/c/takeStep.c188
-rw-r--r--SD-VBS/benchmarks/svm/src/c/usps_read_partial.c85
8 files changed, 731 insertions, 0 deletions
diff --git a/SD-VBS/benchmarks/svm/src/c/cal_learned_func.c b/SD-VBS/benchmarks/svm/src/c/cal_learned_func.c
new file mode 100644
index 0000000..79fdd68
--- /dev/null
+++ b/SD-VBS/benchmarks/svm/src/c/cal_learned_func.c
@@ -0,0 +1,42 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "svm.h"
6
7float cal_learned_func(int k, F2D* a, float* b, int N, F2D* Y, F2D* X, int dim)
8{
9 float s, ret;
10 int i, j, m, n;
11 F2D *temp, *temp1;
12
13 s=0;
14 for(i=0; i<N; i++)
15 {
16 if( subsref(a,i,0) > 0)
17 {
18 temp = fMallocHandle(1, X->width);
19 temp1 = fMallocHandle(1, X->width);
20
21 for(m=0; m<X->width; m++)
22 {
23 asubsref(temp,m) = subsref(X,i,m);
24 asubsref(temp1,m) = subsref(X,k,m);
25 }
26
27 s += asubsref(a,i) * asubsref(Y,i) * polynomial(3, temp, temp1, dim);
28
29 free(temp);
30 free(temp1);
31 }
32 }
33
34 s = s- arrayref(b,0);
35 ret = s;
36
37 return ret;
38}
39
40
41
42
diff --git a/SD-VBS/benchmarks/svm/src/c/examineExample.c b/SD-VBS/benchmarks/svm/src/c/examineExample.c
new file mode 100644
index 0000000..5335f35
--- /dev/null
+++ b/SD-VBS/benchmarks/svm/src/c/examineExample.c
@@ -0,0 +1,67 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "svm.h"
6
7int examineExample(int i, F2D* a, float* b, float C, F2D* e, F2D* X, F2D* Y, float tolerance, int N, float eps, int dim)
8{
9 int ret, j, k, m, n;
10 float E, r1, randVal;
11 float maxDiff, temp;
12
13 if( ( asubsref(a,i) > 0) && ( asubsref(a,i) <C) )
14 E = asubsref(e,i);
15 else
16 E = cal_learned_func(i, a, b, N, Y, X, dim) - asubsref(Y,i);
17
18 r1 = subsref(Y,i,0) * E;
19 if( ((r1 < (-1*tolerance)) && ( asubsref(a,i) < C)) || ((r1 >tolerance) && ( asubsref(a,i) > 0)) )
20 {
21 maxDiff = 0;
22 j = i;
23
24 for(k=0; k<N; k++)
25 {
26 if( ( asubsref(a,k) > 0) && ( asubsref(a,k) < C) )
27 {
28 temp = fabsf( E - asubsref(e,k));
29 if (temp > maxDiff)
30 j = k;
31 }
32 }
33
34 if ( i!=j)
35 {
36 ret = takeStep(i, j, a, C, e, Y, X, eps, b, N, dim);
37 if(ret == 1)
38 return ret;
39 }
40
41 randVal = 1.0;
42 for( k= (randVal*(N-2)); k<N; k++)
43 {
44 if( ( asubsref(a,k) > 0) && ( asubsref(a,k) <C) )
45 {
46 ret = takeStep(i, k, a, C, e, Y, X, eps, b, N, dim);
47 if (ret == 1)
48 return ret;
49 }
50 }
51
52 for(k=0; k<N; k++)
53 {
54 ret = takeStep(i, k, a, C, e, Y, X, eps, b, N, dim);
55 if(ret == 1)
56 return ret;
57 }
58 }
59
60
61 ret = 0;
62 return ret;
63}
64
65
66
67
diff --git a/SD-VBS/benchmarks/svm/src/c/getAlphaFromTrainSet.c b/SD-VBS/benchmarks/svm/src/c/getAlphaFromTrainSet.c
new file mode 100644
index 0000000..681f2c6
--- /dev/null
+++ b/SD-VBS/benchmarks/svm/src/c/getAlphaFromTrainSet.c
@@ -0,0 +1,98 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "svm.h"
6
7alphaRet* getAlphaFromTrainSet(int N, F2D* trn1, F2D* trn2, int iterations)
8{
9 float tolerance, C, eps, *b;
10 F2D *a_result, *b_result;
11 int NumChanged, r, ExamineAll, cnt, d, dim, ret, iter, i;
12 F2D *X, *Y;
13 F2D *a, *e;
14
15 b = malloc(sizeof(float));
16 alphaRet* alpha;
17 alpha = (alphaRet*)malloc(sizeof(alphaRet));
18 tolerance = 0.001;
19 C = 0.05;
20 d = -1;
21 dim = 256;
22 eps = 0.001;
23 a_result = fSetArray(iterations, N, 0);
24 b_result = fSetArray(iterations, 1, 0);
25 ret = 0;
26
27 X = usps_read_partial( trn1, trn2, 0, 1, (N/iterations), iterations);
28
29 for(iter=0; iter<iterations; iter++)
30 {
31 Y = usps_read_partial( trn1, trn2, iter, 0, N/iterations, iterations);
32
33 a = fSetArray(N, 1, 0);
34 arrayref(b,0) = 0; /** check if ptr **/
35 e = fSetArray(N, 1, 0);
36 ExamineAll = 1;
37 cnt = 0;
38 NumChanged = 0;
39
40 while(NumChanged>0 || ExamineAll == 1)
41 {
42 cnt = cnt + 1;
43 NumChanged = 0;
44 if(ExamineAll == 1)
45 {
46 for(i=0; i<N; i++)
47 {
48 ret = examineExample(i, a, b, C, e, X, Y, tolerance, N, eps, dim);
49 NumChanged = NumChanged + ret;
50 }
51 }
52 else
53 {
54 for(i=0; i<N; i++)
55 {
56 if( asubsref(a,i) > 0 && asubsref(a,i) <C )
57 {
58 ret = examineExample(i, a, b, C, e, X, Y, tolerance, N, eps, dim);
59 NumChanged = NumChanged + ret;
60 }
61 }
62 }
63 if(ExamineAll == 1)
64 ExamineAll = 0;
65 else if(NumChanged == 0)
66 ExamineAll = 1;
67 }
68