Changeset 2640
- Timestamp:
- 07/22/24 12:24:12 (7 months ago)
- Location:
- XIOS3/dev/XIOS_KOKKOS/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/dev/XIOS_KOKKOS/src/array_workflow.cpp
r2636 r2640 3 3 namespace xios 4 4 { 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 12 8 } 13 9 -
XIOS3/dev/XIOS_KOKKOS/src/array_workflow.hpp
r2639 r2640 36 36 37 37 // From xios_send_field 38 //CArray_WF(T_numtype* dataFirst, TinyVector<int, N_rank> shape, preexistingMemoryPolicy deletionPolicy)39 38 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; 48 48 if (acc_deviceptr( dataFirst )!=NULL) 49 acc_data = acc_deviceptr( dataFirst );49 acc_data = (T_numtype*)acc_deviceptr( dataFirst ); 50 50 else 51 51 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 { 56 61 } 57 62 … … 111 116 { 112 117 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 } 114 123 } // mdspan ? 115 124 -
XIOS3/dev/XIOS_KOKKOS/src/interface/c/icdata.cpp
r2636 r2640 501 501 context->eventLoop(); 502 502 503 CArray_WF<double, 2>data(data_k8, data_Xsize*data_Ysize);503 CArray_WF<double, 1>data(data_k8, data_Xsize*data_Ysize); 504 504 field->setData(data); 505 505 … … 535 535 context->eventLoop(); 536 536 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); 538 538 field->setData(data); 539 539 … … 571 571 context->eventLoop(); 572 572 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); 574 574 field->setData(data); 575 575 … … 609 609 context->eventLoop(); 610 610 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); 612 612 field->setData(data); 613 613 … … 646 646 context->eventLoop(); 647 647 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); 649 649 field->setData(data); 650 650 … … 684 684 context->eventLoop(); 685 685 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); 687 687 field->setData(data); 688 688 … … 783 783 context->eventLoop(); 784 784 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); 787 787 data = data_tmp; 788 788 field->setData(data); … … 817 817 context->eventLoop(); 818 818 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); 821 821 data = data_tmp; 822 822 field->setData(data); … … 852 852 context->eventLoop(); 853 853 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); 856 856 data = data_tmp; 857 857 field->setData(data); … … 890 890 context->eventLoop(); 891 891 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); 894 894 data = data_tmp; 895 895 field->setData(data); … … 927 927 context->eventLoop(); 928 928 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); 931 931 data = data_tmp; 932 932 field->setData(data); … … 964 964 context->eventLoop(); 965 965 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); 968 968 data = data_tmp; 969 969 field->setData(data); … … 1060 1060 context->eventLoop(); 1061 1061 1062 CArray_WF<double, 2>data(data_k8, data_Xsize*data_Ysize);1062 CArray_WF<double, 1>data(data_k8, data_Xsize*data_Ysize); 1063 1063 field->getData(data); 1064 1064 … … 1090 1090 context->eventLoop(); 1091 1091 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); 1093 1093 field->getData(data); 1094 1094 … … 1122 1122 context->eventLoop(); 1123 1123 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); 1125 1125 field->getData(data); 1126 1126 … … 1155 1155 context->eventLoop(); 1156 1156 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); 1158 1158 field->getData(data); 1159 1159 … … 1188 1188 context->eventLoop(); 1189 1189 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); 1191 1191 field->getData(data); 1192 1192 … … 1222 1222 context->eventLoop(); 1223 1223 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); 1225 1225 field->getData(data); 1226 1226 … … 1326 1326 context->eventLoop(); 1327 1327 1328 CArray_WF<double, 2> data(data_Xsize, data_Ysize);1328 CArray_WF<double, 1> data(data_Xsize, data_Ysize); 1329 1329 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); 1331 1331 data_tmp = data; 1332 1332 … … 1359 1359 context->eventLoop(); 1360 1360 1361 CArray_WF<double, 3> data(data_Xsize, data_Ysize, data_Zsize);1361 CArray_WF<double, 1> data(data_Xsize, data_Ysize, data_Zsize); 1362 1362 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); 1364 1364 data_tmp = data; 1365 1365 … … 1393 1393 context->eventLoop(); 1394 1394 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); 1396 1396 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); 1398 1398 data_tmp = data; 1399 1399 … … 1430 1430 context->eventLoop(); 1431 1431 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); 1433 1433 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); 1435 1435 data_tmp = data; 1436 1436 … … 1466 1466 context->eventLoop(); 1467 1467 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); 1469 1469 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); 1471 1471 data_tmp = data; 1472 1472 … … 1504 1504 context->eventLoop(); 1505 1505 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); 1507 1507 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); 1509 1509 data_tmp = data; 1510 1510
Note: See TracChangeset
for help on using the changeset viewer.