summaryrefslogtreecommitdiffstats
path: root/SD-VBS/benchmarks/stitch/src/c/dist2.c
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/benchmarks/stitch/src/c/dist2.c')
-rw-r--r--SD-VBS/benchmarks/stitch/src/c/dist2.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/SD-VBS/benchmarks/stitch/src/c/dist2.c b/SD-VBS/benchmarks/stitch/src/c/dist2.c
new file mode 100644
index 0000000..d76fcb2
--- /dev/null
+++ b/SD-VBS/benchmarks/stitch/src/c/dist2.c
@@ -0,0 +1,76 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "stitch.h"
6
7F2D* dist2(I2D* x, F2D* c)
8{
9 int ndata, dimx, ncentres, dimc, i, j, k;
10 F2D *n2, *t1, *t2;
11 float temp;
12 F2D *s1, *s2, *ctrans;
13 F2D *mult1, *mult2, *mult3;
14
15 ndata = x->height;
16 dimx = x->width;
17
18 ncentres = c->height;
19 dimc = c->width;
20
21 if(dimx != dimc)
22 return NULL;
23
24 s1 = fSetArray(ncentres, 1, 1);
25 s2 = fSetArray(ndata, 1, 1);
26 t1 = fMallocHandle(1, x->height);
27
28 for(j=0; j<t1->width; j++)
29 {
30 temp = 0;
31 for(i=0; i<t1->height; i++)
32 {
33 temp += subsref(x,j,i) * subsref(x,j,i);
34 }
35
36 asubsref(t1,j) = temp;
37 }
38
39 mult1 = fMtimes(s1, t1);
40 t2 = fMallocHandle(1, c->height);
41
42 for(j=0; j<t2->width; j++)
43 {
44 temp = 0;
45 for(i=0; i<t2->height; i++)
46 {
47 temp += subsref(c,j,i) * subsref(c,j,i);
48 }
49
50 asubsref(t2,j) = temp;
51 }
52
53 mult2 = fMtimes(s2, t2);
54 ctrans = fTranspose(c);
55 mult3 = ifMtimes(x, ctrans);
56
57 for(i=0; i<(mult3->height * mult3->width); i++)
58 asubsref(mult3,i) = asubsref(mult3,i) * 2;
59
60 free(t1);
61 free(t2);
62 free(s1);
63 free(s2);
64 free(ctrans);
65
66 n2 = fMallocHandle(ndata, ncentres);
67 for(i=0; i<(ndata*ncentres); i++)
68 asubsref(n2,i) = asubsref(mult1,i) + asubsref(mult2,i) - asubsref(mult3,i);
69
70 free(mult1);
71 free(mult2);
72 free(mult3);
73
74 return n2;
75
76}