systemc: avoid dynamic_cast in the critical path
NodeList is in the critical path of the systemc scheduler in gem5. A unnecessary dynamic_cast in the NodeList slow down the event process by about 15%. Fix the issue by avoiding dynamic_cast. We see about 15% speed improvement on the example provided by Matthias Jung: https://gist.github.com/myzinsky/557200aa04556de44a317e0a10f51840 Compare with Accellera implementation, gem5 version is originally 10x slower and now it's about 8.5x slower. Change-Id: I3b4ddca31e58e1d4e96144a4021b0a5bb956fda4 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/34355 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -102,8 +102,13 @@ struct NodeList : public ListNode
|
||||
prevListNode = t;
|
||||
}
|
||||
|
||||
T *getNext() { return dynamic_cast<T *>(nextListNode); }
|
||||
bool empty() { return getNext() == nullptr; }
|
||||
T *
|
||||
getNext()
|
||||
{
|
||||
return empty() ? nullptr : static_cast<T *>(nextListNode);
|
||||
}
|
||||
|
||||
bool empty() { return nextListNode == this; }
|
||||
};
|
||||
|
||||
} // namespace sc_gem5
|
||||
|
||||
Reference in New Issue
Block a user