[llvm-commits] Speeding up RegAllocLinearScan on big test-cases
Bill Wendling
isanbard at gmail.com
Wed May 7 11:13:02 PDT 2008
I don't think I was suggesting that they were a mysterious or poorly
understood. Just that because they are non-trivial, they could be the
source of even more bugs if we try to create our own. Please use them
if you have an existing one that works well.
-bw
On Wed, May 7, 2008 at 1:24 AM, Roman Levenstein
<romix.llvm at googlemail.com> wrote:
> Hi,
>
> 2008/5/7 Bill Wendling <isanbard at gmail.com>:
>
>
> > On Tue, May 6, 2008 at 3:31 PM, Evan Cheng <evan.cheng at apple.com> wrote:
> > > On May 6, 2008, at 6:13 AM, Roman Levenstein
> >
> >
> > > > But one thing about std::set that could be eventually interesting at
> > > > many places
> > > > is the following:
> > > > - in many situations we know the maximal size of the set in advance.
> > > > For example,
> > > > in this patch, the set can contain at most all live intervals. In
> > > > the scheduler,
> > > > the availableQueue can contain at most all SUnits. It means that
> > > > if we would
> > > > be able to allocate the memory for the maximum possible number of
> > > > elements
> > > > in advance, then there is no need for any additional memory
> > > > allocation.
> > > >
> > > > - I think, a custom STL allocator could be written that could do
> > > > exactly this. It would
> > > > reserve memory for the maximum number of elements (of the equal
> > > > size?)and
> > > > maintain a free list of cells. Then we can have a very efficient
> > > > allocation and sets
> > > > that do no produce to much malloc/free pressure. The same idea can
> > > > be used
> > > > also for some other STL containers.
> > > >
> > > > What do you think?
> > >
> > > I am not sure. I have little experience with custom STL allocators.
> > > Perhaps others will chime in. For now, using std::set is fine.
> > >
> > I created custom allocators before. They aren't that bad. You just
> > have to get the functionality correct (the allocators I created called
> > a malloc function that already had this functionality). The major
> > caveat is that if you don't have a well-tested memory manager
> > available, this can lead to nasty bugs. I would stick with std::set
> > unless it becomes a major albatross around our necks.
>
> I have a lot of experience with custom allocators. I extensively used
> them in the optimizing C compiler that I have written few years ago
> for an embedded target. Initially I was using simple malloc/free and
> new/delete. Then I moved to GC, but at the end I switched to
> custom memory allocators. I can only save, that they had very positive
> impact on the performance of my compiler.
>
> Custom memory allocators are not such a black art, as it may seem at
> first glance, actually. And there are quite well proven allocators.
> Usually, they
> are not that complex and it is rather easy to see if they are correct.
> Normally, they are used for node-based STL containers or for most
> typical nodes created by the compiler (e.g. SDNode, SDOperand, SUnit, etc).
> And they can really speed-up things, e.g. if they use pool allocation or
> segregated storage or if they free all the objects at once.
> For example, imagine that we use such an allocator for SUnit nodes. Then
> it may reserve memory for N SUnit objects and very quickly allocate it.
> Once scheduling is over, all such objects can be freed at once, just by
> cleaning/deleting the custom allocator.
>
> I'm currently experimenting with 4-5 different custom STL allocators
> I have found on the Internet. Once I have representative figures to compare
> them again STL's standard allocators and after I cleaned up the code,
> I'll report about it to this mailing list.
>
> -Roman
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list