On Tue, Mar 27, 2012 at 1:17 PM, Ripsime Khachatryan <kul...@mail.ru> wrote: > Hi all > > > I would like to asks if anybody calculated the vegetation index using OpenMP, > and can anybody give me detailed information how to do that. > I performed the same operation using MPI, so I am familiar with calculation. > Below is a patch for i.vi (GRASS 7). On a quad-core system, there is no real speedup, only (combined) CPU time increases...
Markus M start of patch --> Index: imagery/i.vi/Makefile =================================================================== --- imagery/i.vi/Makefile (revision 51167) +++ imagery/i.vi/Makefile (working copy) @@ -5,6 +5,9 @@ LIBES = $(RASTERLIB) $(GISLIB) $(MATHLIB) DEPENDENCIES = $(RASTERDEP) $(GISDEP) +EXTRA_LIBS = $(OMPLIB) +EXTRA_CFLAGS = $(OMPCFLAGS) + include $(MODULE_TOPDIR)/include/Make/Module.make Index: imagery/i.vi/main.c =================================================================== --- imagery/i.vi/main.c (revision 51167) +++ imagery/i.vi/main.c (working copy) @@ -252,6 +252,10 @@ || !(input6->answer) || !(input7->answer)) ) G_fatal_error(_("gvi index requires blue, green, red, nir, chan5 and chan7 maps")); + /* init variables */ + infd_redchan = infd_nirchan = infd_greenchan = -1; + infd_bluechan = infd_chan5chan = infd_chan7chan = -1; + infd_redchan = Rast_open_old(redchan, ""); data_type_redchan = Rast_map_type(redchan, ""); inrast_redchan = Rast_allocate_buf(data_type_redchan); @@ -296,13 +300,6 @@ /* Process pixels */ for (row = 0; row < nrows; row++) { - DCELL d_bluechan; - DCELL d_greenchan; - DCELL d_redchan; - DCELL d_nirchan; - DCELL d_chan5chan; - DCELL d_chan7chan; - G_percent(row, nrows, 2); /* read input maps */ @@ -322,9 +319,18 @@ if (chan7chan) { Rast_get_row(infd_chan7chan,inrast_chan7chan,row,data_type_chan7chan); } + /* process the data */ + #pragma omp parallel for schedule (static) for (col = 0; col < ncols; col++) { + DCELL d_bluechan; + DCELL d_greenchan; + DCELL d_redchan; + DCELL d_nirchan; + DCELL d_chan5chan; + DCELL d_chan7chan; + switch(data_type_redchan){ case CELL_TYPE: d_redchan = (double) ((CELL *) inrast_redchan)[col]; <-- end of patch > > > Thanks in advance for any help. > > Regards, > Ripsime > _______________________________________________ > grass-user mailing list > grass-user@lists.osgeo.org > http://lists.osgeo.org/mailman/listinfo/grass-user > _______________________________________________ grass-user mailing list grass-user@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/grass-user