forked from yuemingl/SymJava
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestCompile.java
More file actions
104 lines (92 loc) · 2.33 KB
/
TestCompile.java
File metadata and controls
104 lines (92 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package lambdacloud.test;
import static symjava.symbolic.Symbol.*;
import lambdacloud.core.lang.LCArray;
import lambdacloud.core.lang.LCDoubleArray;
import lambdacloud.core.lang.LCReturn;
import lambdacloud.core.lang.LCStatements;
import symjava.bytecode.BytecodeBatchFunc;
import symjava.bytecode.BytecodeVecFunc;
import symjava.symbolic.Expr;
import symjava.symbolic.Vector;
import symjava.symbolic.utils.JIT;
public class TestCompile {
/**
* test comiple, compileVec, compileBatch
* @param args
*/
public static void main(String[] args) {
testCompileBatchFunc();
testCompileVecFunc1();
testCompileVecFunc2();
}
public static void testCompileBatchFunc() {
BytecodeBatchFunc func = CompileUtils.compileBatchFunc("test1", new Expr[]
{
z,
y*y,
x+y+z
}, x,y,z);
double[] outAry = new double[3];
func.apply(outAry, 0, new double[]{1,2,3});
for(double d : outAry) {
System.out.println(d);
}
}
/**
* Use Jama with LCReturn
*/
public static void testCompileVecFunc1() {
int dim = 3;
Vector a = new Vector("a",dim);
Vector b = new Vector("b",dim);
BytecodeVecFunc func = CompileUtils.compileVecFunc(new LCReturn(a+b),a,b);
double[] outAry = new double[dim];
double[][] args = {
new double[]{1,2,3},
new double[]{4,5,6}
};
func.apply(outAry, 0, args);
for(double d : outAry) {
System.out.println(d);
}
}
/**
* Use Jama with output
*/
public static void testCompileVecFunc2() {
int dim = 3;
LCStatements lcs = new LCStatements();
LCArray x = new LCDoubleArray("x");
LCArray y = new LCDoubleArray("y");
LCArray output = new LCDoubleArray("outAry1");
for(int i=0; i<dim; i++) {
lcs.append( output[i].assign(x[i] + y[i]) );
}
BytecodeVecFunc func = CompileUtils.compileVecFunc(lcs, output, x,y);
double[] outAry = new double[dim];
double[][] args = {
new double[]{1,2,3},
new double[]{4,5,6}
};
func.apply(outAry, 0, args);
for(double d : outAry) {
System.out.println(d);
}
}
/**
* Use JIT (use loop)
*/
public static void testCompileVecFunc3() {
BytecodeVecFunc func = JIT.compileVecFunc(new Expr[]{x,y}, x+y);
int dim = 3;
double[][] args = {
new double[]{1,2,3},
new double[]{4,5,6}
};
double[] outAry = new double[dim];
func.apply(outAry, 0, args);
for(double d : outAry) {
System.out.println(d);
}
}
}