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); }
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; } }