Lei, could you explain why this particular part is important to you? As Roy
pointed out, for implicit apps this never shows up as a bottleneck, and for
JFNK work I think Derek agrees there are other hotspots? Why not address those
if performance is an issue?
I don't want to discourage the change, but there are other deficiencies in
libMesh where development could have a much bigger impact. (I swear one of
these days I'll get to that blocked matrix
support!)
Because finite element objects tend to have a lot of lifetime per computation
(they get reused for a lot of elements) the allocation issue is not really a
driver. The dereferencing is, but as profiling reveals it is not that big of a
deal.
To answer your original question, we use a vector<vector> mostly because this
section of code dates back to 2002, well before portable high performance
expression templates were reliable. And based on our recent discussion you can
see that the API is a trap once it is in place...
Since the allocation and storage part is currently a non-issue, I wonder if the
simplest path to reduce the dereferencing hit is to store an Eigen object along
side the vector<vector>, deprecate the old API, and move to the (i,j) scheme
directly? For the adventurous we could disable the backwards compatibility at
configure time so only the Eigen storage existed...
-Ben
On Oct 26, 2012, at 6:31 PM, "Lei Shi"
<stonesz...@gmail.com<mailto:stonesz...@gmail.com>> wrote:
Sorry for the late.
It seems that in order to provide backward compatible APIs, we need such kind
of shim class. Roy, What is your final decision?
Sincerely Yours,
Lei Shi
----------
On Thu, Oct 25, 2012 at 1:21 PM, Roy Stogner
<royst...@ices.utexas.edu<mailto:royst...@ices.utexas.edu>> wrote:
On Thu, 25 Oct 2012, Boyce Griffith wrote:
Libraries like Eigen and Blitz++ use operator() for accessors rather than
operator[]. How horrible would it be to go ahead and change to operator() when
making this change to LibMeshNArray?
Hmmm... it would mean that we couldn't get away with starting with
just a typedef, we'd actually have to build a basic shim class right
from the start, and it would be much more of a pain in the neck for
user codes to upgrade.
On the other hand, if we did want to keep operator[] support around
indefinitely and we end up with a target class that doesn't support
it, that would mean we'd have to keep a shim class around
indefinitely... *and* we'd make it much less convenient to use a
different-semantic operator[] from the target class, e.g. the Blitz++
component accessor.
More opinions would be welcome; I'm not even sure what I'd prefer yet.
---
Roy
[https://app.yesware.com/t/d1fcbaa1b12e0f6b1beef0b50d5ebbd873d1b8f9/1f16b46240a5a722bd9c1a049334259c/spacer.gif][http://app.yesware.com/t/d1fcbaa1b12e0f6b1beef0b50d5ebbd873d1b8f9/1f16b46240a5a722bd9c1a049334259c/spacer.gif]
------------------------------------------------------------------------------
WINDOWS 8 is here.
Millions of people. Your app in 30 days.
Visit The Windows 8 Center at Sourceforge for all your go to resources.
http://windows8center.sourceforge.net/
join-generation-app-and-make-money-coding-fast/
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net<mailto:Libmesh-devel@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/libmesh-devel
------------------------------------------------------------------------------
WINDOWS 8 is here.
Millions of people. Your app in 30 days.
Visit The Windows 8 Center at Sourceforge for all your go to resources.
http://windows8center.sourceforge.net/
join-generation-app-and-make-money-coding-fast/
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel