Changeset 2639


Ignore:
Timestamp:
07/19/24 08:25:26 (7 months ago)
Author:
jderouillat
Message:

Use shallow kokkos copy constructor and assignment when it is possible (not from unmanaged views).

Location:
XIOS3/dev/XIOS_KOKKOS/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • XIOS3/dev/XIOS_KOKKOS/src/array_workflow.hpp

    r2636 r2639  
    5959     
    6060    CArray_WF(const xios::CArray_WF<T_numtype,N_rank>& array) 
    61     { 
    62       this->resize(array.numElements()); 
    63       for (int i=0;i<array.numElements();i++) (*this)(i) = array(i); 
     61        : Kokkos::View<T_numtype*,Kokkos::DefaultExecutionSpace::memory_space>( array ) 
     62    { 
    6463    } 
    6564 
    6665    CArray_WF(xios::CArray_WF<T_numtype,N_rank>& array) 
    67     { 
    68       this->resize(array.numElements()); 
    69       for (int i=0;i<array.numElements();i++) (*this)(i) = array(i); 
     66        : Kokkos::View<T_numtype*,Kokkos::DefaultExecutionSpace::memory_space>( array ) 
     67    { 
    7068    } 
    7169 
     
    107105      : initialized(true) { this->resize(length0*length1*length2*length3*length4*length5*length6*length7); } 
    108106 
    109     T_numtype* dataFirst() {return this->data();} 
    110     const T_numtype* dataFirst() const {return this->data();} 
    111      
    112     void resize( int sizeIn ) {Kokkos::resize(*this,sizeIn); } // mdspan ? 
    113      
    114     int shape() {return this->extent(0);} 
    115     int shape() const {return this->extent(0);} 
    116  
    117     size_t numElements() {return this->extent(0);} 
    118     size_t numElements() const {return this->extent(0);} 
     107    inline T_numtype* dataFirst() {return this->data();} 
     108    inline const T_numtype* dataFirst() const {return this->data();} 
     109     
     110    inline void resize( int sizeIn ) 
     111    { 
     112      if (this->numElements()!=sizeIn) 
     113        Kokkos::resize(*this,sizeIn); 
     114    } // mdspan ? 
     115     
     116    inline int shape() {return this->extent(0);} 
     117    inline int shape() const {return this->extent(0);} 
     118 
     119    inline size_t numElements() {return this->extent(0);} 
     120    inline size_t numElements() const {return this->extent(0);} 
    119121 
    120122    //inline T_numtype& operator()(int index) 
     
    132134      this->resize( array.numElements() ); 
    133135      for (int i=0;i<array.numElements();i++) (*this)(i) = (array(i)); 
    134  
    135136      initialized = array.initialized; 
    136137    } 
     
    190191    inline CArray_WF<T_numtype,N_rank>& operator=(const T_numtype& value) 
    191192    { 
    192       for (int i=0;i<this->numElements();i++) (*this)[i] = value; 
     193      for (int i=0;i<this->numElements();i++) (*this)(i) = value; 
    193194      return *this; 
    194195    } 
     
    196197    inline CArray_WF<T_numtype,N_rank>& operator+=(const CArray_WF<T_numtype,N_rank>& array) 
    197198    { 
    198       for (int i=0;i<this->numElements();i++) (*this)[i] += array[i]; 
     199      for (int i=0;i<this->numElements();i++) (*this)(i) += array(i); 
    199200      return *this; 
    200201    } 
     
    202203    inline CArray_WF<T_numtype,N_rank>& operator/=(const int& val) 
    203204    { 
    204       for (int i=0;i<this->numElements();i++) (*this)[i] /= (T_numtype)val; 
     205      for (int i=0;i<this->numElements();i++) (*this)(i) /= (T_numtype)val; 
    205206      return *this; 
    206207    } 
     
    208209    inline CArray_WF<T_numtype,N_rank>& operator-( const T_numtype& val) 
    209210    { 
    210       for (int i=0;i<this->numElements();i++) (*this)[i] -= (T_numtype)val; 
     211      for (int i=0;i<this->numElements();i++) (*this)(i) -= (T_numtype)val; 
    211212      return *this; 
    212213    } 
     
    214215    inline CArray_WF<T_numtype,N_rank>& operator/( const T_numtype& val) 
    215216    { 
    216       for (int i=0;i<this->numElements();i++) (*this)[i] /= (T_numtype)val; 
     217      for (int i=0;i<this->numElements();i++) (*this)(i) /= (T_numtype)val; 
    217218      return *this; 
    218219    } 
     
    220221    inline CArray_WF<T_numtype,N_rank>& operator*( const T_numtype& val) 
    221222    { 
    222       for (int i=0;i<this->numElements();i++) (*this)[i] *= (T_numtype)val; 
     223      for (int i=0;i<this->numElements();i++) (*this)(i) *= (T_numtype)val; 
    223224      return *this; 
    224225    } 
     
    226227    inline CArray_WF<T_numtype,N_rank>& operator+( const T_numtype& val) 
    227228    { 
    228       for (int i=0;i<this->numElements();i++) (*this)[i] += (T_numtype)val; 
     229      for (int i=0;i<this->numElements();i++) (*this)(i) += (T_numtype)val; 
    229230      return *this; 
    230231    } 
     
    245246    } 
    246247 
    247  
    248     inline CArray_WF<T_numtype,N_rank>& operator=( const CArray_WF<T_numtype,N_rank>& array) 
    249     { 
    250       this->resize( array.numElements() ); 
    251       for (int i=0;i<array.numElements();i++) (*this)(i) = array(i); 
    252       return *this; 
    253     } 
    254248   
    255249  }; 
     
    272266  template <typename T_numtype,int N_rank> inline CArray_WF<T_numtype,N_rank>& round( CArray_WF<T_numtype,N_rank>& array ) 
    273267  { 
    274     for (int i=0;i<array.numElements();i++) (array)[i] = std::round( array[i] ); 
     268    for (int i=0;i<array.numElements();i++) (array)(i) = std::round( array(i) ); 
    275269    if (!array.numElements()) ERROR("inline CArray_WF<>& operator<=(const double& value)", << "Size = 0."); 
    276270    return array; 
  • XIOS3/dev/XIOS_KOKKOS/src/functor.cpp

    r2636 r2639  
    4444      //--------------------------------------------------------------- 
    4545 
    46       CArray_WF<double,1> CFunctor::operator ()(const CArray_WF<double,1>& dinput) 
     46      CArray_WF<double,1>& CFunctor::operator ()(const CArray_WF<double,1>& dinput) 
    4747      { 
    4848         this->nbcall++; 
  • XIOS3/dev/XIOS_KOKKOS/src/functor.hpp

    r2636 r2639  
    2222            CArray_WF<double,1> getDataOutput(void) const; 
    2323            /// Opérateur /// 
    24             CArray_WF<double,1> operator ()(const CArray_WF<double,1>& dinput); 
     24            CArray_WF<double,1>& operator ()(const CArray_WF<double,1>& dinput); 
    2525            virtual ETimeType timeType(void) = 0 ; 
    2626 
Note: See TracChangeset for help on using the changeset viewer.