Package au.csiro.snorocket.core.benchmark

Source Code of au.csiro.snorocket.core.benchmark.Benchmark

/**
* Copyright CSIRO Australian e-Health Research Centre (http://aehrc.com).
* All rights reserved. Use is subject to license terms and conditions.
*/
package au.csiro.snorocket.core.benchmark;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;

import au.csiro.ontology.Ontology;
import au.csiro.ontology.model.Axiom;
import au.csiro.ontology.importer.rf1.RF1Importer;
import au.csiro.ontology.util.NullProgressMonitor;
import au.csiro.snorocket.core.CoreFactory;
import au.csiro.snorocket.core.IFactory;
import au.csiro.snorocket.core.NormalisedOntology;

/**
* Class used to measure the speed of the Snorocket classifier.
*
* @author Alejandro Metke
*
*/
public class Benchmark {

    final static String OUT_DIR = "src/site/resources/";

    public static final String VERSION = "2.2.0";

    /**
     * Runs the benchmark using an RF1 file as input.
     *
     * @param concepts
     *            The concepts file.
     * @param relationships
     *            The stated relationships file.
     */
    public Stats runBechmarkRF1() {
        Stats res = new Stats();
       
        String version = "20110731";
       
        // Classify ontology from stated form
        System.out.println("Classifying ontology");
        long start = System.currentTimeMillis();
        IFactory factory = new CoreFactory();
        NormalisedOntology no = new NormalisedOntology(factory);
        System.out.println("Importing axioms");
       
        RF1Importer imp = new RF1Importer(
                this.getClass().getResourceAsStream(
                        "/sct1_Concepts_Core_INT_20110731.txt"),
                this.getClass().getResourceAsStream(
                        "/res1_StatedRelationships_Core_INT_20110731.txt"),
                version);
       
        Iterator<Ontology> it = imp.getOntologyVersions(new NullProgressMonitor());
       
        Ontology ont = null;
        while(it.hasNext()) {
            Ontology o = it.next();
            if(o.getVersion().equals("snomed")) {
                ont = o;
                break;
            }
        }

        // We can do this because we know there is only one ontology (RF1 does
        // not support multiple versions)
        if(ont == null) {
            System.out.println("Could not find version "+version+
                    " in input files");
        }
        res.setAxiomTransformationTimeMs(System.currentTimeMillis() - start);
        start = System.currentTimeMillis();
        System.out.println("Loading axioms");
        no.loadAxioms(new HashSet<Axiom>((Collection<? extends Axiom>) ont.getStatedAxioms()));
        res.setAxiomLoadingTimeMs(System.currentTimeMillis() - start);
        start = System.currentTimeMillis();
        System.out.println("Running classification");
        no.classify();
        res.setClassificationTimeMs(System.currentTimeMillis() - start);
        start = System.currentTimeMillis();
        System.out.println("Computing taxonomy");
        no.buildTaxonomy();
        res.setTaxonomyBuildingTimeMs(System.currentTimeMillis() - start);
        System.out.println("Done");

        return res;
    }
   
    public static void main(String[] args) {
        String type = args[0];

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH_mm_ss");

        if ("RF1".equals(type)) {
            int numRuns = Integer.parseInt(args[1]);
            String outputFile = OUT_DIR + "benchmark_" + VERSION + "_"
                    + sdf.format(Calendar.getInstance().getTime()) + ".csv";

            StringBuilder sb = new StringBuilder();
            sb.append("Date,Threads,VM Parameters,Snomed Version," +
                "Snorocket Version,Axiom Transformation Time (ms)," +
                "Axiom Loading Time (ms),Classification Time(ms)," +
                "Taxonomy Construction Time(ms),Total Time(ms)," +
                "Used Memory(bytes),Max Memory (bytes)\n");
           
            Benchmark b = new Benchmark();
            for (int j = 0; j < numRuns; j++) {
                Stats stats = b.runBechmarkRF1();

                sb.append(sdf.format(Calendar.getInstance().getTime()));
                sb.append(",");
                sb.append(Runtime.getRuntime().availableProcessors());
                sb.append(",");

                RuntimeMXBean RuntimemxBean =
                        ManagementFactory.getRuntimeMXBean();
                List<String> arguments = RuntimemxBean.getInputArguments();
                for (int i = 0; i < arguments.size(); i++) {
                    sb.append(arguments.get(i));
                    if (i < arguments.size())
                        sb.append(" ");
                }
                sb.append(",");
                sb.append("SNOMED_20110731");
                sb.append(",");
                sb.append(VERSION);
                sb.append(",");
                sb.append(stats.getAxiomTransformationTimeMs());
                sb.append(",");
                sb.append(stats.getAxiomLoadingTimeMs());
                sb.append(",");
                sb.append(stats.getClassificationTimeMs());
                sb.append(",");
                sb.append(stats.getTaxonomyBuildingTimeMs());
                sb.append(",");
                sb.append(stats.getTotalTime());
                sb.append(",");
                sb.append(Runtime.getRuntime().totalMemory()
                        - Runtime.getRuntime().freeMemory());
                sb.append(",");
                sb.append(Runtime.getRuntime().maxMemory());
                sb.append("\n");

                System.gc();
            }
           
            BufferedWriter bw = null;
            try {
                bw = new BufferedWriter(new FileWriter(
                        new File(outputFile).getAbsoluteFile()));
                bw.write(sb.toString());
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if(bw != null) {
                    try { bw.close(); } catch(Exception e) {}
                }
            }
        } else {
            System.out.println("Unknown input type " + type);
            System.exit(0);
        }
    }

}
TOP

Related Classes of au.csiro.snorocket.core.benchmark.Benchmark

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.