[llvm-commits] Fwd: Patch for review: Speeding up ScheduleDAG computations
Dan Gohman
gohman at apple.com
Mon Mar 3 09:58:42 PST 2008
Hi Roman,
Just one comment on this patch from me; in this change:
> SUnit *pop() {
> if (empty()) return NULL;
> - SUnit *V = Queue.top();
> - Queue.pop();
> + SUnit *V = *Queue.rbegin();
> + Queue.erase(V);
> return V;
> }
The erase call here uses the "key" form of erase, so it incurs a
lookup. This can can be avoided by using the iterator form,
something like this:
set::iterator i = prior(Queue.end());
SUnit *V = *i;
Queue.erase(i);
Dan
On Mar 3, 2008, at 3:06 AM, Roman Levenstein wrote:
> Hi,
>
>
> 2008/3/1, Evan Cheng <evan.cheng at apple.com>:
>
>> Let's try to solve one problem at a time.
>>
>> 1. Roman's depth / height patch calculation is obviously goodness.
>> Please commit that first.
>
>
> Here is the patch for ScheduleDAGList.cpp: computing priorities using
> a linear algorithm. It uses the same idea as the height/depth
> computation, i.e. dynamic programming. I took into account all
> comments from Dan & Evan from last review.
>
> Additionally, I use now std::set instead of a priority queue. The
> results are exactly the same as with the current SVN version - I
> really compared it side-by-side during execution. Using std::set makes
> operations such as removal from the middle of the queue much faster
> and removes a bottleneck. Scheduling of very bigs BBs is now up to 3-4
> times faster.
>
> Please, review this new version, if it is OK for submission.
>
> And there is one more patch to come, for the ScheduleDAGRRList.cpp,
> which would also use std::set instead of priority queues, introduce
> strict ordering and contain queue update changes as David suggested.
>
> -Roman
> <ScheduleDAGList.patch>_______________________________________________
> 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