Skip to content

Commit

Permalink
Merge pull request #3392 from OXPHOS/linalg_refactor_2
Browse files Browse the repository at this point in the history
LinalgRefactor - fix styles / add docs
  • Loading branch information
karlnapf committed Jul 27, 2016
2 parents 960492e + 8c7a31e commit a8a41a2
Show file tree
Hide file tree
Showing 8 changed files with 22 additions and 29 deletions.
2 changes: 2 additions & 0 deletions src/shogun/mathematics/linalg/GPUMemoryViennaCL.h
Expand Up @@ -54,6 +54,8 @@ struct GPUMemoryViennaCL : public GPUMemoryBase<T>

typedef viennacl::backend::mem_handle VCLMemoryArray;
typedef viennacl::vector_base<T, std::size_t, std::ptrdiff_t> VCLVectorBase;

/** @see <a href="http://viennacl.sourceforge.net/doc/changelog.html"> */
#if VIENNACL_VERSION >= 10600
typedef viennacl::matrix_base<T, std::size_t, std::ptrdiff_t> VCLMatrixBase;
#else
Expand Down
9 changes: 1 addition & 8 deletions src/shogun/mathematics/linalg/LinalgBackendBase.h
Expand Up @@ -76,7 +76,6 @@ class LinalgBackendBase
{ \
SG_SNOTIMPLEMENTED; \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_ADD, SGVector)
#undef BACKEND_GENERIC_ADD

Expand All @@ -90,7 +89,6 @@ class LinalgBackendBase
{ \
SG_SNOTIMPLEMENTED; \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_DOT, SGVector)
#undef BACKEND_GENERIC_DOT

Expand All @@ -104,7 +102,6 @@ class LinalgBackendBase
{ \
SG_SNOTIMPLEMENTED; \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_SUM, SGVector)
DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_SUM, SGMatrix)
#undef BACKEND_GENERIC_SUM
Expand All @@ -119,10 +116,9 @@ class LinalgBackendBase
{ \
SG_SNOTIMPLEMENTED; \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_COLWISE_SUM, SGMatrix)
#undef BACKEND_GENERIC_COLWISE_SUM

/**
* Wrapper method of matrix rowwise sum that works with dense matrices.
*
Expand All @@ -133,7 +129,6 @@ class LinalgBackendBase
{ \
SG_SNOTIMPLEMENTED; \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_ROWWISE_SUM, SGMatrix)
#undef BACKEND_GENERIC_ROWWISE_SUM

Expand All @@ -148,7 +143,6 @@ class LinalgBackendBase
{ \
SG_SNOTIMPLEMENTED; \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_TO_GPU, SGVector)
DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_TO_GPU, SGMatrix)
#undef BACKEND_GENERIC_TO_GPU
Expand All @@ -163,7 +157,6 @@ class LinalgBackendBase
{ \
SG_SNOTIMPLEMENTED; \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_FROM_GPU, SGVector)
DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_FROM_GPU, SGMatrix)
#undef BACKEND_GENERIC_FROM_GPU
Expand Down
7 changes: 1 addition & 6 deletions src/shogun/mathematics/linalg/LinalgBackendEigen.h
Expand Up @@ -66,7 +66,6 @@ class LinalgBackendEigen : public LinalgBackendBase
{ \
return add_impl(a, b, alpha, beta); \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_ADD, SGVector)
#undef BACKEND_GENERIC_ADD

Expand All @@ -76,7 +75,6 @@ class LinalgBackendEigen : public LinalgBackendBase
{ \
return dot_impl(a, b); \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_DOT, SGVector)
#undef BACKEND_GENERIC_DOT

Expand All @@ -86,7 +84,6 @@ class LinalgBackendEigen : public LinalgBackendBase
{ \
return sum_impl(a); \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_SUM, SGVector)
DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_SUM, SGMatrix)
#undef BACKEND_GENERIC_SUM
Expand All @@ -97,17 +94,15 @@ class LinalgBackendEigen : public LinalgBackendBase
{ \
return colwise_sum_impl(a); \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_COLWISE_SUM, SGMatrix)
#undef BACKEND_GENERIC_COLWISE_SUM

/** Implementation of @see LinalgBackendBase::rowwise_sum */
#define BACKEND_GENERIC_ROWWISE_SUM(Type, Container) \
virtual SGVector<Type> rowwise_sum(const Container<Type>& a) const \
{ \
return rowwise_sum_impl(a); \
}

DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_ROWWISE_SUM, SGMatrix)
#undef BACKEND_GENERIC_ROWWISE_SUM

Expand Down
4 changes: 2 additions & 2 deletions src/shogun/mathematics/linalg/LinalgBackendViennacl.h
Expand Up @@ -189,7 +189,7 @@ class LinalgBackendViennaCL : public LinalgBackendGPUBase

viennacl::ocl::enqueue(kernel(mat_gpu->data_matrix(mat.num_rows, mat.num_cols),
cl_int(mat.num_rows), cl_int(mat.num_cols), cl_int(mat_gpu->m_offset),
result_gpu->data(mat.num_cols), cl_int(result_gpu->m_offset)));
result_gpu->data_vector(mat.num_cols), cl_int(result_gpu->m_offset)));

return SGVector<T>(result_gpu, mat.num_cols);
}
Expand All @@ -205,7 +205,7 @@ class LinalgBackendViennaCL : public LinalgBackendGPUBase

viennacl::ocl::enqueue(kernel(mat_gpu->data_matrix(mat.num_rows, mat.num_cols),
cl_int(mat.num_rows), cl_int(mat.num_cols), cl_int(mat_gpu->m_offset),
result_gpu->data(mat.num_rows), cl_int(result_gpu->m_offset)));
result_gpu->data_vector(mat.num_rows), cl_int(result_gpu->m_offset)));

return SGVector<T>(result_gpu, mat.num_rows);
}
Expand Down
8 changes: 6 additions & 2 deletions src/shogun/mathematics/linalg/LinalgBackendViennaclKernels.h
Expand Up @@ -41,7 +41,9 @@

namespace shogun
{
/** Generates the colwise sum computation kernel */
/** Generates the colwise sum computation kernel
* The OpenCL kernel that helps to calculate colwise sum of SGMatrix
*/
template <class T>
static viennacl::ocl::kernel& generate_colwise_sum_kernel()
{
Expand Down Expand Up @@ -82,7 +84,9 @@ namespace shogun
return kernel;
}

/** Generates the rowwise sum computation kernel */
/** Generates the rowwise sum computation kernel
* The OpenCL kernel that helps to calculate rowwise sum of SGMatrix
*/
template <class T>
static viennacl::ocl::kernel& generate_rowwise_sum_kernel()
{
Expand Down
11 changes: 5 additions & 6 deletions src/shogun/mathematics/linalg/LinalgNamespace.h
Expand Up @@ -108,9 +108,7 @@ LinalgBackendBase* infer_backend(const Container<T>& a, const Container<T>& b)
template <typename T, template <typename> class Container>
Container<T> add(const Container<T>& a, const Container<T>& b, T alpha=1, T beta=1)
{
REQUIRE(a.vlen == b.vlen, "Vectors should have same length! "
"a(%d) vs b(%d)\n", a.vlen, b.vlen);

REQUIRE(a.vlen == b.vlen, "Length of vector a(%d) doesn't match vector b(%d).\n", a.vlen, b.vlen);
return infer_backend(a, b)->add(a, b, alpha, beta);
}

Expand All @@ -125,14 +123,15 @@ Container<T> add(const Container<T>& a, const Container<T>& b, T alpha=1, T beta
template <typename T>
T dot(const SGVector<T>& a, const SGVector<T>& b)
{
REQUIRE(a.vlen == b.vlen, "Length of vector a(%d) doesn't match vector b(%d).\n", a.vlen, b.vlen);
return infer_backend(a, b)->dot(a, b);
}

/**
* Method that computes the sum of vectors of matrices
* Method that computes the sum of vectors or matrices
*
* @param vec a vector whose sum has to be computed
* @return the vector sum \f$\sum_i a_i\f$
* @param a the vector or matrix whose sum has to be computed
* @return the vector sum \f$\sum_i a_i\f$ or matrix sum \f$\sum_{i,j}b_{i,j}\f$
*/
template <typename T, template <typename> class Container>
T sum(const Container<T>& a)
Expand Down
Expand Up @@ -6,7 +6,7 @@
using namespace shogun;
using namespace linalg;

TEST(LinalgBackendEigen, add)
TEST(LinalgBackendEigen, SGVector_add)
{
const float64_t alpha = 0.3;
const float64_t beta = -1.5;
Expand All @@ -26,7 +26,7 @@ TEST(LinalgBackendEigen, add)
EXPECT_NEAR(alpha*A[i]+beta*B[i], result[i], 1e-15);
}

TEST(LinalgBackendEigen, dot)
TEST(LinalgBackendEigen, SGVector_dot)
{
const index_t size = 3;
SGVector<int32_t> a(size), b(size);
Expand Down
Expand Up @@ -9,7 +9,7 @@
using namespace shogun;
using namespace linalg;

TEST(LinalgBackendViennaCL, add)
TEST(LinalgBackendViennaCL, SGVector_add)
{
sg_linalg->set_gpu_backend(new LinalgBackendViennaCL());

Expand All @@ -34,7 +34,7 @@ TEST(LinalgBackendViennaCL, add)
EXPECT_NEAR(alpha*A[i]+beta*B[i], result[i], 1e-15);
}

TEST(LinalgBackendViennaCL, dot)
TEST(LinalgBackendViennaCL, SGVector_dot)
{
sg_linalg->set_gpu_backend(new LinalgBackendViennaCL());

Expand Down Expand Up @@ -74,7 +74,7 @@ TEST(LinalgBackendViennaCL, SGMatrix_sum)
a[i] = i;

a_gpu = to_gpu(a);

auto result = sum(a_gpu);
EXPECT_NEAR(result, 15, 1E-15);
}
Expand Down

0 comments on commit a8a41a2

Please sign in to comment.