Changeset 2640


Ignore:
Timestamp:
07/22/24 12:24:12 (7 months ago)
Author:
jderouillat
Message:

Suppress memory initializations in calls to kokkos::resize. Modified the CArray_WF constructor called by models to enable shallow copy from an unmanaged_view.

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

Legend:

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

    r2636 r2640  
    33namespace xios 
    44{ 
    5  
    6   //template <T_numtype, N_rank>  
    7   //CArray_WF::CArray_WF(xios::CArray_WF<T_numtype,N_rank>& array) 
    8   //{ 
    9   //  std::cout << "Copy constructor not implemented" << std::endl; 
    10   //} 
    11  
     5    template Kokkos::View<double*, Kokkos::DefaultExecutionSpace::memory_space, Kokkos::MemoryTraits<Kokkos::Unmanaged> >  CArray_WF<double,1>::createView(double* dataFirst, int numElement); 
     6    template Kokkos::View<float*, Kokkos::DefaultExecutionSpace::memory_space, Kokkos::MemoryTraits<Kokkos::Unmanaged> >  CArray_WF<float,1>::createView(float* dataFirst, int numElement); 
     7     
    128} 
    139 
  • XIOS3/dev/XIOS_KOKKOS/src/array_workflow.hpp

    r2639 r2640  
    3636     
    3737    // From xios_send_field 
    38     //CArray_WF(T_numtype* dataFirst, TinyVector<int, N_rank> shape, preexistingMemoryPolicy deletionPolicy) 
    3938    CArray_WF(T_numtype* dataFirst, int numElements) 
    40       :  initialized(true) 
    41     { 
    42       //int ndims = shape.numElements(); 
    43       //int sizeIn=1; 
    44       //for (int i=0;i<ndims;i++) sizeIn*= shape(i); 
    45       this->resize(numElements); 
    46  
    47       void* acc_data = NULL; 
     39      : Kokkos::View<T_numtype*,Kokkos::DefaultExecutionSpace::memory_space>( CArray_WF<T_numtype,1>::createView(dataFirst, numElements) ), 
     40        initialized(true) 
     41    { 
     42    } 
     43 
     44    // Creator of unmanaged view from a model pointer 
     45    static Kokkos::View<T_numtype*, Kokkos::DefaultExecutionSpace::memory_space, Kokkos::MemoryTraits<Kokkos::Unmanaged> > createView(T_numtype* dataFirst, int numElement) 
     46    { 
     47      T_numtype* acc_data = NULL; 
    4848      if (acc_deviceptr( dataFirst )!=NULL) 
    49           acc_data = acc_deviceptr( dataFirst ); 
     49          acc_data = (T_numtype*)acc_deviceptr( dataFirst ); 
    5050      else 
    5151          acc_data = dataFirst; 
    52       Kokkos::View<T_numtype*, Kokkos::DefaultExecutionSpace::memory_space, Kokkos::MemoryTraits<Kokkos::Unmanaged> > device_dataFirst ( (T_numtype*)acc_data, numElements ) ; 
    53  
    54       Kokkos::deep_copy( *this, device_dataFirst ); 
    55  
     52      Kokkos::View<T_numtype*, Kokkos::DefaultExecutionSpace::memory_space, Kokkos::MemoryTraits<Kokkos::Unmanaged> > device_dataFirst ( acc_data, numElement ) ; 
     53       
     54      return device_dataFirst; 
     55    } 
     56 
     57    // CArray_WF constructor from an unmanaged view 
     58    CArray_WF( Kokkos::View<double*, Kokkos::DefaultExecutionSpace::memory_space, Kokkos::MemoryTraits<Kokkos::Unmanaged> >  array) 
     59        : Kokkos::View<T_numtype*,Kokkos::DefaultExecutionSpace::memory_space>( array ) 
     60    { 
    5661    } 
    5762     
     
    111116    { 
    112117      if (this->numElements()!=sizeIn) 
    113         Kokkos::resize(*this,sizeIn); 
     118      { 
     119        // Kokkos::resize much less expensive using WithoutInitializing (at least on CPU) 
     120        //   by default a kernel is launched for initializing 
     121        Kokkos::resize(Kokkos::WithoutInitializing,*this,sizeIn); 
     122      } 
    114123    } // mdspan ? 
    115124     
  • XIOS3/dev/XIOS_KOKKOS/src/interface/c/icdata.cpp

    r2636 r2640  
    501501        context->eventLoop(); 
    502502 
    503       CArray_WF<double, 2>data(data_k8, data_Xsize*data_Ysize); 
     503      CArray_WF<double, 1>data(data_k8, data_Xsize*data_Ysize); 
    504504      field->setData(data); 
    505505 
     
    535535        context->eventLoop(); 
    536536 
    537       CArray_WF<double, 3>data(data_k8, data_Xsize*data_Ysize*data_Zsize); 
     537      CArray_WF<double, 1>data(data_k8, data_Xsize*data_Ysize*data_Zsize); 
    538538      field->setData(data); 
    539539 
     
    571571        context->eventLoop(); 
    572572 
    573       CArray_WF<double, 4>data(data_k8, data_0size*data_1size*data_2size*data_3size); 
     573      CArray_WF<double, 1>data(data_k8, data_0size*data_1size*data_2size*data_3size); 
    574574      field->setData(data); 
    575575 
     
    609609        context->eventLoop(); 
    610610 
    611       CArray_WF<double, 5>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size); 
     611      CArray_WF<double, 1>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size); 
    612612      field->setData(data); 
    613613 
     
    646646        context->eventLoop(); 
    647647 
    648       CArray_WF<double, 6>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size); 
     648      CArray_WF<double, 1>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size); 
    649649      field->setData(data); 
    650650 
     
    684684        context->eventLoop(); 
    685685 
    686       CArray_WF<double, 7>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size*data_6size); 
     686      CArray_WF<double, 1>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size*data_6size); 
    687687      field->setData(data); 
    688688 
     
    783783        context->eventLoop(); 
    784784 
    785       CArray_WF<float, 2> data_tmp(data_k4, data_Xsize*data_Ysize); 
    786       CArray_WF<double, 2> data(data_Xsize, data_Ysize); 
     785      CArray_WF<float, 1> data_tmp(data_k4, data_Xsize*data_Ysize); 
     786      CArray_WF<double, 1> data(data_Xsize, data_Ysize); 
    787787      data = data_tmp; 
    788788      field->setData(data); 
     
    817817        context->eventLoop(); 
    818818 
    819       CArray_WF<float, 3> data_tmp(data_k4, data_Xsize*data_Ysize*data_Zsize); 
    820       CArray_WF<double, 3> data(data_Xsize, data_Ysize, data_Zsize); 
     819      CArray_WF<float, 1> data_tmp(data_k4, data_Xsize*data_Ysize*data_Zsize); 
     820      CArray_WF<double, 1> data(data_Xsize, data_Ysize, data_Zsize); 
    821821      data = data_tmp; 
    822822      field->setData(data); 
     
    852852        context->eventLoop(); 
    853853 
    854       CArray_WF<float, 4> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size); 
    855       CArray_WF<double, 4> data(data_0size, data_1size, data_2size, data_3size); 
     854      CArray_WF<float, 1> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size); 
     855      CArray_WF<double, 1> data(data_0size, data_1size, data_2size, data_3size); 
    856856      data = data_tmp; 
    857857      field->setData(data); 
     
    890890        context->eventLoop(); 
    891891 
    892       CArray_WF<float, 5> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size); 
    893       CArray_WF<double, 5> data(data_0size, data_1size, data_2size, data_3size, data_4size); 
     892      CArray_WF<float, 1> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size); 
     893      CArray_WF<double, 1> data(data_0size, data_1size, data_2size, data_3size, data_4size); 
    894894      data = data_tmp; 
    895895      field->setData(data); 
     
    927927        context->eventLoop(); 
    928928 
    929       CArray_WF<float, 6> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size); 
    930       CArray_WF<double, 6> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size); 
     929      CArray_WF<float, 1> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size); 
     930      CArray_WF<double, 1> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size); 
    931931      data = data_tmp; 
    932932      field->setData(data); 
     
    964964        context->eventLoop(); 
    965965 
    966       CArray_WF<float, 7> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size*data_6size); 
    967       CArray_WF<double, 7> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size); 
     966      CArray_WF<float, 1> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size*data_6size); 
     967      CArray_WF<double, 1> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size); 
    968968      data = data_tmp; 
    969969      field->setData(data); 
     
    10601060        context->eventLoop(); 
    10611061 
    1062       CArray_WF<double, 2>data(data_k8, data_Xsize*data_Ysize); 
     1062      CArray_WF<double, 1>data(data_k8, data_Xsize*data_Ysize); 
    10631063      field->getData(data); 
    10641064 
     
    10901090        context->eventLoop(); 
    10911091 
    1092       CArray_WF<double, 3>data(data_k8, data_Xsize*data_Ysize*data_Zsize); 
     1092      CArray_WF<double, 1>data(data_k8, data_Xsize*data_Ysize*data_Zsize); 
    10931093      field->getData(data); 
    10941094 
     
    11221122        context->eventLoop(); 
    11231123 
    1124       CArray_WF<double, 4>data(data_k8, data_0size*data_1size*data_2size*data_3size); 
     1124      CArray_WF<double, 1>data(data_k8, data_0size*data_1size*data_2size*data_3size); 
    11251125      field->getData(data); 
    11261126 
     
    11551155        context->eventLoop(); 
    11561156 
    1157       CArray_WF<double, 5>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size); 
     1157      CArray_WF<double, 1>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size); 
    11581158      field->getData(data); 
    11591159 
     
    11881188        context->eventLoop(); 
    11891189 
    1190       CArray_WF<double, 6>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size); 
     1190      CArray_WF<double, 1>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size); 
    11911191      field->getData(data); 
    11921192 
     
    12221222        context->eventLoop(); 
    12231223 
    1224       CArray_WF<double, 7>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size*data_6size); 
     1224      CArray_WF<double, 1>data(data_k8, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size*data_6size); 
    12251225      field->getData(data); 
    12261226 
     
    13261326        context->eventLoop(); 
    13271327 
    1328       CArray_WF<double, 2> data(data_Xsize, data_Ysize); 
     1328      CArray_WF<double, 1> data(data_Xsize, data_Ysize); 
    13291329      field->getData(data); 
    1330       CArray_WF<float, 2> data_tmp(data_k4, data_Xsize*data_Ysize); 
     1330      CArray_WF<float, 1> data_tmp(data_k4, data_Xsize*data_Ysize); 
    13311331      data_tmp = data; 
    13321332 
     
    13591359        context->eventLoop(); 
    13601360 
    1361       CArray_WF<double, 3> data(data_Xsize, data_Ysize, data_Zsize); 
     1361      CArray_WF<double, 1> data(data_Xsize, data_Ysize, data_Zsize); 
    13621362      field->getData(data); 
    1363       CArray_WF<float, 3> data_tmp(data_k4, data_Xsize*data_Ysize*data_Zsize); 
     1363      CArray_WF<float, 1> data_tmp(data_k4, data_Xsize*data_Ysize*data_Zsize); 
    13641364      data_tmp = data; 
    13651365 
     
    13931393        context->eventLoop(); 
    13941394 
    1395       CArray_WF<double, 4> data(data_0size, data_1size, data_2size, data_3size); 
     1395      CArray_WF<double, 1> data(data_0size, data_1size, data_2size, data_3size); 
    13961396      field->getData(data); 
    1397       CArray_WF<float, 4> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size); 
     1397      CArray_WF<float, 1> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size); 
    13981398      data_tmp = data; 
    13991399 
     
    14301430        context->eventLoop(); 
    14311431 
    1432       CArray_WF<double, 5> data(data_0size, data_1size, data_2size, data_3size, data_4size); 
     1432      CArray_WF<double, 1> data(data_0size, data_1size, data_2size, data_3size, data_4size); 
    14331433      field->getData(data); 
    1434       CArray_WF<float, 5> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size); 
     1434      CArray_WF<float, 1> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size); 
    14351435      data_tmp = data; 
    14361436 
     
    14661466        context->eventLoop(); 
    14671467 
    1468       CArray_WF<double, 6> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size); 
     1468      CArray_WF<double, 1> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size); 
    14691469      field->getData(data); 
    1470       CArray_WF<float, 6> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size); 
     1470      CArray_WF<float, 1> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size); 
    14711471      data_tmp = data; 
    14721472 
     
    15041504        context->eventLoop(); 
    15051505 
    1506       CArray_WF<double, 7> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size); 
     1506      CArray_WF<double, 1> data(data_0size, data_1size, data_2size, data_3size, data_4size, data_5size, data_6size); 
    15071507      field->getData(data); 
    1508       CArray_WF<float, 7> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size*data_6size); 
     1508      CArray_WF<float, 1> data_tmp(data_k4, data_0size*data_1size*data_2size*data_3size*data_4size*data_5size*data_6size); 
    15091509      data_tmp = data; 
    15101510 
Note: See TracChangeset for help on using the changeset viewer.