summaryrefslogtreecommitdiffstats
path: root/SD-VBS/benchmarks/svm/src/c/script_svm.c
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/c/script_svm.c
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/c/script_svm.c')
-rw-r--r--SD-VBS/benchmarks/svm/src/c/script_svm.c171
1 files changed, 171 insertions, 0 deletions
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 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "svm.h"
8#include <malloc.h>
9#include "extra.h"
10#define SVM_MEM 1<<24
11int main(int argc, char* argv[])
12{
13 SET_UP
14 mallopt(M_TOP_PAD, SVM_MEM);
15 mallopt(M_MMAP_MAX, 0);
16 int iter, N, Ntst, i, j, k, n;
17 F2D* trn1, *tst1, *trn2, *tst2, *Yoffset;
18 alphaRet* alpha;
19 F2D *a_result, *result;
20 F2D *s;
21 F2D *b_result;
22 F2D *Xtst, *Ytst;
23 char im1[256];
24 int dim = 256;
25
26 N = 100;
27 Ntst = 100;
28 iter = 10;
29
30 #ifdef test
31 N = 4;
32 Ntst = 4;
33 iter = 2;
34 #endif
35
36 #ifdef sim_fast
37 N = 20;
38 Ntst = 20;
39 iter = 2;
40 #endif
41
42 #ifdef sim
43 N = 16;
44 Ntst = 16;
45 iter = 8;
46 #endif
47
48 #ifdef sqcif
49 N = 60;
50 Ntst = 60;
51 iter = 6;
52 #endif
53
54 #ifdef qcif
55 N = 72;
56 Ntst = 72;
57 iter = 8;
58 #endif
59
60 #ifdef vga
61 N = 450;
62 Ntst = 450;
63 iter = 15;
64 #endif
65
66 #ifdef wuxga
67 N = 1000;
68 Ntst = 1000;
69 iter = 20;
70 #endif
71
72
73 printf("trn file 1: ");
74 scanf("%s", im1);
75 trn1 = readFile(im1);
76
77 printf("trn file 2: ");
78 scanf("%s", im1);
79 trn2 = readFile(im1);
80
81 printf("tst file 1: ");
82 scanf("%s", im1);
83 tst1 = readFile(im1);
84
85 printf("tst file 2: ");
86 scanf("%s", im1);
87 tst2 = readFile(im1);
88
89 printf("start.\n");
90 for_each_job{
91 alpha = getAlphaFromTrainSet(N, trn1, trn2, iter);
92 a_result = alpha->a_result;
93 b_result = alpha->b_result;
94 Yoffset = fSetArray(iter, N, 0);
95
96 Xtst = usps_read_partial(tst1, tst2, -1, 1, Ntst/iter, iter);
97 Ytst = usps_read_partial(tst1, tst2, -1, 0, Ntst/iter, iter);
98
99 for(i=0; i<iter; i++)
100 {
101 F2D *temp;
102 temp = usps_read_partial(trn1, trn2, i, 0, N/iter, iter);
103 for(j=0; j<N; j++)
104 subsref(Yoffset,i,j) = asubsref(temp,j);
105 fFreeHandle(temp);
106 }
107
108
109 result = fSetArray(Ntst,1,0);
110 for( n=0; n<Ntst; n++)
111 {
112 float maxs=0;
113 s=fSetArray(iter,1,0);
114 for( i=0; i<iter; i++)
115 {
116 for (j=0; j<N; j++)
117 {
118 if (subsref(a_result,i,j) > 0)
119 {
120 F2D *Xtemp, *XtstTemp, *X;
121 X = alpha->X;
122 Xtemp = fDeepCopyRange(X,j,1,0,X->width);
123 XtstTemp = fDeepCopyRange(Xtst, n,1,0,Xtst->width);
124 asubsref(s,i) = asubsref(s,i) + subsref(a_result,i,j) * subsref(Yoffset,i,j) * polynomial(3,Xtemp,XtstTemp, dim);
125 fFreeHandle(Xtemp);
126 fFreeHandle(XtstTemp);
127 }
128 }
129 asubsref(s,i) = asubsref(s,i) - asubsref(b_result,i);
130 if( asubsref(s,i) > maxs)
131 maxs = asubsref(s,i);
132 }
133
134 fFreeHandle(s);
135 asubsref(result,n) = maxs;
136 }
137 }
138 printf("end..\n");
139#ifdef CHECK
140 /** Self checking - use expected.txt from data directory **/
141 {
142 int ret=0;
143 float tol = 0.5;
144#ifdef GENERATE_OUTPUT
145 fWriteMatrix(result, argv[1]);
146#endif
147 ret = fSelfCheck(result, "expected_C.txt", tol);
148 if (ret == -1)
149 printf("Error in SVM\n");
150 }
151 /** Self checking done **/
152#endif
153
154 fFreeHandle(trn1);
155 fFreeHandle(tst1);
156 fFreeHandle(trn2);
157 fFreeHandle(tst2);
158 fFreeHandle(Yoffset);
159 fFreeHandle(result);
160 fFreeHandle(alpha->a_result);
161 fFreeHandle(alpha->b_result);
162 fFreeHandle(alpha->X);
163 free(alpha);
164 fFreeHandle(Xtst);
165 fFreeHandle(Ytst);
166 WRITE_TO_FILE
167 return 0;
168}
169
170
171