package wcet.dsvmfp;
import com.jopdesign.sys.Const;
import com.jopdesign.sys.Native;
import wcet.dsvmfp.model.smo.classification.*;
import wcet.dsvmfp.model.smo.kernel.*;
public class TestSMO {
static int m = 60;
static int data_fp[][] = new int[m][];
static int y_fp[] = new int[m];
static int testdata_fp[][] = new int[m][];
static int testlabel_fp[] = new int[m];
// 0 belongs to positive
static int errcnt = 0;
static int time = 0;
// Run this to see the whole program run
// Notice that only the deplyyRT() method is RT enabled
public static void goAll(){
init();
deployRT();
report();
}
// non-real time inialization of SVM
public static void init() {
// DATA
// int[][] traindata_fp = { {FP.intToFp(1)}, {FP.intToFp(3)},
// {FP.intToFp(5)} };
// int[] trainy_fp = { FP.intToFp(-1), FP.intToFp(+1), FP.intToFp(+1) };
// int[] testdata_fp = { FP.intToFp(3)};//, FP.intToFp(0) };
// new SMOBinaryClassifierFP();
// Training instances
// Remember to make same as in dsvm.test.smo.ServerData
// Change these files for the four setups
TrainingData2.assign(data_fp, y_fp);
TestData2.assign(testdata_fp,testlabel_fp);
// dsvmfp.TrainingData2.assign(data_fp, y_fp);
// dsvmfp.TestData2.assign(testdata_fp,testlabel_fp);
// dsvmfp.TrainingData3.assign(data_fp, y_fp);
// dsvmfp.TestData3.assign(testdata_fp,testlabel_fp);
// dsvmfp.TrainingData4.assign(data_fp, y_fp);
// dsvmfp.TestData4.assign(testdata_fp,testlabel_fp);
SMOBinaryClassifierFP.setData_fp(data_fp);
SMOBinaryClassifierFP.setY_fp(y_fp);
// Train the model prior to deployment
SMOBinaryClassifierFP.mainRoutine();
}
// Real-time part of SVM
// This is the method that is to be called and analyzed from a WCA tool
public static void deployRT(){
for (int i = 0; i < m; i++) { // @WCA loop=60
int starttime = Native.rd(Const.IO_US_CNT);
int t = Native.rd(Const.IO_CNT);
//System.out.println("---ALIVE1---" + i);
//int smores = SMOBinaryClassifierFP.getFunctionOutputTestPointFP(testdata_fp[i]);;
int smores = SMOBinaryClassifierFP.getFunctionOutputTestPointFP(testdata_fp[i]);;
//System.out.println("---ALIVE2---" + i);
t = Native.rd(Const.IO_CNT) - t;
time += Native.rd(Const.IO_US_CNT)-starttime;
// System.out.print("classification time cycles:");
// System.out.println(t);
if(smores<0 && testlabel_fp[i]>=0){
errcnt++;
}
else if(smores >= 0 && testlabel_fp[i]<0){
errcnt++;
}
//System.out.println(FP.fpToStr(SMOBinaryClassifierFP.getFunctionOutputTestPointFP(testdata_fp)));
}
}
// Show testual output from the system (non-real time)
public static void report()
{
System.out.println("---TESTING---");
System.out.print("Error cnt:");
System.out.println(errcnt);
System.out.print("#sv");
System.out.println(SMOBinaryClassifierFP.getSV());
System.out.print("total time (classifying):");
System.out.print(time);
System.out.println(" us");
System.out.print("per observation time (classifying):");
System.out.print(time/m);
System.out.println(" us");
}
}