[eigen] Re: Blas performance on mapped matrices |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: [eigen] Re: Blas performance on mapped matrices
- From: Sameer Agarwal <sameeragarwal@xxxxxxxxxx>
- Date: Mon, 9 Jan 2012 00:07:27 -0800
- Cc: Keir Mierle <keir@xxxxxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:x-system-of-record:content-type:content-transfer-encoding; bh=tok/8hlRpbq1usYUmITHo49C3tXV63VYnh+rrthWQEs=; b=G6jrR7Sii3DcefKZUc6shkmX9EcJMYF7Jt8mevT0LA3I+tU8tBlqphaBEjh+hEDjzU xVeLnExsA5Ii1qjhmKT9CuyxmedMHYUNfXhF+5sW9bB+O5QMSp7a+FjH2eYoPBy+9XMU nWCuEJ+sKijzIJHpiPth+jJeZbkMDyW/pGS3o=
I should clarify my last question about statically sized blocks. I am
aware (and keir reminded me) that I can do block<row_size,
col_size>(r, c) to get a statically sized block. But the thing I am
looking for is a constructor for block which behaves like the
constructor for Matrix, where
Matrix<row_size, col_size>(row_size_1, col_size_1)
behaves such that if row_size == Dynamic, then you get a dynamic
matrix with row_size_1 rows and if row_size != Dynamic then we get a
statically sized matrix with row_size rows.
Would it be possible to extend the 4 argument constructor for block to
behave the same way?
Thanks,
Sameer
On Sun, Jan 8, 2012 at 11:47 PM, Sameer Agarwal
<sameeragarwal@xxxxxxxxxx> wrote:
> Hi Guys,
> We are in the process of a significant code migration from eigen2 to
> eigen3. The code uses Eigen::Map to map chunks of memory into RowMajor
> matrices and operates on them. The primary operation is of the form
>
> A.block(r, c, size1, size2) -= B * C;
>
> A is a mapped matrix.
> C is a mapped matrix.
> B is an actual Eigen matrix.
>
> All matrices are RowMajor. For the example being considered, size1 =
> size2 = 9. B is 9x3, and C is 3x9.
> C and B are statically sized.
>
> Moving from eigen2 to eigen3 has resulting in a 30% performance
> regression. Has something changed significantly in the way Eigen3
> handles mapped matrices, or about the structure of matrix-matrix
> multiplication in Eigen3 that would cause this?
>
> The compiler flags are all the same between our use of eigen2 and
> eigen3. Profiling indicates that much of the time is being spent
> inside Eigen::internal::gebp_kernel::operator.
>
> I understand that this is not sufficient information to reproduce this
> problem, so I am going to try and create a minimal case which can
> reproduce this performance regression. In the meanwhile any insight
> into this would be useful. Also is it possible to statically size
> blocks like matrices?
>
> Thank you,
> Sameer