Esempio n. 1
0
int main()
{
	CNetlist2 *netlist = new CNetlist2();
	AllCells *allCells = new AllCells();

	std::ifstream *netlistFile = new std::ifstream();
	netlistFile->open("netlist.txt");
	CNetlistFileParser *netlistFileParser = new CNetlistFileParser(netlistFile, netlist, allCells);
	netlistFileParser->ParseFile();
	delete netlistFileParser;
	netlistFileParser = NULL;
	delete netlistFile;
	netlistFile = NULL;

	int numCells = netlist->getNumCells();

	MatrixSd mat_C(numCells, numCells);
	MatrixSd vec_dx(numCells, 1);
	MatrixSd vec_dy(numCells, 1);
	mat_C.reserve(numCells * 2);
	vec_dx.reserve(numCells * 2 / 3 + 1);
	vec_dy.reserve(numCells * 2 / 3 + 1);

	CGORDIAN *GORDIAN = new CGORDIAN(netlist, allCells, mat_C, vec_dx, vec_dy);
	GORDIAN->doGORDIAN();
	delete GORDIAN;
	GORDIAN = NULL;

	delete netlist;
	netlist = NULL;
	for (AllCells::iterator it = allCells->begin(); it != allCells->end(); ++it)
	{
		delete it->second;
		it->second = NULL;
	}
	delete allCells;
	allCells = NULL;

#ifdef _DEBUG
	Eigen::MatrixXd d_mat_C = Eigen::MatrixXd(mat_C);
	Eigen::MatrixXd d_vec_dx = Eigen::MatrixXd(vec_dx);
	Eigen::MatrixXd d_vec_dy = Eigen::MatrixXd(vec_dy);

	std::cout << d_mat_C << std::endl << std::endl;
	std::cout << d_vec_dx << std::endl << std::endl;
	std::cout << d_vec_dy << std::endl << std::endl;
#endif

	std::cout << std::endl;
	std::cin.get();

	return (0);
}
Esempio n. 2
0
VIENNACL_EXPORTED_FUNCTION ViennaCLStatus ViennaCLgemm(ViennaCLHostScalar alpha, ViennaCLMatrix A, ViennaCLMatrix B, ViennaCLHostScalar beta, ViennaCLMatrix C)
{
  viennacl::backend::mem_handle A_handle;
  viennacl::backend::mem_handle B_handle;
  viennacl::backend::mem_handle C_handle;

  if (init_matrix(A_handle, A) != ViennaCLSuccess)
    return ViennaCLGenericFailure;

  if (init_matrix(B_handle, B) != ViennaCLSuccess)
    return ViennaCLGenericFailure;

  if (init_matrix(C_handle, C) != ViennaCLSuccess)
    return ViennaCLGenericFailure;

  switch (A->precision)
  {
    case ViennaCLFloat:
    {
      typedef viennacl::matrix_base<float>::size_type           size_type;
      typedef viennacl::matrix_base<float>::difference_type     difference_type;

      viennacl::matrix_base<float> mat_A(A_handle,
                                         size_type(A->size1), size_type(A->start1), difference_type(A->stride1), size_type(A->internal_size1),
                                         size_type(A->size2), size_type(A->start2), difference_type(A->stride2), size_type(A->internal_size2), A->order == ViennaCLRowMajor);
      viennacl::matrix_base<float> mat_B(B_handle,
                                         size_type(B->size1), size_type(B->start1), difference_type(B->stride1), size_type(B->internal_size1),
                                         size_type(B->size2), size_type(B->start2), difference_type(B->stride2), size_type(B->internal_size2), B->order == ViennaCLRowMajor);
      viennacl::matrix_base<float> mat_C(C_handle,
                                         size_type(C->size1), size_type(C->start1), difference_type(C->stride1), size_type(C->internal_size1),
                                         size_type(C->size2), size_type(C->start2), difference_type(C->stride2), size_type(C->internal_size2), C->order == ViennaCLRowMajor);

      if (A->trans == ViennaCLTrans && B->trans == ViennaCLTrans)
        viennacl::linalg::prod_impl(viennacl::trans(mat_A), viennacl::trans(mat_B), mat_C, alpha->value_float, beta->value_float);
      else if (A->trans == ViennaCLTrans && B->trans == ViennaCLNoTrans)
        viennacl::linalg::prod_impl(viennacl::trans(mat_A), mat_B, mat_C, alpha->value_float, beta->value_float);
      else if (A->trans == ViennaCLNoTrans && B->trans == ViennaCLTrans)
        viennacl::linalg::prod_impl(mat_A, viennacl::trans(mat_B), mat_C, alpha->value_float, beta->value_float);
      else if (A->trans == ViennaCLNoTrans && B->trans == ViennaCLNoTrans)
        viennacl::linalg::prod_impl(mat_A, mat_B, mat_C, alpha->value_float, beta->value_float);
      else
        return ViennaCLGenericFailure;

      return ViennaCLSuccess;
    }

    case ViennaCLDouble:
    {
      typedef viennacl::matrix_base<double>::size_type           size_type;
      typedef viennacl::matrix_base<double>::difference_type     difference_type;

      viennacl::matrix_base<double> mat_A(A_handle,
                                          size_type(A->size1), size_type(A->start1), difference_type(A->stride1), size_type(A->internal_size1),
                                          size_type(A->size2), size_type(A->start2), difference_type(A->stride2), size_type(A->internal_size2), A->order == ViennaCLRowMajor);
      viennacl::matrix_base<double> mat_B(B_handle,
                                          size_type(B->size1), size_type(B->start1), difference_type(B->stride1), size_type(B->internal_size1),
                                          size_type(B->size2), size_type(B->start2), difference_type(B->stride2), size_type(B->internal_size2), B->order == ViennaCLRowMajor);
      viennacl::matrix_base<double> mat_C(C_handle,
                                          size_type(C->size1), size_type(C->start1), difference_type(C->stride1), size_type(C->internal_size1),
                                          size_type(C->size2), size_type(C->start2), difference_type(C->stride2), size_type(C->internal_size2), C->order == ViennaCLRowMajor);

      if (A->trans == ViennaCLTrans && B->trans == ViennaCLTrans)
        viennacl::linalg::prod_impl(viennacl::trans(mat_A), viennacl::trans(mat_B), mat_C, alpha->value_double, beta->value_double);
      else if (A->trans == ViennaCLTrans && B->trans == ViennaCLNoTrans)
        viennacl::linalg::prod_impl(viennacl::trans(mat_A), mat_B, mat_C, alpha->value_double, beta->value_double);
      else if (A->trans == ViennaCLNoTrans && B->trans == ViennaCLTrans)
        viennacl::linalg::prod_impl(mat_A, viennacl::trans(mat_B), mat_C, alpha->value_double, beta->value_double);
      else if (A->trans == ViennaCLNoTrans && B->trans == ViennaCLNoTrans)
        viennacl::linalg::prod_impl(mat_A, mat_B, mat_C, alpha->value_double, beta->value_double);
      else
        return ViennaCLGenericFailure;

      return ViennaCLSuccess;
    }

    default:
      return ViennaCLGenericFailure;
  }
}