Hi Karl,
I've been trying to implement tests for:
matrix_base<double> C = compressed_matrix<double> A %*%
matrix_base<double,row_major> B.
I cant find in the code or the documentation any constructor for matrix_base<T>(
matrix_expression<const viennacl::compressed_matrix<T>, const
viennacl::matrix_base<T>, viennacl::op_prod>)
ie. a mixed expression of compressed_matrix and matrix_base
and get a compilation error when I try to instantiate a:
matrix_base<double>(matrix_expression<const
viennacl::compressed_matrix<double>, const viennacl::matrix_base<double>,
viennacl::op_prod>)
Is there a transformation that I need to do from this
matrix_expression<compressed_matrix<double>, matrix_base<double>, op_prod>
to something else so that I may be able to initialize a matrix_base (or
possibly even a compressed_matrix) from it?
The compilation error that i get is below.
Thanks,
Andy
{...}
/usr/include/viennacl/matrix.hpp: In instantiation of ‘static void
viennacl::linalg::detail::op_executor<viennacl::matrix_base<T>,
viennacl::op_assign, viennacl::matrix_expression<const LHS, const RHS,
viennacl::op_prod> >::apply(viennacl::matrix_base<T>&, const
viennacl::matrix_expression<const SparseMatrixType, const
viennacl::matrix_base<T>, viennacl::op_prod>&) [with SparseMatrixType =
viennacl::compressed_matrix<double>; T = double; LHS =
viennacl::compressed_matrix<double>; RHS = viennacl::matrix_base<double>]’:
/usr/include/viennacl/matrix.hpp:324:107: required from
‘viennacl::matrix_base<NumericT, SizeT, DistanceT>&
viennacl::matrix_base<SCALARTYPE, SizeType, DistanceType>::operator=(const
viennacl::matrix_expression<const LHS, const RHS, OP>&) [with LHS =
viennacl::compressed_matrix<double>; RHS = viennacl::matrix_base<double>; OP =
viennacl::op_prod; NumericT = double; SizeT = long unsigned int; DistanceT =
long int]’
{...}
________________________________
From: Andrew Palumbo <[email protected]>
Sent: Thursday, August 4, 2016 11:06:33 AM
To: Karl Rupp; [email protected]
Subject: Re: [ViennaCL-devel] compressed_matrix %*% matrix_Base
Thanks Karl- Appreciate it!
________________________________
From: Karl Rupp <[email protected]>
Sent: Thursday, August 4, 2016 3:36:53 AM
To: Andrew Palumbo; [email protected]
Subject: Re: [ViennaCL-devel] compressed_matrix %*% matrix_Base
Hi Andrew,
On 08/04/2016 01:33 AM, Andrew Palumbo wrote:
> Oops sorry - wrong class in the last post. Too many things going on at
> once.
>
>
> @Properties(inherit = Array(classOf[Context]),
> value = Array(new Platform(
> include =Array("matrix.hpp"),
> library ="jniViennaCL")
> ))
> @Namespace("viennacl")
> @Name(Array("matrix_expression<const viennacl::compressed_matrix<double>, " +
> "const viennacl::matrix_base<double>, " +
> "viennacl::op_prod>"))
yes, this is the right result expression template type.
Regarding trans: Currently the functionality isn't fully exposed through
the API, i.e. you cannot write A = trans(B) for sparse matrices A and B.
However, the functionality is implemented in
viennacl::linalg::detail::amg::amg_transpose(B, A) and will be properly
exposed soon.
Best regards,
Karli
> ------------------------------------------------------------------------
> *From:* Andrew Palumbo <[email protected]>
> *Sent:* Wednesday, August 3, 2016 6:44:10 PM
> *To:* Karl Rupp; [email protected]
> *Subject:* Re: [ViennaCL-devel] compressed_matrix %*% matrix_Base
>
> Hi Karl, as always thanks for the quick response.
>
> I Just needed a point in the right direction, and have it compiling
> now. (Tests up next).
>
> Just FYI, I needed a new class for the product result:
>
> @Properties(inherit = Array(classOf[Context]),
> value = Array(new Platform(
> include =Array("matrix.hpp"),
> library ="jniViennaCL")
> ))
> @Namespace("viennacl")
> @Name(Array("vector_expression<const viennacl::matrix_base<double>, " +
> "const viennacl::vector_base<double>, " +
> "viennacl::op_prod>"))
> class MatVecProdExpressionextends Pointer {
>
> }
>
> Wanted to make sure that I wasn't grinding my wheels.
>
> Thanks alot for your time.
>
> One more question, there is no `trans(compressed_matrix cm)` function
> correct? This should just be done by taking the teanspose first of the
> matrix before converting it to CSR, etc? Curious, as we may be able to
> shave a small amount of time if so.
>
> Thanks!
>
> Andy
>
>
> ------------------------------------------------------------------------
> *From:* Karl Rupp <[email protected]>
> *Sent:* Wednesday, August 3, 2016 5:28:58 PM
> *To:* Andrew Palumbo; [email protected]
> *Subject:* Re: [ViennaCL-devel] compressed_matrix %*% matrix_Base
> Hi Andrew,
>
> > I'm having some trouble with sparse `compressed_matrix` `matrix`(base)
>> matrix multiplication. This is supported, correct?
>
> Yes. Could you please let us know what you have tried already?
> It shouldn't be any more code to write than
>
> viennacl::compressed_matrix<T> A(...);
> viennacl::matrix<T> B(...);
> viennacl::matrix<T> C = viennacl::linalg::prod(A, B);
>
> Make sure to
> #include "viennacl/matrix.hpp"
> #include "viennacl/compressed_matrix.hpp"
> #include "viennacl/linalg/prod.hpp"
> at the beginning; otherwise you get incomprehensible C++ compiler output.
>
> Best regards,
> Karli
>
>
>
>
>>
>>
>> I've been trying to use the:
>>
>>
>> template< typename SparseMatrixType, typename SCALARTYPE>
>> typename viennacl::enable_if<
>> viennacl::is_any_sparse_matrix<SparseMatrixType>::value
>> <http://viennacl.sourceforge.net/doc/structviennacl_1_1enable__if.html>,
>> viennacl::matrix_expression
>> <http://viennacl.sourceforge.net/doc/classviennacl_1_1matrix__expression.html><const
>> SparseMatrixType,
>> const matrix_base <SCALARTYPE>
>> <http://viennacl.sourceforge.net/doc/classviennacl_1_1matrix__base.html>,
>> op_prod
>> <http://viennacl.sourceforge.net/doc/structviennacl_1_1op__prod.html> >
>> >::type
>> <http://viennacl.sourceforge.net/doc/namespaceviennacl_1_1linalg.html#a3bba0146e669e012bb7c7380ce780a25>
>> prod
>> <http://viennacl.sourceforge.net/doc/namespaceviennacl_1_1linalg.html#aa18d10f8a90e38bd9ff43c650fc670ef>(const
>> SparseMatrixType & sp_mat,
>> const viennacl::matrix_base<SCALARTYPE>
>> <http://viennacl.sourceforge.net/doc/classviennacl_1_1matrix__base.html>
>> & d_mat)
>> {
>> return viennacl::matrix_expression
>> <http://viennacl.sourceforge.net/doc/classviennacl_1_1matrix__expression.html><const
>> SparseMatrixType,
>> const viennacl::matrix_base<SCALARTYPE>
>> <http://viennacl.sourceforge.net/doc/classviennacl_1_1matrix__base.html>,
>> op_prod
>> <http://viennacl.sourceforge.net/doc/structviennacl_1_1op__prod.html>
>> >(sp_mat, d_mat);
>>
>>
>> method from prod.hpp.
>>
>>
>> I just wanted to make sure that this was the correct method, and that it
>> accepted `compressed_matrix`s as `sp_mat`. Is that correct? I'm
>> mapping this to java via javacpp so the templates can prove difficult,
>> and are likely where I'm getting errors.
>>
>>
>> Just wanted to confirm that this was supported as I am using it (and
>> that there is not a more straightforward way with fewer template arguments.
>>
>>
>> Thanks,
>>
>>
>> Andy
>>
>>
>>
>> ------------------------------------------------------------------------------
>>
>>
>>
>> _______________________________________________
>> ViennaCL-devel mailing list
>> [email protected]
>>https://lists.sourceforge.net/lists/listinfo/viennacl-devel
>>
>
------------------------------------------------------------------------------
_______________________________________________
ViennaCL-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/viennacl-devel