diff --git a/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-1.cpp b/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-1.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f5fc25337cd0b5d6470c5ac2e507c4b8ef19fd53 --- /dev/null +++ b/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-1.cpp @@ -0,0 +1,49 @@ +#include <iostream> +#include <functional> +#include <TNL/Containers/Vector.h> +#include <TNL/Algorithms/Segments/CSR.h> +#include <TNL/Algorithms/Segments/Ellpack.h> +#include <TNL/Algorithms/Segments/ChunkedEllpack.h> +#include <TNL/Algorithms/Segments/BiEllpack.h> +#include <TNL/Devices/Host.h> +#include <TNL/Devices/Cuda.h> + +template< typename Segments > +void SegmentsExample() +{ + /*** + * Create segments with given segments sizes and print their setup. + */ + Segments segments{ 1, 2, 3, 4, 5 }; + std::cout << "Segments sizes are: " << segments << std::endl << 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 > >(); + + std::cout << "Example of ChunkedEllpack segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::ChunkedEllpack< TNL::Devices::Host, int > >(); + + std::cout << "Example of BiEllpack segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::BiEllpack< TNL::Devices::Host, int > >(); + +#ifdef HAVE_CUDA + std::cout << "Example of CSR segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::CSR< TNL::Devices::Cuda, int > >(); + + std::cout << "Example of Ellpack segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::Ellpack< TNL::Devices::Cuda, int > >(); + + std::cout << "Example of ChunkedEllpack segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::ChunkedEllpack< TNL::Devices::Cuda, int > >(); + + std::cout << "Example of BiEllpack segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::BiEllpack< TNL::Devices::Cuda, int > >(); +#endif + return EXIT_SUCCESS; +} diff --git a/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-1.cu b/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-1.cu new file mode 120000 index 0000000000000000000000000000000000000000..42cd3852fcf53d8d8fe347f3e5f6b4d47ea9d86c --- /dev/null +++ b/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-1.cu @@ -0,0 +1 @@ +SegmentsPrintingExample-1.cpp \ No newline at end of file diff --git a/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-2.cpp b/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-2.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ceaff0ecd9964da0ed87d223c28a583b0c7c9fc9 --- /dev/null +++ b/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-2.cpp @@ -0,0 +1,68 @@ +#include <iostream> +#include <functional> +#include <TNL/Containers/Vector.h> +#include <TNL/Algorithms/Segments/CSR.h> +#include <TNL/Algorithms/Segments/Ellpack.h> +#include <TNL/Algorithms/Segments/ChunkedEllpack.h> +#include <TNL/Algorithms/Segments/BiEllpack.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. + */ + TNL::Containers::Vector< int, Device > sizes{ 1, 2, 3, 4, 5 }; + Segments segments( sizes ); + std::cout << "Segments sizes are: " << segments << std::endl; + + /*** + * Allocate array for the segments; + */ + TNL::Containers::Array< double, Device > data( segments.getStorageSize(), 0.0 ); + data.forAllElements( [=] __cuda_callable__ ( int idx, double& value ) { + value = idx + 1.0; + } ); + + /*** + * Print the data managed by the segments. + */ + auto data_view = data.getView(); + auto fetch = [=] __cuda_callable__ ( int globalIdx ) -> double { return data_view[ globalIdx ]; }; + printSegments( segments, fetch, std::cout ); + 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 > >(); + + std::cout << "Example of ChunkedEllpack segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::ChunkedEllpack< TNL::Devices::Host, int > >(); + + std::cout << "Example of BiEllpack segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::BiEllpack< TNL::Devices::Host, int > >(); + +#ifdef HAVE_CUDA + std::cout << "Example of CSR segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::CSR< TNL::Devices::Cuda, int > >(); + + std::cout << "Example of Ellpack segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::Ellpack< TNL::Devices::Cuda, int > >(); + + std::cout << "Example of ChunkedEllpack segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::ChunkedEllpack< TNL::Devices::Cuda, int > >(); + + std::cout << "Example of BiEllpack segments on host: " << std::endl; + SegmentsExample< TNL::Algorithms::Segments::BiEllpack< TNL::Devices::Cuda, int > >(); +#endif + return EXIT_SUCCESS; +} diff --git a/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-2.cu b/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-2.cu new file mode 120000 index 0000000000000000000000000000000000000000..2f3149802f11c622ca908556b3d21412361879cc --- /dev/null +++ b/Documentation/Examples/Algorithms/Segments/SegmentsPrintingExample-2.cu @@ -0,0 +1 @@ +SegmentsPrintingExample-2.cpp \ No newline at end of file