71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*!
 | |
|  * \file    utils.cpp
 | |
|  * \brief   Utilities to handle matrix files, chrono, etc...
 | |
|  *
 | |
|  * \author
 | |
|  *    Christos Choutouridis AEM:8997
 | |
|  *    <cchoutou@ece.auth.gr>
 | |
|  */
 | |
| 
 | |
| #include <utils.h>
 | |
| #include <algorithm>
 | |
| 
 | |
| /*!
 | |
|  * Initialize the matrix as Erdős-Rényi graph
 | |
|  * \param A    The matrix to initialize
 | |
|  * \param p    The probability of each edge
 | |
|  */
 | |
| void init_ER_graph (matrix& A, double p) {
 | |
|    std::random_device rd;
 | |
|    std::mt19937 gen(rd());
 | |
|    std::binomial_distribution<> d(1, p);
 | |
| 
 | |
| #if CODE_VERSION == V12
 | |
|    std::transform (A.begin(), A.end(), A.begin(),
 | |
|          [&] (int x) { std::ignore =x; return d(gen); }
 | |
| #else
 | |
|    A.for_each_in(0, A.size(), [&](auto i) {
 | |
|       A.for_each_in(i+1, A.size(), [&](auto j){
 | |
|          matrix::dataType edge = d(gen);
 | |
|          if (edge) {
 | |
|             A.set(edge, i, j);
 | |
|             A.set(edge, j, i);
 | |
|          }
 | |
|       });
 | |
|    });
 | |
| #endif
 | |
| 
 | |
| }
 | |
| 
 | |
| /*!
 | |
|  * Utility to print the graph to sdtout
 | |
|  */
 | |
| void print_graph (matrix& A) {
 | |
|    matrix::indexType N = (A.size() < (matrix::indexType)session.mtx_print_size) ? A.size() : session.mtx_print_size;
 | |
| 
 | |
|    A.for_each_in(0, N, [&](auto i){
 | |
|       A.for_each_in(0, N, [&](auto j) {
 | |
|          std::cout << A(i, j) << ' ';
 | |
|       });
 | |
|       std::cout << '\n';
 | |
|    });
 | |
| }
 | |
| 
 | |
| /*!
 | |
|  * Utility to print to logger thread information
 | |
|  */
 | |
| void threads_info () {
 | |
| #if defined CILK
 | |
|    logger << "Running with max threads: " << __cilkrts_get_nworkers() << logger.endl;
 | |
|    logger << "Utilizing " << __cilkrts_get_nworkers() << " threads for calculating vector." << logger.endl;
 | |
|    logger << "Utilizing " << nworkers() << " threads for calculating sum." << logger.endl;
 | |
| #elif defined OMP
 | |
|    logger << "Running with max threads: " << nworkers() << logger.endl;
 | |
| #elif defined THREADS
 | |
|    logger << "Running with max threads: " << nworkers() << logger.endl;
 | |
| #else
 | |
|    logger << "Running the serial version of the algorithm." << logger.endl;
 | |
| #endif
 | |
| }
 | |
| 
 |