- Timestamp:
- 07/23/24 11:24:10 (7 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/dev/XIOS_KOKKOS/src/functor/average.cpp
r2636 r2643 39 39 if (hasMissingValue) 40 40 { 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(); 46 47 } 47 48 } … … 50 51 if (hasMissingValue) 51 52 { 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))) 58 57 { 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)) ++; 62 61 } 62 }); 63 Kokkos::fence(); 63 64 } 64 65 else _doutput+=_dinput ; … … 71 72 if (hasMissingValue) 72 73 { 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) 78 78 { 79 *out /= *nc;80 *nc= 0 ;79 doutput(i) /= nbcalls(i); 80 nbcalls(i) = 0 ; 81 81 } 82 82 }); 83 83 } 84 84 else doutput/=this->nbcall;
Note: See TracChangeset
for help on using the changeset viewer.