Ejemplo n.º 1
0
  BASKER_INLINE
  int Basker<Int, Entry, Exe_Space>::Symbolic(Int nrow, Int ncol,
	         Int nnz, Int *col_ptr, Int *row_idx, Entry *val)
  {

    //Init Matrix A.
    if(matrix_flag == BASKER_TRUE)
      {
	printf("YOU CANNOT RERUN SYMBOLIC\n");
	return BASKER_ERROR;
      }
    else
      {
	A.init_matrix("Original Matrix",
		  nrow, ncol, nnz, col_ptr, row_idx, val);
	A.scol = 0;
	A.srow = 0;
	sort_matrix(A);
	matrix_flag = BASKER_TRUE;
      }

    //Init Ordering
    //Always will do btf_ordering
    //This should also call create tree
    if(order_flag == BASKER_TRUE)
      {
	printf("YOU CANNOT RERUN ORDER\n");
	return BASKER_ERROR;
      }
    else
      {
	printf("btf_order called \n");
	//btf_order();
	btf_order2();
	if(btf_tabs_offset != 0)
	  {
	    basker_barrier.init(num_threads, 16, tree.nlvls );
	  }
	order_flag = BASKER_TRUE;
	//printf("btf_order done \n");
      }



    //printf("\n\n+++++++++++++++BREAKER BREAKER++++++++\n\n");

    

    if(symb_flag == BASKER_TRUE)
      {
        printf("YOU CANNOT RERUN SFACTOR\n");
	return BASKER_ERROR;
      }
    else
      {
	sfactor();
	symb_flag = BASKER_TRUE;
      }

    
    
    //printf("\nTEST ALM\n");
    //ALM(0)(0).info();
    //printf("\n");

    
    return 0;
	
  }//end Symbolic()
Ejemplo n.º 2
0
  BASKER_INLINE
  int Basker<Int, Entry, Exe_Space>::Symbolic(Int nrow, Int ncol,
	         Int nnz, Int *col_ptr, Int *row_idx, Entry *val)
  {
    // printf("befor symbolic\n");
    if(Options.verbose == BASKER_TRUE)
    {
      std::cout << "Basker Symbolic" << std::endl;
      std::cout << "Matrix: " << nrow << " " << ncol << " " << nnz << std::endl;
    }
    //Init Matrix A.
    if(matrix_flag == BASKER_TRUE)
    {
      printf("YOU CANNOT RERUN SYMBOLIC\n");
      return BASKER_ERROR;
    }
    else
    {
      //Kokkos::Impl::Timer timer_move;

      if(Options.transpose == BASKER_FALSE)
      {
        //printf("=======NO TRANS=====\n");
        A.init_matrix("Original Matrix",
            nrow, ncol, nnz, col_ptr, row_idx, val);
        A.scol = 0;
        A.srow = 0;

      }
      else
      {
        //printf("======TRANS=====\n");
        //Will transpose and put in A using little extra
        matrix_transpose(0, nrow,
            0, ncol,
            nnz,
            col_ptr,
            row_idx,
            val,
            A);
      }
      sort_matrix(A);

      if(Options.verbose == BASKER_TRUE)
      {
        printf("Basker Matrix Loaded \n");
      }

      if(Options.verbose_matrix_out == BASKER_TRUE)
      {
        printMTX("A_Symbolic.mtx", A);
      }

      matrix_flag = BASKER_TRUE;

      //std::cout << "Transpose A: " << timer_move.seconds()
      //	  << std::endl;
    }

    //Init Ordering
    //Always will do btf_ordering
    //This should also call create tree
    if(order_flag == BASKER_TRUE)
    {
      printf("YOU CANNOT RERUN ORDER\n");
      return BASKER_ERROR;
    }
    else
    {
      //printf("btf_order called \n");
      //btf_order();

      Kokkos::Impl::Timer timer_order;
      /*
         if(Options.incomplete == BASKER_TRUE)
         {
           order_incomplete();
         }
         else
         {
           btf_order2();
         }
      */
      btf_order2();

      if(Options.verbose == BASKER_TRUE)
      {
        printf("Basker Ordering Found \n");
      }

      //if(btf_tabs_offset != 0)
      if((Options.btf == BASKER_TRUE) && (btf_tabs_offset != 0))
      {
        basker_barrier.init(num_threads, 16, tree.nlvls );
      }
      order_flag = BASKER_TRUE;

      if(Options.verbose == BASKER_TRUE)
      {
        printf("Basker P2P Thread Barriers Init\n");
      }

      //std::cout << "Time Order/Init arrays " 
      //	  << timer_order.seconds()
      //	  << std::endl;

      //printf("btf_order done \n");
    }

    //printf("\n\n+++++++++++++++BREAKER BREAKER++++++++\n\n");

    if(symb_flag == BASKER_TRUE)
    {
      printf("YOU CANNOT RERUN SFACTOR\n");
      return BASKER_ERROR;
    }
    else
    {
      if(Options.incomplete == BASKER_FALSE)
      {
        sfactor();
      }
      else
      {
        sfactor_inc();
      }

      if(Options.verbose == BASKER_TRUE)
      {
        printf("Basker Nonzero Counts Found \n");
      }
      symb_flag = BASKER_TRUE;
    }


    if(Options.verbose == BASKER_TRUE)
    {
      printf("Basker Symbolic Done \n");
    }

    //printf("\nTEST ALM\n");
    //ALM(0)(0).info();
    //printf("\n");

    return 0;

  }//end Symbolic()