package org.encog.examples.neural.opencl; import org.encog.Encog; import org.encog.engine.concurrency.calc.ConcurrentCalculate; import org.encog.engine.data.EngineIndexableSet; import org.encog.engine.network.flat.FlatNetwork; import org.encog.engine.util.Stopwatch; import org.encog.neural.data.NeuralDataSet; import org.encog.neural.networks.BasicNetwork; import org.encog.util.benchmark.RandomTrainingFactory; import org.encog.util.simple.EncogUtility; public class BenchmarkErrorCalc { public static final int TRAINING_SIZE = 100000; public static final int INPUT_SIZE = 300; public static final int IDEAL_SIZE = 1; public static final int HIDDEN1_SIZE = 300; public static final int HIDDEN2_SIZE = 300; public static void main(String[] args) { ConcurrentCalculate calc = ConcurrentCalculate.getInstance(); EngineIndexableSet training = RandomTrainingFactory.generate(1000, TRAINING_SIZE, INPUT_SIZE, IDEAL_SIZE, -1, 1); BasicNetwork network = EncogUtility.simpleFeedForward(training .getInputSize(), HIDDEN1_SIZE, HIDDEN2_SIZE, training.getIdealSize(), true); network.reset(); FlatNetwork flat = network.getStructure().getFlat(); calc.setTrainingData(training); calc.setNetwork(flat); Stopwatch sw1 = new Stopwatch(); sw1.start(); double e1 = calc.calculateError(); sw1.stop(); Stopwatch sw2 = new Stopwatch(); Encog.getInstance().initCL(); calc.initCL(); sw2.start(); double e2 = calc.calculateError(); sw2.stop(); System.out.println("CPU-Only Error:" + e1 + ",time=" + sw1.getElapsedMilliseconds()); System.out.println("CPU&GPU Error:" + e2 + ",time=" + sw2.getElapsedMilliseconds()); } }