A method is shown for selecting active, or hot, code traces in an executing
program for storage in a code cache. A trace is a sequence of dynamic
instructions characterized by a start address and a branch history which
allows the trace to be dynamically disassembled. Each trace is terminated
by execution of a trace terminating condition which is a backward taken
branch, an indirect branch, or a branch whose execution causes the branch
history for the trace to reach a predetermined limit. As each trace is
generated by the executing program, it is loaded into a buffer for
processing. When the buffer is full, a counter corresponding to the start
address of each trace is incremented. When the count for a start address
exceeds a threshold, then the start address is marked as being hot. Each
hot trace is then checked to see if the next trace in the buffer shares
the same start address, in which case the hot trace is cyclic. If the
start address of the next trace is not the same as the hot trace, then the
traces in the buffer are checked to see they form a larger cycle of
execution. If the traces subsequent to the hot trace are not hot
themselves and are followed by a trace having the same start address as
the hot trace, then their branch histories are companded with the branch
history of the hot trace to form a cyclic trace. The cyclic traces are
then disassembled and the instructions executed in the trace are stored in
a code cache.
Een methode wordt getoond voor actief, of heet selecteren, codesporen in een het uitvoeren programma voor opslag in een codegeheim voorgeheugen. Een spoor is een reeks dynamische instructies die door een beginadres en een takgeschiedenis worden gekenmerkt die het spoor om dynamisch toelaat worden gedemonteerd. Elk spoor wordt door uitvoering van een spoor geƫindigd dat voorwaarde eindigt die een achterwaartse genomen tak, een indirecte tak, of een tak is de waarvan uitvoering de takgeschiedenis voor het spoor veroorzaakt om een vooraf bepaalde grens te bereiken. Aangezien elk spoor door het het uitvoeren programma wordt geproduceerd, wordt het geladen in een buffer voor verwerking. Wanneer de buffer volledig is, wordt een teller die aan het beginadres beantwoordt van elk spoor verhoogd. Wanneer de telling voor een beginadres een drempel overschrijdt, dan is het beginadres duidelijk zoals zijnd heet. Elk heet spoor wordt dan gecontroleerd om te zien of deelt het volgende spoor in de buffer het zelfde beginadres, waarbij het hete spoor cyclisch is. Als het beginadres van het volgende spoor niet het zelfde is als het hete spoor, dan de sporen in de buffer wordt gecontroleerd om te zien zij vorm een grotere cyclus van uitvoering. Als de sporen volgend op het hete spoor niet heet zelf zijn en door een spoor dat gevolgd het zelfde beginadres dat het hete spoor, dan hun takgeschiedenissen is heeft companded met de takgeschiedenis van het hete spoor om een cyclisch spoor te vormen. De cyclische sporen worden dan gedemonteerd en de instructies die in het spoor worden uitgevoerd worden opgeslagen in een codegeheim voorgeheugen.