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 <ap....@outlook.com>
Sent: Thursday, August 4, 2016 11:06:33 AM
To: Karl Rupp; viennacl-devel@lists.sourceforge.net
Subject: Re: [ViennaCL-devel] compressed_matrix %*% matrix_Base


Thanks Karl- Appreciate it!


________________________________
From: Karl Rupp <r...@iue.tuwien.ac.at>
Sent: Thursday, August 4, 2016 3:36:53 AM
To: Andrew Palumbo; viennacl-devel@lists.sourceforge.net
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 <ap....@outlook.com>
> *Sent:* Wednesday, August 3, 2016 6:44:10 PM
> *To:* Karl Rupp; viennacl-devel@lists.sourceforge.net
> *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 <r...@iue.tuwien.ac.at>
> *Sent:* Wednesday, August 3, 2016 5:28:58 PM
> *To:* Andrew Palumbo; viennacl-devel@lists.sourceforge.net
> *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
>> ViennaCL-devel@lists.sourceforge.net
>>https://lists.sourceforge.net/lists/listinfo/viennacl-devel
>>
>

------------------------------------------------------------------------------
_______________________________________________
ViennaCL-devel mailing list
ViennaCL-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/viennacl-devel

Reply via email to