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

Reply via email to