Loading Documentation/Examples/Algorithms/Segments/CMakeLists.txt +6 −0 Original line number Diff line number Diff line set( COMMON_EXAMPLES SegmentsExample_General SegmentsPrintingExample-1 SegmentsPrintingExample-2 SegmentsExample_CSR_constructor_1 SegmentsExample_CSR_constructor_2 SegmentsExample_CSR_getSerializationType Loading @@ -10,6 +12,10 @@ set( COMMON_EXAMPLES SegmentsExample_CSR_forSegments SegmentsExample_CSR_sequentialForSegments SegmentsExample_CSR_reduceSegments SegmentsExample_forElements SegmentsExample_forSegments-1 SegmentsExample_forSegments-2 SegmentsExample_reduceSegments ) if( BUILD_CUDA ) Loading Documentation/Examples/Algorithms/Segments/SegmentsExample_forElements.cpp 0 → 100644 +73 −0 Original line number Diff line number Diff line #include <iostream> #include <TNL/Containers/Vector.h> #include <TNL/Algorithms/Segments/CSR.h> #include <TNL/Algorithms/Segments/Ellpack.h> #include <TNL/Devices/Host.h> #include <TNL/Devices/Cuda.h> template< typename Segments > void SegmentsExample() { using Device = typename Segments::DeviceType; /*** * Create segments with given segments sizes. */ Segments segments{ 1, 2, 3, 4, 5 }; /*** * Allocate array for the segments; */ TNL::Containers::Array< double, Device > data( segments.getStorageSize(), 0.0 ); /*** * Insert data into particular segments with no check. */ auto data_view = data.getView(); segments.forAllElements( [=] __cuda_callable__ ( int segmentIdx, int localIdx, int globalIdx ) mutable { data_view[ globalIdx ] = segmentIdx; } ); /*** * Print the data managed by the segments. */ std::cout << "Data setup with no check ... " << std::endl; std::cout << "Array: " << data << std::endl; auto fetch = [=] __cuda_callable__ ( int globalIdx ) -> double { return data_view[ globalIdx ]; }; printSegments( segments, fetch, std::cout ) << std::endl; /*** * Insert data into particular segments. */ data = 0.0; segments.forAllElements( [=] __cuda_callable__ ( int segmentIdx, int localIdx, int globalIdx ) mutable { if( localIdx <= segmentIdx ) data_view[ globalIdx ] = segmentIdx; } ); /*** * Print the data managed by the segments. */ std::cout << "Data setup with check for padding elements..." << std::endl; std::cout << "Array: " << data << std::endl; printSegments( segments, fetch, std::cout ) << std::endl; } int main( int argc, char* argv[] ) { std::cout << "Example of CSR segments on host: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::CSR< TNL::Devices::Host, int > >(); std::cout << "Example of Ellpack segments on host: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::Ellpack< TNL::Devices::Host, int > >(); #ifdef HAVE_CUDA std::cout << "Example of CSR segments on CUDA GPU: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::CSR< TNL::Devices::Cuda, int > >(); std::cout << "Example of Ellpack segments on CUDA GPU: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::Ellpack< TNL::Devices::Cuda, int > >(); #endif return EXIT_SUCCESS; } Documentation/Examples/Algorithms/Segments/SegmentsExample_forElements.cu 0 → 120000 +1 −0 Original line number Diff line number Diff line SegmentsExample_forElements.cpp No newline at end of file Documentation/Examples/Algorithms/Segments/SegmentsExample_forSegments-1.cpp 0 → 100644 +62 −0 Original line number Diff line number Diff line #include <iostream> #include <TNL/Containers/Vector.h> #include <TNL/Algorithms/Segments/CSR.h> #include <TNL/Algorithms/Segments/Ellpack.h> #include <TNL/Devices/Host.h> #include <TNL/Devices/Cuda.h> template< typename Segments > void SegmentsExample() { using Device = typename Segments::DeviceType; /*** * Create segments with given segments sizes. */ Segments segments{ 1, 2, 3, 4, 5 }; /*** * Allocate array for the segments; */ TNL::Containers::Array< double, Device > data( segments.getStorageSize(), 0.0 ); /*** * Insert data into particular segments. */ auto data_view = data.getView(); using SegmentViewType = typename Segments::SegmentViewType; segments.forAllSegments( [=] __cuda_callable__ ( const SegmentViewType& segment ) mutable { double sum( 0.0 ); for( auto element : segment ) if( element.localIndex() <= element.segmentIndex() ) { sum += element.localIndex() + 1; data_view[ element.globalIndex() ] = sum; } } ); /*** * Print the data managed by the segments. */ auto fetch = [=] __cuda_callable__ ( int globalIdx ) -> double { return data_view[ globalIdx ]; }; printSegments( segments, fetch, std::cout ); } int main( int argc, char* argv[] ) { std::cout << "Example of CSR segments on host: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::CSR< TNL::Devices::Host, int > >(); std::cout << "Example of Ellpack segments on host: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::Ellpack< TNL::Devices::Host, int > >(); #ifdef HAVE_CUDA std::cout << "Example of CSR segments on CUDA GPU: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::CSR< TNL::Devices::Cuda, int > >(); std::cout << "Example of Ellpack segments on CUDA GPU: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::Ellpack< TNL::Devices::Cuda, int > >(); #endif return EXIT_SUCCESS; } Documentation/Examples/Algorithms/Segments/SegmentsExample_forSegments-1.cu 0 → 120000 +1 −0 Original line number Diff line number Diff line SegmentsExample_forSegments-1.cpp No newline at end of file Loading
Documentation/Examples/Algorithms/Segments/CMakeLists.txt +6 −0 Original line number Diff line number Diff line set( COMMON_EXAMPLES SegmentsExample_General SegmentsPrintingExample-1 SegmentsPrintingExample-2 SegmentsExample_CSR_constructor_1 SegmentsExample_CSR_constructor_2 SegmentsExample_CSR_getSerializationType Loading @@ -10,6 +12,10 @@ set( COMMON_EXAMPLES SegmentsExample_CSR_forSegments SegmentsExample_CSR_sequentialForSegments SegmentsExample_CSR_reduceSegments SegmentsExample_forElements SegmentsExample_forSegments-1 SegmentsExample_forSegments-2 SegmentsExample_reduceSegments ) if( BUILD_CUDA ) Loading
Documentation/Examples/Algorithms/Segments/SegmentsExample_forElements.cpp 0 → 100644 +73 −0 Original line number Diff line number Diff line #include <iostream> #include <TNL/Containers/Vector.h> #include <TNL/Algorithms/Segments/CSR.h> #include <TNL/Algorithms/Segments/Ellpack.h> #include <TNL/Devices/Host.h> #include <TNL/Devices/Cuda.h> template< typename Segments > void SegmentsExample() { using Device = typename Segments::DeviceType; /*** * Create segments with given segments sizes. */ Segments segments{ 1, 2, 3, 4, 5 }; /*** * Allocate array for the segments; */ TNL::Containers::Array< double, Device > data( segments.getStorageSize(), 0.0 ); /*** * Insert data into particular segments with no check. */ auto data_view = data.getView(); segments.forAllElements( [=] __cuda_callable__ ( int segmentIdx, int localIdx, int globalIdx ) mutable { data_view[ globalIdx ] = segmentIdx; } ); /*** * Print the data managed by the segments. */ std::cout << "Data setup with no check ... " << std::endl; std::cout << "Array: " << data << std::endl; auto fetch = [=] __cuda_callable__ ( int globalIdx ) -> double { return data_view[ globalIdx ]; }; printSegments( segments, fetch, std::cout ) << std::endl; /*** * Insert data into particular segments. */ data = 0.0; segments.forAllElements( [=] __cuda_callable__ ( int segmentIdx, int localIdx, int globalIdx ) mutable { if( localIdx <= segmentIdx ) data_view[ globalIdx ] = segmentIdx; } ); /*** * Print the data managed by the segments. */ std::cout << "Data setup with check for padding elements..." << std::endl; std::cout << "Array: " << data << std::endl; printSegments( segments, fetch, std::cout ) << std::endl; } int main( int argc, char* argv[] ) { std::cout << "Example of CSR segments on host: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::CSR< TNL::Devices::Host, int > >(); std::cout << "Example of Ellpack segments on host: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::Ellpack< TNL::Devices::Host, int > >(); #ifdef HAVE_CUDA std::cout << "Example of CSR segments on CUDA GPU: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::CSR< TNL::Devices::Cuda, int > >(); std::cout << "Example of Ellpack segments on CUDA GPU: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::Ellpack< TNL::Devices::Cuda, int > >(); #endif return EXIT_SUCCESS; }
Documentation/Examples/Algorithms/Segments/SegmentsExample_forElements.cu 0 → 120000 +1 −0 Original line number Diff line number Diff line SegmentsExample_forElements.cpp No newline at end of file
Documentation/Examples/Algorithms/Segments/SegmentsExample_forSegments-1.cpp 0 → 100644 +62 −0 Original line number Diff line number Diff line #include <iostream> #include <TNL/Containers/Vector.h> #include <TNL/Algorithms/Segments/CSR.h> #include <TNL/Algorithms/Segments/Ellpack.h> #include <TNL/Devices/Host.h> #include <TNL/Devices/Cuda.h> template< typename Segments > void SegmentsExample() { using Device = typename Segments::DeviceType; /*** * Create segments with given segments sizes. */ Segments segments{ 1, 2, 3, 4, 5 }; /*** * Allocate array for the segments; */ TNL::Containers::Array< double, Device > data( segments.getStorageSize(), 0.0 ); /*** * Insert data into particular segments. */ auto data_view = data.getView(); using SegmentViewType = typename Segments::SegmentViewType; segments.forAllSegments( [=] __cuda_callable__ ( const SegmentViewType& segment ) mutable { double sum( 0.0 ); for( auto element : segment ) if( element.localIndex() <= element.segmentIndex() ) { sum += element.localIndex() + 1; data_view[ element.globalIndex() ] = sum; } } ); /*** * Print the data managed by the segments. */ auto fetch = [=] __cuda_callable__ ( int globalIdx ) -> double { return data_view[ globalIdx ]; }; printSegments( segments, fetch, std::cout ); } int main( int argc, char* argv[] ) { std::cout << "Example of CSR segments on host: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::CSR< TNL::Devices::Host, int > >(); std::cout << "Example of Ellpack segments on host: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::Ellpack< TNL::Devices::Host, int > >(); #ifdef HAVE_CUDA std::cout << "Example of CSR segments on CUDA GPU: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::CSR< TNL::Devices::Cuda, int > >(); std::cout << "Example of Ellpack segments on CUDA GPU: " << std::endl; SegmentsExample< TNL::Algorithms::Segments::Ellpack< TNL::Devices::Cuda, int > >(); #endif return EXIT_SUCCESS; }
Documentation/Examples/Algorithms/Segments/SegmentsExample_forSegments-1.cu 0 → 120000 +1 −0 Original line number Diff line number Diff line SegmentsExample_forSegments-1.cpp No newline at end of file