inline void Print ( const DistMatrix<T,U,V>& A, std::string title="", std::ostream& os=std::cout ) { #ifndef RELEASE CallStackEntry entry("Print"); #endif DistMatrix<T,CIRC,CIRC> A_CIRC_CIRC( A ); if( A.Grid().VCRank() == A_CIRC_CIRC.Root() ) Print( A_CIRC_CIRC.LockedMatrix(), title, os ); }
int main(int argc, char* argv[]) { /** Initialize MPI */ boost::mpi::environment env(argc, argv); boost::mpi::communicator world; /** Initialize Elemental */ El::Initialize (argc, argv); MPI_Comm mpi_world(world); El::Grid grid(mpi_world); /** Example parameters */ int height = 20; int width = 10; int sketch_size = 5; /** Define input matrix A */ #ifdef LOCAL input_matrix_t A; El::Uniform(A, height, width); #else dist_CIRC_CIRC_dense_matrix_t A_CIRC_CIRC(grid); input_matrix_t A(grid); El::Uniform(A_CIRC_CIRC, height, width); A = A_CIRC_CIRC; #endif /** Initialize context */ skylark::base::context_t context(0); #ifdef ROWWISE /** Sketch transform (rowwise)*/ int size = width; /** Distributed matrix computation */ output_matrix_t sketched_A(height, sketch_size); sketch_transform_t sketch_transform(size, sketch_size, context); sketch_transform.apply(A, sketched_A, skylark::sketch::rowwise_tag()); #else /** Sketch transform (columnwise)*/ int size = height; /** Distributed matrix computation */ output_matrix_t sketched_A(sketch_size, width); sketch_transform_t sketch_transform(size, sketch_size, context); sketch_transform.apply(A, sketched_A, skylark::sketch::columnwise_tag()); #endif #ifdef ROOT_OUTPUT if (world.rank() == 0) { #endif El::Print(sketched_A, "sketched_A"); #ifdef ROOT_OUTPUT } #endif El::Finalize(); return 0; }
int test_main(int argc, char* argv[]) { /** Initialize Elemental */ El::Initialize (argc, argv); /** Initialize MPI */ boost::mpi::environment env(argc, argv); boost::mpi::communicator world; MPI_Comm mpi_world(world); El::Grid grid(mpi_world); /** Example parameters */ int height = 20; int width = 10; int sketch_size = 5; dist_CIRC_CIRC_dense_matrix_t A_CIRC_CIRC(grid); input_matrix_t A(grid); El::Uniform(A_CIRC_CIRC, height, width); A = A_CIRC_CIRC; int size; /** Sketch transform rowwise (rw) */ size = width; skylark::base::context_t context_rw(0); output_matrix_t sketched_A_rw(height, sketch_size, grid); sketch_transform_t sketch_transform_rw(size, sketch_size, context_rw); sketch_transform_rw.apply(A, sketched_A_rw, skylark::sketch::rowwise_tag()); dist_CIRC_CIRC_dense_matrix_t sketched_A_rw_CIRC_CIRC = sketched_A_rw; if(world.rank() == 0) { dense_matrix_t sketched_A_rw_gathered = sketched_A_rw_CIRC_CIRC.Matrix(); skylark::base::context_t context_rw_local(0); dense_matrix_t A_rw_local = A_CIRC_CIRC.Matrix(); dense_matrix_t sketched_A_rw_local(height, sketch_size); sketch_transform_local_t sketch_transform_rw_local(size, sketch_size, context_rw_local); sketch_transform_rw_local.apply(A_rw_local, sketched_A_rw_local, skylark::sketch::rowwise_tag()); if (!test::util::equal(sketched_A_rw_gathered, sketched_A_rw_local)) BOOST_FAIL("Rowwise sketching resuts are not equal"); } /** Sketch transform columnwise (cw) */ size = height; skylark::base::context_t context_cw(0); output_matrix_t sketched_A_cw(sketch_size, width, grid); sketch_transform_t sketch_transform_cw(size, sketch_size, context_cw); sketch_transform_cw.apply(A, sketched_A_cw, skylark::sketch::columnwise_tag()); dist_CIRC_CIRC_dense_matrix_t sketched_A_cw_CIRC_CIRC = sketched_A_cw; if(world.rank() == 0) { dense_matrix_t sketched_A_cw_gathered = sketched_A_cw_CIRC_CIRC.Matrix(); skylark::base::context_t context_cw_local(0); dense_matrix_t A_cw_local = A_CIRC_CIRC.Matrix(); dense_matrix_t sketched_A_cw_local(sketch_size, width); sketch_transform_local_t sketch_transform_cw_local(size, sketch_size, context_cw_local); sketch_transform_cw_local.apply(A_cw_local, sketched_A_cw_local, skylark::sketch::columnwise_tag()); if (!test::util::equal(sketched_A_cw_gathered, sketched_A_cw_local)) BOOST_FAIL("Columnwise sketching resuts are not equal"); } El::Finalize(); return 0; }