package net.seninp.jmotif.sax.tinker;
import java.util.Arrays;
import net.seninp.jmotif.sax.NumerosityReductionStrategy;
import net.seninp.jmotif.sax.SAXProcessor;
import net.seninp.jmotif.sax.TSProcessor;
import net.seninp.jmotif.sax.alphabet.NormalAlphabet;
import net.seninp.jmotif.sax.datastructure.SAXRecords;
import net.seninp.jmotif.sax.parallel.ParallelSAXImplementation;
/**
* This runs the performance evaluation code - we are looking on the speedup.
*
* @author psenin
*
*/
public final class ParallelPerformanceEvaluation {
private static final Integer NRUNS = 3;
private static final Integer MIN_CPUS = 2;
private static final Integer MAX_CPUS = 16;
private static final double N_THRESHOLD = 0.001d;
private static final int[] WINDOWS = { 100, 200, 300 };
private static final int[] PAAS = { 5, 9, 13 };
private static final int[] ALPHABETS = { 3, 5, 7 };
private static final String[] NRS = { "NONE", "EXACT", "MINDIST" };
/**
* Runs the evaluation.
*
* @param args some accepted, see the code.
* @throws Exception thrown if an error occured.
*/
public static void main(String[] args) throws Exception {
NormalAlphabet na = new NormalAlphabet();
SAXProcessor sp = new SAXProcessor();
String dataFileName = args[0];
System.out.println("data file: " + dataFileName);
double[] ts = TSProcessor.readFileColumn(dataFileName, 0, 0);
System.out.println("data size: " + ts.length);
System.out.println("SAX parameters:\n sliding window sizes: " + Arrays.toString(WINDOWS)
+ "\n PAA sizes: " + Arrays.toString(PAAS) + "\n alphabet sizes: "
+ Arrays.toString(ALPHABETS) + "\n NR strategis: " + Arrays.toString(NRS));
System.out.println(
"Performing " + NRUNS + " SAX conversion runs for each algorithm implementation ... ");
// conventional
//
long tstamp1 = System.currentTimeMillis();
for (int slidingWindowSize : WINDOWS) {
for (int paaSize : PAAS) {
for (int alphabetSize : ALPHABETS) {
for (String nrStrategy : NRS) {
for (int i = 0; i < NRUNS; i++) {
@SuppressWarnings("unused")
SAXRecords sequentialRes = sp.ts2saxViaWindow(ts, slidingWindowSize, paaSize,
na.getCuts(alphabetSize), NumerosityReductionStrategy.fromString(nrStrategy),
N_THRESHOLD);
}
}
}
}
}
long tstamp2 = System.currentTimeMillis();
System.out.println("single thread conversion: " + String.valueOf(tstamp2 - tstamp1) + ", "
+ SAXProcessor.timeToString(tstamp1, tstamp2));
// parallel
for (int threadsNum = MIN_CPUS; threadsNum < MAX_CPUS; threadsNum++) {
tstamp1 = System.currentTimeMillis();
for (int slidingWindowSize : WINDOWS) {
for (int paaSize : PAAS) {
for (int alphabetSize : ALPHABETS) {
for (String nrStrategy : NRS) {
for (int i = 0; i < NRUNS; i++) {
ParallelSAXImplementation ps = new ParallelSAXImplementation();
@SuppressWarnings("unused")
SAXRecords parallelRes = ps.process(ts, threadsNum, slidingWindowSize, paaSize,
alphabetSize, NumerosityReductionStrategy.fromString(nrStrategy), N_THRESHOLD);
}
}
}
}
}
tstamp2 = System.currentTimeMillis();
System.out.println("parallel conversion using " + threadsNum + " threads: "
+ String.valueOf(tstamp2 - tstamp1) + ", " + SAXProcessor.timeToString(tstamp1, tstamp2));
}
}
}