[Trilinos-Users] Epetra - Dense Matrix-Vector multiply basics
Boman, Erik G
egboman at sandia.gov
Mon Apr 13 21:10:00 MDT 2015
Gyorgy,
We never tested with local map, so quite possible that doesn't work. Are you trying to partition by columns? If so, a workaround is to store the transpose and partition that by rows.
Erik
On Apr 13, 2015, at 2:34 PM, Gyorgy Matyasfalvi <matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>> wrote:
Dear Erik:
thanks a lot for your response.
My question is: does Isorropia work on any sparse matrix? I.e. independent of how I've constructed it? What maps I've used?
It seems to me that if I use an Epetra_LocalMap as a rowMap and an Epetra_Map as a colMap, I get error messages when I try to rebalance the matrix. I've looked at the Epetra_CrsMatrix source where the errors come from it is complaining about inserting global values... It seems to me the constructor of the matrix doesn't give me any error messages so the above should be a legitimate construct, or?
Thanks a lot! Best,
Gyorgy
On Mon, Apr 13, 2015 at 1:45 PM, Erik Boman <egboman at sandia.gov<mailto:egboman at sandia.gov>> wrote:
Hi Gyorgy,
See comments below.
Regards,
Erik
Gyorgy Matyasfalvi wrote:
Dear Erik and Michael:
thanks for your responses.
I've tried out some test cases and I have some further questions regarding reading in data and rebalancing with Isorropia.
1) For EpetraExt::MatrixMarketFileToCrsMatrix(datafile, Comm, A, false, true) the more processors I use the slower the "File Read time (secs)" gets. E.g. for a 193MB file I get 3.47222 sec for 1 proc and 5.84088 sec for 2 proc etc. I think this makes sense because only processor 0 is reading the data file but I just wanted to double check with you, if this is really makes sense.
Yes, this looks reasonable since file I/O is serial and communication actually increases with number of processes.
2) I've created a sparse matrix A using:
EpetraExt::MatrixMarketFileToCrsMatrix(datafile, comm, A, false, true);
This is matrix has 19996 rows, 1355191 columns and 9097916 nonzeros.
And then used Isorropia to rebalance it with:
Teuchos::ParameterList paramlist;
paramlist.set("BALANCE OBJECTIVE", "NONZEROS");
balA = Isorropia::Epetra::createBalancedCopy(*A, paramlist);
I got the following result for 4 cores:
Proc 1 nonzeros = 2501926
Proc 2 nonzeros = 2365455
Proc 3 nonzeros = 2501919
Proc 4 nonzeros = 1728616
Which means that proc 4 has about 30% less nonzeros than the others.
You did the right thing. I claim this is good load balance. Don't worry that one process has less work since your run time will be constrained by the most heavily loaded process. By default, Zoltan/Isorropia will partition such that the heaviest load is within 1.1 (10%) of the average load. You can change this using the Isorropia parameter "IMBALANCE TOL" but communication may increase.
So I tried to improve this by forcing a split along the columns when creating the matrix by using:
EpetraExt::MatrixMarketFileToCrsMatrix(datafile, rowLocalMap, colMap, A, false, true);
where rowLocalMap and colMap are the following:
Epetra_LocalMap rowLocalMap(numRows, 0, comm);
Epetra_Map colMap(numCols, 0, comm);
When I tried to use Isorropia on this I got the following error messages:
**************************************************************************************
Epetra ERROR -2, /home/gyorgy/Trilinos/Trilinos-11.4.3-Source/packages/epetra/src/Epetra_CrsMatrix.cpp, line 751
Epetra ERROR -2, /home/gyorgy/Trilinos/Trilinos-11.4.3-Source/packages/epetra/src/Epetra_CrsMatrix.cpp, line 574
Epetra ERROR -2, /home/gyorgy/Trilinos/Trilinos-11.4.3-Source/packages/epetra/src/Epetra_CrsMatrix.cpp, line 2333
Epetra ERROR -2, /home/gyorgy/Trilinos/Trilinos-11.4.3-Source/packages/epetra/src/Epetra_CrsMatrix.cpp, line 2175
Epetra ERROR -2, /home/gyorgy/Trilinos/Trilinos-11.4.3-Source/packages/epetra/src/Epetra_DistObject.cpp, line 242
Epetra ERROR -2, /home/gyorgy/Trilinos/Trilinos-11.4.3-Source/packages/epetra/src/Epetra_DistObject.cpp, line 137
**************************************************************************************
I've looked a the Errors they have to do with inserting global values, somehow the indices are messed up. But I don't know why. I think the way I have created matrix A should be legitimate, or?
Sorry, I do not understand what you tried to do here. If you are concerned about load balance, why not just set the imbalance tolerance? I am not sure how much difference optimizing the load balance will make in practice. Have you done any profiling that shows load balance is an issue?
Thanks a lot! Best,
Gyorgy
On Mon, Apr 6, 2015 at 11:30 AM, Erik Boman <egboman at sandia.gov<mailto:egboman at sandia.gov> <mailto:egboman at sandia.gov<mailto:egboman at sandia.gov>>> wrote:
Gyorgy,
Epetra does not do load balancing, except create maps in the
trivial way.
For sparse matrices, you should use Zoltan or Isorropia. For your
case. I'd recommend the PHG hypergraph partitioner in Zoltan (also
available in Isorropia with Epetra interfaces).
You can balance with respect to nonzeros instead of rows, which
should take care of the dense row/column problem in most cases.
(Parameter BALANCE OBJECTIVE = nonzeros in Isorropia):
http://trilinos.org/docs/r11.14/packages/isorropia/doc/html/index.html
It is possible to split rows in Epetra (overlapping row maps) but
often this is not worth the extra complexity.
Hope this helps,
Erik
Gyorgy Matyasfalvi wrote:
Dear Michael:
thanks for your response. I thought that maybe reading in
overlapping chuncks of the text file using MPI I/O might work.
But I never implemented it, so I don't know how it would
actually perform. I will look into HDF5 more thoroughly.
I have one more question in terms of the data distribution.
Say a sparse matrix has some very dense columns or rows. In
that case a processor could be assigned substantially more
work then everyone else creating a bottleneck for the
algorithm. How does Epetra deal with this situation?
I've encountered the following issues:
i) Assigning columns and rows randomly may not work too well,
say if there is only one completely dense column than the
processor that gets it has more work then anyone else. ii)
Coming up with an optimal load balance is NP hard. iii)
Splitting data according to number of non-zeros will require
columns or rows to be split between processors, which would
violate the unique global ID (GID) requirement of Epetra.
Thanks a lot!
Best,
Gyorgy On Mon, Apr 6, 2015 at 12:08 AM, Heroux, Mike
<MHeroux at csbsju.edu<mailto:MHeroux at csbsju.edu> <mailto:MHeroux at csbsju.edu<mailto:MHeroux at csbsju.edu>>
<mailto:MHeroux at csbsju.edu<mailto:MHeroux at csbsju.edu> <mailto:MHeroux at csbsju.edu<mailto:MHeroux at csbsju.edu>>>> wrote:
Gyorgy,
The Matrix Market I/O functions are parallel, but only
process 0
reads from the file. The file contents are used to
construction
an Epetra object on process 0, which is then exported to a
distributed object that is split across all processes
according to
an Epetra map. The default map splits the data by a uniform
distribution. You can prescribe your own distribution too.
This is the only portable approach to I/O that I know of for
reading and writing a plain text file. In general, text-based file I/O from a single file is not very
scalable. It’s primarily meant as a way to enable problem
studies. You would probably be better off using the HDF5
functionality from EpetraExt.
Mike
From: Gyorgy Matyasfalvi <matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com> <mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>>>
Date: Sunday, April 5, 2015 at 10:52 AM
To: "maherou at sandia.gov<mailto:maherou at sandia.gov> <mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov> <mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>>"
<maherou at sandia.gov<mailto:maherou at sandia.gov> <mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov> <mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>>>
Cc: "trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>>"
<trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>>>
Subject: Re: [Trilinos-Users] Epetra - Dense Matrix-Vector
multiply basics
Dear Michael:
thanks for your response. Ok that makes sense. One
more question I have in terms of the MatrixMarket I/O
routines. To me it seems that the
MatrixMarketFileToCrsMatrix in EpetraExt
is actually a serial operation since only processor 0 does the
data read-in and then broadcasts the data to the other
processors.
Is that correct?
Thanks! Best,
Gyorgy
On Sat, Apr 4, 2015 at 8:23 PM, Heroux, Michael A
<maherou at sandia.gov<mailto:maherou at sandia.gov> <mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov> <mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>>> wrote:
Gyorgy,
I believe the operations you need are supported. In
the case
of a wide matrix, for either a sparse or dense matrix, you
want to think about storing A^T, and then apply the
transpose
operation to get the action of A. This is basically
what I
described in the previous message.
You are also right about the square case, that doing a 2D
decomposition would be appropriate, and Epetra (and
similarly
Tpetra) is unique in its support for this kind of
decomposition, compared to other popular libraries. Even so,
the infrastructure to support construction and
management of
2D decompositions can be substantially improved.
If you need more details on what I describe in the first
paragraph, let me know.
Mike
On Apr 3, 2015, at 1:33 PM, Gyorgy Matyasfalvi
<matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com> <mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>><mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>>>> wrote:
Dear Michael:
We're solving the following optimization problem:
min ||A(x^+ - x^-) - b||^2_2 + \nu * 1^T (x^+ + x^-)
x^+, x^- \in R^n
s.t. x^+, x^- >= 0
aka (LASSO) using a first order method called the
Nonmonotone
Spectral Projected Gradient (SPG).
( You can find more details in this paper: http://www.optimization-online.org/DB_FILE/2015/01/4748.pdf )
The matrix A in the objective function comes in many
different
forms: tall, wide, square. In one of our test problems
A is a
wide matrix, with dimensions: 19,996 rows and
1.355,191 columns.
Our most "expensive" operations are mtx-vec multiplies
when
computing the objective function value or the gradient.
What I'd like to achieve is that our code can handle
matrices
of arbitrary form "appropriately". For example if A is
wide
i.e. few rows but many columns then we partition A
along it's
columns (domain decomposition), if A is tall i.e. many
rows
and few columns then we partition A along it's rows (range
decomposition). If A is square and huge than maybe do both
range and domain decomposition.
It seems to me this is actually doable for sparse matrices
using the Epetra_CrsMatrix class. My question is can I
do this
in the dense case with the Epetra_MultiVector class?
Thanks a lot for your help!
Best,
Gyorgy
On Fri, Apr 3, 2015 at 1:24 AM, Heroux, Michael A
<maherou at sandia.gov<mailto:maherou at sandia.gov> <mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>><mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>>>> wrote:
Gyorgy,
Please give me some details about your problem: Algorithm,
size of matrices, type of data distribution. Just the
basics
to start.
Thanks.
Mike
On Apr 2, 2015, at 11:03 PM, Gyorgy Matyasfalvi
<matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com> <mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>><mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>>><mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>><mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>>>>> wrote:
Dear Mike:
Thanks for your help. Indeed I got an error code of -2
and I
suspect that, as you pointed out, the issue is that
*this is
not a row vector.
My other question then would be: Is it possible to
define a
"Domain Map" for Multivectors? i.e I want processors
to own
columns of the matrix instead of rows. So basically
spread out
the columns among different processors. I know think
this is
possible for sparse matrices.
Thanks! Best,
Gyorgy
On Thu, Apr 2, 2015 at 9:02 AM, Heroux, Michael A
<maherou at sandia.gov<mailto:maherou at sandia.gov> <mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>><mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>>><mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>><mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>
<mailto:maherou at sandia.gov<mailto:maherou at sandia.gov>>>>>> wrote:
Gyorgy,
Assuming your x, y and A are dense objects, you are
using the
correct function, Multiply(). Chances are that you
have some
detail incorrect. First you should check for error
codes that
are being returned. Multiply() will return integer error
codes if it runs into issues:
Int ierr = y.Multiply(...)
If (ierr!=0) ...
Regarding your transpose operation, if I understand the
situation correctly, x should also be transposed to be
a row
vector. Multiply() is probably complaining about
this. There
is no way in the Epetra framework to specify that the
"this"
argument is transposed.
I think it is best to perform the transpose operation as
x = A^T y
This expression keeps the dimensions correct.
Try this and see how it goes.
Mike
From: Gyorgy Matyasfalvi <matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>><mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>>><mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>><mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>>>><mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>><mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>>><mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>><mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>
<mailto:matyasfalvi at gmail.com<mailto:matyasfalvi at gmail.com>>>>>>>
Date: Wednesday, April 1, 2015 at 10:41 PM
To: "trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>>>>>"
<trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>><mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>
<mailto:trilinos-users at software.sandia.gov<mailto:trilinos-users at software.sandia.gov>>>>>>>
Subject: [EXTERNAL] [Trilinos-Users] Epetra - Dense
Matrix-Vector multiply basics
Dear Developers/Users:
I have a question concerning matrix-vector multiplies:
1) Is there a document or example file that explains the
basics of matrix-vector multiplies? Preferably isolated
examples of mtx-vec mults. instead of being embedded
in some
algorithm.
If this doesn't exist. Then I'd be interested in
finding out:
2) How to do dense matrix, dense vector multiplies?
I assume it's done via the Epetra_MultiVector class.
However,
the only operation that seems to have an effect is the
following:
y = A x
using
y.Multiply('N', 'N', 1.0, A, x, 0.0)
(x was constructed using an Epetra_LocalMap
A, and y were constructed using the same Epetra_Map)
The problem is that if I want to compute for example:
x = y^T A
using
x.Multiply('T', 'N', 1.0, y, A, 0.0)
it seems the Multiply() operation doesn't do anything x
remains unchanged.
What am I doing incorrectly here?
Thanks a lot! Best,
Gyorgy
------------------------------------------------------------------------
_______________________________________________
Trilinos-Users mailing list
Trilinos-Users at software.sandia.gov<mailto:Trilinos-Users at software.sandia.gov>
<mailto:Trilinos-Users at software.sandia.gov<mailto:Trilinos-Users at software.sandia.gov>>
https://software.sandia.gov/mailman/listinfo/trilinos-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://software.sandia.gov/pipermail/trilinos-users/attachments/20150414/9714842e/attachment-0001.html>
More information about the Trilinos-Users
mailing list