Package ucar.nc2

Source Code of ucar.nc2.TimeNIO

/*
* Copyright 1998-2009 University Corporation for Atmospheric Research/Unidata
*
* Portions of this software were developed by the Unidata Program at the
* University Corporation for Atmospheric Research.
*
* Access and use of this software shall impose the following obligations
* and understandings on the user. The user is granted the right, without
* any fee or cost, to use, copy, modify, alter, enhance and distribute
* this software, and any derivative works thereof, and its supporting
* documentation for any purpose whatsoever, provided that this entire
* notice appears in all copies of the software, derivative works and
* supporting documentation.  Further, UCAR requests that the user credit
* UCAR/Unidata in any publications that result from the use of this
* software or in any product that includes this software. The names UCAR
* and/or Unidata, however, may not be used in any advertising or publicity
* to endorse or promote any products or commercial entity unless specific
* written permission is obtained from UCAR/Unidata. The user also
* understands that UCAR/Unidata is not obligated to provide the user with
* any support, consulting, training or assistance of any kind with regard
* to the use, operation and performance of this software nor to provide
* the user with any updates, revisions, new versions or "bug fixes."
*
* THIS SOFTWARE IS PROVIDED BY UCAR/UNIDATA "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL UCAR/UNIDATA BE LIABLE FOR ANY SPECIAL,
* INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
* WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE.
*/
package ucar.nc2;

import ucar.nc2.util.Stat;
import ucar.nc2.iosp.netcdf3.SPFactory;

import java.io.*;
import java.util.*;

public class TimeNIO {

/**
* results (5/1/03 on IBM thinkpad / XP
*
*   C optimized :
*    first: 29.8, 20.9
*    avg5: 2.18, 1.85
*
*   Java 1.4.2 NIO
*     first: 3.8, 2.7
*     avg5: 2.0, 1.9
*
*   Java 1.4.2 NC2
*     first: 49.4
*     avg5: 10.2
*
* first time much faster (memory mapping?)
* subsequent times the same.
*/

  static void testSP(String spName, String fname, Stat stat) throws IOException {
    String name = spName;
    long startTime, endTime, size = 0;

    // read
      startTime = System.currentTimeMillis();
      try {
        SPFactory.setServiceProvider(spName);
        NetcdfFile ncFile = NetcdfFile.open( fname);

        Iterator iter = ncFile.getVariables().iterator();
        while (iter.hasNext()) {
          Variable v = (Variable) iter.next();
          v.read();
          size += v.getSize();
        }

        ncFile.close();
      } catch (Exception ioe) {
        ioe.printStackTrace();
      }

      endTime = System.currentTimeMillis();
      long diff = endTime - startTime;
      if (stat != null)
        stat.avg(name+fname, diff);
      System.out.println("read "+size+" from "+fname+ " took "+diff+ " msecs");
  }

  public static void doit(Stat sthrows IOException {
    testSP( "ucar.nc2.SPVer1", "C:/data/conventions/mm5/n040.nc", s);
    testSP( "ucar.nc2.SPNioMMap", "C:/data/conventions/mm5/copy_n040.nc", s);
    testSP( "ucar.nc2.SPNio", "C:/data/conventions/mm5/copy_n040.nc", s);
    testSP( "ucar.nc2.SPVer1", "C:/data/conventions/cf/cf1.nc", s);
    testSP( "ucar.nc2.SPNio", "C:/data/conventions/cf/copy_cf1.nc", s);
    testSP( "ucar.nc2.SPNioMMap", "C:/data/conventions/cf/copy_cf1.nc", s);
}

  public static void testSP(String filename, Stat s) throws IOException {
    testSP( "ucar.nc2.SPVer1", filename, s);
    testSP( "ucar.nc2.SPNioMMap", filename, s);
    testSP( "ucar.nc2.SPNio", filename, s);
}

   public static void testReadAll(Stat s, int n) throws IOException {
    long totalRead = 0;
    for (int i=0; i<n; i++) {
      try {
        File dir = new File("timing/data/");
        String[] flist = dir.list();
        for (int j=0; j<flist.length; j++)
          testSP( "ucar.nc2.SPNioCD", "timing/data/"+flist[j], s);

      } catch (IOException ioe) {
        ioe.printStackTrace();
        System.out.println("CD total before error= " + totalRead);
        break;
      }
      if (s != null) s.print();
      System.out.println("CD total done = " + totalRead);
    }
  }

  // this reads a small amount of data that is spread out through a large file
  static long readSpreadData(String fname, Stat stat, int n) throws IOException {
    String name = "readSpreadData";
    long startTime, endTime, nbytes = 0;

    // read
      //System.out.println("Open "+fname);
      startTime = System.currentTimeMillis();
      try {
        NetcdfFile ncFile = NetcdfFile.open( fname);

        Variable v = ncFile.findVariable("CH4");
        for (int i=0;i<n;i++) {
          //System.out.print(" read "+v.getName());
          v.read();
          //System.out.println(" ok");
          nbytes += v.getSize() * v.getDataType().getSize();
        }

        ncFile.close();

      endTime = System.currentTimeMillis();
      long diff = endTime - startTime;
      if (stat != null)
        stat.avg(name, diff);
      System.out.println(" read "+nbytes+" bytes from "+fname+ " took "+diff+ " msecs");
      return nbytes;

    } catch (Exception ioe) {
      System.out.println(" read from "+fname+ " failed ");
      ioe.printStackTrace();
      return 0;
    }
  }

  //////////////////////////////////////////////////////////
  static long readAllData(String fname, Stat stat) throws IOException {
    String name = "readAll";
    long startTime, endTime, nbytes = 0;
    if (!fname.endsWith(".nc")) return 0;

    // read
      //System.out.println("Open "+fname);
      startTime = System.currentTimeMillis();
      try {
        NetcdfFile ncFile = NetcdfFile.open( fname);

        Iterator iter = ncFile.getVariables().iterator();
        while (iter.hasNext()) {
          Variable v = (Variable) iter.next();
          //System.out.print(" read "+v.getName());
          v.read();
          //System.out.println(" ok");
          nbytes += v.getSize() * v.getDataType().getSize();
        }

        ncFile.close();

      endTime = System.currentTimeMillis();
      long diff = endTime - startTime;
      if (stat != null)
        stat.avg(name, diff);
      System.out.println(" read "+nbytes+" bytes from "+fname+ " took "+diff+ " msecs");
      return nbytes;

    } catch (Exception ioe) {
      System.out.println(" read from "+fname+ " failed ");
      ioe.printStackTrace();
      return 0;
    }
  }

  static long readAllDataRecord(String fname, Stat stat) throws IOException {
    String name = "readAll";
    long startTime, endTime, nbytes = 0;

    /* read
      //System.out.println("Open "+fname);
      startTime = System.currentTimeMillis();
      try {
        NetcdfFile ncFile = new NetcdfFile( fname);

        Iterator iter = ncFile.getVariableIterator();
        while (iter.hasNext()) {
          Variable v = (Variable) iter.next();
          if (!v.isUnlimited()) {
            v.read();
            nbytes += v.getSize() * v.getDataType().getSize();
          }
        }

        StructureVariable record = (StructureVariable) ncFile.findVariable("record");
        if (record == null) {
          System.out.println("no record variable in "+ncFile.getPathName());
          return 0;
        }
        StructureVariable.Iterator riter = record.getStructureIterator();
        while (riter.hasNext()) {
          StructureVariable s = riter.next();

          // loop over structure variables
          Iterator viter = s.getMembers().iterator();
          while (viter.hasNext()) {
            Variable v2 = (Variable) viter.next();
            v2.read();
            nbytes += v2.getSize() * v2.getDataType().getSize();
          }
        }

        ncFile.close();

        endTime = System.currentTimeMillis();
        long diff = endTime - startTime;
        if (stat != null)
          stat.avg(name, diff);
        System.out.println(" read "+nbytes+" bytes from "+fname+ " took "+diff+ " msecs");
        return nbytes;

    } catch (Exception ioe) {
      System.out.println(" read from "+fname+ " failed ");
      ioe.printStackTrace();
      return 0;
    } */

    return 0;
  }

  public static long doOneDirRecord(File dir, Stat s) throws IOException {
    long total = 0;
    File[] flist = dir.listFiles();
    for (int j=0; j<flist.length; j++) {
      File file = flist[j];
      if (file.isDirectory())
        total += doOneDir( file, s);
      else
        total += readAllDataRecord( file.getAbsolutePath(), s);
    }
    return total;
  }

  public static long doOneDir(File dir, Stat s) throws IOException {
    long total = 0;
    File[] flist = dir.listFiles();
    for (int j=0; j<flist.length; j++) {
      File file = flist[j];
      if (file.isDirectory())
        total += doOneDir( file, s);
      else
        total += readAllData( file.getAbsolutePath(), s);
    }
    return total;
  }


  public static void main(String[] args) {


    Stat v1 = new Stat();
    Stat raf = new Stat();

    long total;
    File topDir = new File("C:/data/conventions/");

    try {
      //SPFactory.setServiceProvider("ucar.nc2.SPNioMMap");
      //readAllData("C:/data/conventions/csm/B06.62.atm.0703.nc", null);

      //SPFactory.setServiceProvider("ucar.nc2.SPNioMMap");
      //total = doOneDirRecord(topDir, mm);
      //System.out.println("total bytes= "+total);

      ///SPFactory.setServiceProvider("ucar.nc2.SPNioCD");
      //total = doOneDirRecord(topDir, cd);
      //System.out.println("total bytes= "+total);

      int n = 10;

      SPFactory.setServiceProvider("ucar.nc2.N3ver1");
      total = readSpreadData("C:/data/conventions/mm5/copy_n040.nc", v1, n);
      System.out.println("total bytes= "+total);

      SPFactory.setServiceProvider("ucar.nc2.iosp.netcdf3.N3raf");
      total = readSpreadData("C:/data/conventions/mm5/n040.nc", raf, n);
      System.out.println("total bytes= "+total);

      SPFactory.setServiceProvider("ucar.nc2.N3ver1");
      total = doOneDir(topDir, v1);
      System.out.println("total bytes= "+total); // */
     
      SPFactory.setServiceProvider("ucar.nc2.iosp.netcdf3.N3raf");
      total = doOneDir(topDir, raf);
      System.out.println("total bytes= "+total);

      /* SPFactory.setServiceProvider("ucar.nc2.SPnioMMap");
      total = doOneDir(topDir, mm);
      System.out.println("total bytes= "+total);

      SPFactory.setServiceProvider("ucar.nc2.SPnioCD");
      total = doOneDir(topDir, cd);
      System.out.println("total bytes= "+total); */


      /* SPFactory.setServiceProvider("ucar.nc2.SPnioMMap");
      total = readSpreadData("C:/data/conventions/mm5/copy2_n040.nc", mm, n);
      System.out.println("total bytes= "+total);

      SPFactory.setServiceProvider("ucar.nc2.SPnioCD");
      total = readSpreadData("C:/data/conventions/mm5/n040.nc", cd, n);
      System.out.println("total bytes= "+total); */


    } catch (Exception e) {
      e.printStackTrace();
    }

    System.out.print("Ver1=");
    v1.print();
    System.out.print("Raf=");
    raf.print();


    /*
    doit(null);

   for (int i=0; i<3; i++)
     doit(stat);

    stat.print(); */

  }

}


TOP

Related Classes of ucar.nc2.TimeNIO

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.