Changeset 2643


Ignore:
Timestamp:
07/23/24 11:24:10 (7 months ago)
Author:
jderouillat
Message:

Introduce Kokkos::parallel_for in average temporal filter

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS3/dev/XIOS_KOKKOS/src/functor/average.cpp

    r2636 r2643  
    3939          if (hasMissingValue)  
    4040          { 
    41             int i, n =_dinput.numElements() ; 
    42             const double * in=_dinput.dataFirst() ; 
    43             int* nc=nbcalls.dataFirst() ; 
    44             for (i=0; i<n; ++i,++nc,++in)  
    45               if (!NumTraits<double>::isNan(*in)) (*nc) ++; 
     41            int nElements = _dinput.numElements() ; 
     42            Kokkos::parallel_for( "init_avg", nElements, KOKKOS_LAMBDA( const size_t i ) 
     43            { 
     44              if (!NumTraits<double>::isNan(_dinput(i))) (nbcalls(i)) ++; 
     45            }); 
     46            Kokkos::fence(); 
    4647          } 
    4748        } 
     
    5051          if (hasMissingValue) 
    5152          { 
    52             int i, n =_dinput.numElements() ; 
    53             const double * in=_dinput.dataFirst() ; 
    54             double* out=_doutput.dataFirst(); 
    55             int* nc=nbcalls.dataFirst() ; 
    56             for (i=0; i<n; ++i,++in,++out,++nc)  
    57               if (!NumTraits<double>::isNan(*in))  
     53            int nElements = _dinput.numElements() ; 
     54            Kokkos::parallel_for( "increment_avg", nElements, KOKKOS_LAMBDA( const size_t i ) 
     55            { 
     56              if (!NumTraits<double>::isNan(_dinput(i)))  
    5857              { 
    59                 if (*nc != 0) (*out)  += *in; 
    60                 else *out = *in ; 
    61                 (*nc) ++; 
     58                if (nbcalls(i) != 0) _doutput(i)  += _dinput(i); 
     59                else _doutput(i) = _dinput(i) ; 
     60                (nbcalls(i)) ++; 
    6261              }  
     62            }); 
     63            Kokkos::fence(); 
    6364          } 
    6465          else _doutput+=_dinput ; 
     
    7172        if (hasMissingValue) 
    7273        { 
    73           int i, n = nbcalls.numElements() ; 
    74           double* out= doutput.dataFirst(); 
    75           int* nc=nbcalls.dataFirst() ; 
    76           for (i=0; i<n; ++i, ++out,++nc)  
    77             if (*nc!=0)  
     74          int nElements = nbcalls.numElements() ; 
     75          Kokkos::parallel_for( "divide_avg", nElements, KOKKOS_LAMBDA( const size_t i ) 
     76          { 
     77            if (nbcalls(i)!=0)  
    7878            { 
    79               *out  /= *nc; 
    80               *nc = 0 ; 
     79              doutput(i) /= nbcalls(i); 
     80              nbcalls(i) = 0 ; 
    8181            } 
    82          
     82          }); 
    8383        }   
    8484        else doutput/=this->nbcall;  
Note: See TracChangeset for help on using the changeset viewer.