Beispiel #1
0
int main(int argc, char *argv[]) {
  int info;
  int m = 6;
  int n = 4;
  if (argc > 2) {
    m = boost::lexical_cast<int>(argv[1]);
    n = boost::lexical_cast<int>(argv[2]);
  }
  std::cout << "m = " << m << "\nn = " << n << std::endl;
  int k = std::min(m, n);

  // generate random martix
  matrix_t mat = matrix_t::Random(m, n);
  std::cout << "Input random matrix A:\n" << mat << std::endl;

  // singular value decomposition
  matrix_t a = mat; // 'a' will be destroyed by dgesvd
  vector_t s(k), superb(k);
  matrix_t u(m, k), vt(k, n);
  info = LAPACKE_zgesvd(LAPACK_COL_MAJOR, 'S', 'S', m, n, &a(0, 0), m, &s(0),
                         &u(0, 0), m, &vt(0, 0), k, &superb(0));
  std::cout << "U:\n" << u << std::endl;
  std::cout << "S:\n" << s << std::endl;
  std::cout << "Vt:\n" << vt << std::endl;

  // check correctness of SVD
  matrix_t smat = matrix_t::Zero(k, k);
  for (int i = 0; i < k; ++i) smat(i, i) = s(i);
  matrix_t check = u * smat * vt;
  std::cout << "U * S * Vt:\n" << check << std::endl;
  std::cout << "| A - U * S * Vt | = " << (mat - check).norm() << std::endl;
}
void test_direct_trans()
{
	const index_t m = M == 0 ? DM : M;
	const index_t n = N == 0 ? DN : N;

	// M x N ==> N x M

	typedef typename mat_host<Tag1, double, M, N>::cmat_t cmat_t;
	typedef typename mat_host<Tag2, double, N, M>::mat_t mat_t;

	mat_host<Tag1, double, M, N> src(m, n);
	mat_host<Tag2, double, N, M> dst(n, m);

	src.fill_lin();

	cmat_t smat = src.get_cmat();
	mat_t dmat = dst.get_mat();

	transpose(smat, dmat);

	dense_matrix<double, N, M> rmat(n, m);
	for (index_t i = 0; i < m; ++i)
	{
		for (index_t j = 0; j < n; ++j) rmat(j, i) = smat(i, j);
	}

	ASSERT_MAT_EQ(n, m, dmat, rmat);

	// N x M ==> M x N

	typedef typename mat_host<Tag1, double, N, M>::cmat_t cmat2_t;
	typedef typename mat_host<Tag2, double, M, N>::mat_t mat2_t;

	mat_host<Tag1, double, N, M> src2(n, m);
	mat_host<Tag2, double, M, N> dst2(m, n);

	src2.fill_lin();

	cmat2_t smat2 = src2.get_cmat();
	mat2_t dmat2 = dst2.get_mat();

	transpose(smat2, dmat2);

	dense_matrix<double, M, N> rmat2(m, n);
	for (index_t i = 0; i < m; ++i)
	{
		for (index_t j = 0; j < n; ++j) rmat2(i, j) = smat2(j, i);
	}

	ASSERT_MAT_EQ(m, n, dmat2, rmat2);

}
static CRef<CGeneralScoreMatrix> s_ReadScoreMatrix(const string& filename)
{
    CNcbiIfstream istr(filename.c_str());
    BOOST_REQUIRE(istr);
    vector<Int4> scores;
    while (!istr.eof()) {
        Int4 val;
        istr >> val;
        scores.push_back(val);
    }
    CRef<CGeneralScoreMatrix> smat(new CGeneralScoreMatrix(scores));
    return smat;
}
Beispiel #4
0
Action::Status AbortAction::run() {
	owner->start(this);
	if (message.length() > 0) {
		SendMessageActionTemplate smat(this->message.c_str(), owner);
		Action *sma = smat.factory(owner);
		(*sma)();
	}
	abort();
	if (abort_fail) {
		status = Failed;
		error_str = strdup(message.c_str());
	}
	else
		status = Complete;
	owner->stop(this);
	return status;
}
Beispiel #5
0
CPM_BENCH() {
    CPM_TWO_PASS_NS_P(
        pmp_policy,
        "pmp_h(c=2) (s) [pmp][s]",
        [](size_t d){ return std::make_tuple(smat(d, d), smat(d,d)); },
        [](smat& a, smat& r){ r = etl::p_max_pool_h<2,2>(a); },
        [](size_t d){ return 2 * d * d * 2 * 2; }
        );

#ifdef ETL_EXTENDED_BENCH
    CPM_TWO_PASS_NS_P(
        pmp_policy_3,
        "pmp_h_3(c=2) (s) [pmp][s]",
        [](size_t d){ return std::make_tuple(smat3(50UL, d, d), smat3(50UL, d,d)); },
        [](smat3& a, smat3& r){ r = etl::p_max_pool_h<2,2>(a); },
        [](size_t d){ return 50 * 2 * d * d * 2 * 2; }
        );

    CPM_TWO_PASS_NS_P(
        pmp_policy_3,
        "pmp_h_4(c=2) (s) [pmp][s]",
        [](size_t d){ return std::make_tuple(smat4(50UL, 50UL, d, d), smat4(50UL, 50UL, d,d)); },
        [](smat4& a, smat4& r){ r = etl::p_max_pool_h<2,2>(a); },
        [](size_t d){ return 50 * 50 * 2 * d * d * 2 * 2; }
        );

    CPM_TWO_PASS_NS_P(
        pmp_policy,
        "dyn_pmp_h(c=2) (s) [pmp][s]",
        [](size_t d){ return std::make_tuple(smat(d, d), smat(d, d)); },
        [](smat& a, smat& r){ r = etl::p_max_pool_h(a, 2, 2); },
        [](size_t d){ return 2 * d * d * 2 * 2; }
        );
#endif

    CPM_TWO_PASS_NS_P(
        pmp_policy,
        "pmp_p(c=2) (s) [pmp][s]",
        [](size_t d){ return std::make_tuple(smat(d, d), smat(d/2,d/2)); },
        [](smat& a, smat& r){ r = etl::p_max_pool_p<2,2>(a); },
        [](size_t d){ return 2 * d * d * 2 * 2; }
        );

    CPM_TWO_PASS_NS_P(
        pmp_policy,
        "pmp_h(c=4) (s) [pmp][s]",
        [](size_t d){ return std::make_tuple(smat(d, d), smat(d,d)); },
        [](smat& a, smat& r){ r = etl::p_max_pool_h<4,4>(a); },
        [](size_t d){ return 2 * d * d * 4 * 4; }
        );

    CPM_TWO_PASS_NS_P(
        pmp_policy,
        "pmp_p(c=4) (s) [pmp][s]",
        [](size_t d){ return std::make_tuple(smat(d, d), smat(d/4,d/4)); },
        [](smat& a, smat& r){ r = etl::p_max_pool_p<4,4>(a); },
        [](size_t d){ return 2 * d * d * 4 * 4; }
        );

    CPM_TWO_PASS_NS_P(
        pmp_policy,
        "pmp_h(c=2) (d) [pmp][s]",
        [](size_t d){ return std::make_tuple(dmat(d, d), dmat(d,d)); },
        [](dmat& a, dmat& r){ r = etl::p_max_pool_h<2,2>(a); },
        [](size_t d){ return 2 * d * d * 2 * 2; }
        );

    CPM_TWO_PASS_NS_P(
        pmp_policy,
        "pmp_p(c=2) (d) [pmp][s]",
        [](size_t d){ return std::make_tuple(dmat(d, d), dmat(d/2,d/2)); },
        [](dmat& a, dmat& r){ r = etl::p_max_pool_p<2,2>(a); },
        [](size_t d){ return 2 * d * d * 2 * 2; }
        );

    CPM_TWO_PASS_NS_P(
        pmp_policy,
        "pmp_h(c=4) (d) [pmp][s]",
        [](size_t d){ return std::make_tuple(dmat(d, d), dmat(d,d)); },
        [](dmat& a, dmat& r){ r = etl::p_max_pool_h<4,4>(a); },
        [](size_t d){ return 2 * d * d * 4 * 4; }
        );
CPM_TWO_PASS_NS_P(
        pmp_policy,
        "pmp_p(c=4) (d) [pmp][s]",
        [](size_t d){ return std::make_tuple(dmat(d, d), dmat(d/4,d/4)); },
        [](dmat& a, dmat& r){ r = etl::p_max_pool_p<4,4>(a); },
        [](size_t d){ return 2 * d * d * 4 * 4; }
        );
}