Re: [netcdf-java] performance issue


Mark Balonkin wrote:
> Hi,
> 
> I’m using java NetCDF 2.2.20. One of the issues which I have related to
> very low performance comparing to .Net wrapper on “C” library 3.6.1
> 
> For instance I made simple straight forward test case:
> 
> -          Create a file
> 
> -          1 dimension
> 
> -          1 variable type Float
> 
> -          Dump values as arrays of 5 elements
> 
>  
> 
>  
> 
> Java code:
> 
>              *try* {
> 
>              NetcdfFileWriteable ncFile =
> NetcdfFileWriteable./createNew/("d:\\duck2.nc", *false*);
> 
>             Dimension timeDim =
> ncFile.addDimension(/timeSeriesDimensionName/, -1, *true*, *true*,
> *false*);
> 
>             Dimension[] dim1 = *new* Dimension[1];
> 
>             dim1[0] = timeDim;
> 
>           ncFile.addVariable(“avar”, DataType./FLOAT/, dim1);
> 
>           ncFile.create();
> 
>           *int* c=0;
> 
>             *float*[] arr;
> 
>             arr=*new* *float*[5];
> 
>             arr[0]=50;
> 
>             arr[1]=40;
> 
>             arr[2]=30;
> 
>             arr[3]=20;
> 
>             arr[4]=10;
> 
>             *int* i, j;
> 
>             *for*(j=0;j<2000;j++)
> 
>             *for*(i=0;i<50000;i++){
> 
>                   *int*[] timeOrigin = *new* *int*[] {c};               
> 
>                   ncFile.write(“avar”, timeOrigin, Array./factory/(arr));
> 
>                   c+=5;
> 
>                  
> 
>             }
> 
>             ncFile.flush();
> 
>             ncFile.close();
> 
>             }
> 
>              *catch*(Exception ex){
> 
>                    
> 
>              }
> 
>  
> 
>  
> 
> And similar VB.NET code
> 
>  
> 
>         Dim ncid As Integer
> 
>         Dim dimid As Integer
> 
>         Dim varid As Integer
> 
>  
> 
>         Dim v(4) As Single
> 
>         v(1) = 10
> 
>         v(2) = 20
> 
>         v(3) = 30
> 
>         v(4) = 40
> 
>         v(0) = 50
> 
>         Dim vSize(0) As Integer
> 
>         vSize(0) = 5
> 
>  
> 
>         Dim res As Integer
> 
>         Dim dims(0) As Integer
> 
>  
> 
>         res = NetCDF.nc_create("d:\duck.nc", NetCDF.cmode.NC_WRITE, ncid)
> 
>         res = NetCDF.nc_def_dim(ncid, "big_dim", 0, dimid)
> 
>         dims(0) = dimid
> 
>         res = NetCDF.nc_def_var(ncid, "big_var",
> NetCDF.nc_type.NC_FLOAT, 1, dims, varid)
> 
>         NetCDF.nc_enddef(ncid)
> 
>  
> 
>         Dim idx(0) As Integer
> 
>         Dim i As Integer
> 
>         Dim j As Integer
> 
>  
> 
>         idx(0) = 0
> 
>         For j = 0 To 2000
> 
>             For i = 0 To 50000
> 
>                 res = NetCDF.nc_put_vara_float(ncid, varid, idx, vSize, v)
> 
>                 idx(0) = idx(0) + vSize(0)
> 
>  
> 
>             Next
> 
>         Next
> 
>          
> 
> ***************************
> 
>  
> 
>  
> 
> Java code is approximately 40 times slower.

are you sure you are doing the timings correctly? 40x is more like
the difference between interpreted and compiled Java. Are you
warming up the JVM?

> 
> Apparently, making a bigger buffer (for instance arrays of 10000 instead
> of 5 elements) in Java case will reduce the difference, but anyway it
> very significant.
> 
> Any suggestion how to improve it?
> 
>  
> 
> Thanks,
> 
> Mark Balonkin
> 
>  
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> netcdf-java mailing list
> netcdf-java@xxxxxxxxxxxxxxxx
> For list information or to unsubscribe, visit: 
> http://www.unidata.ucar.edu/mailing_lists/ 


  • 2008 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: