[Gems-users] squashing the pipeline in opal


Date: Tue, 15 Feb 2011 01:12:33 -0600
From: Philip Garcia <pcgarcia@xxxxxxxx>
Subject: [Gems-users] squashing the pipeline in opal
I know there aren't too many people that are that familiar with opal anymore, but I figured it can't hurt to ask.  Basically I'm trying to add a new condition that will cause a pipeline squash within opal, this is primarily for use within an SMT processor.

Imagine you have an SMT processor, and you have an instruction that knows it's going to be a long latency event (hundreds of cycles), what I want to do here is squash the pipeline for future instructions after this one, and prevent opal from fetching from this thread again until the request has been serviced.

The point of this is to free up resources in the instruction window that would be better used by other threads running on the processor.  I have attempted to set this up in a new routine in pseq.C called SquashInstruction, however this is causing all sorts of errors in my code.  Most notably, after calling Squash, the instruction i wanted to cause the squash event is still in the instruction window.

My code for this method is as follows:

void pseq_t::SquashInstruction(dynamic_inst_t *d)
{

  partialSquash(d->getWindowIndex(), d->getCheckpointFetchAt(),
		(enum i_opcode) d->getStaticInst()->getOpcode(), d->getProc(), false);
  d->Squash();
}

However not long (10s or 100s of cycles) after this is called the simulator will give an error or crashes depending on how I do things (i've tried a few permutations of this basic approach).  Does anyone know if there's anything else that needs to be set to force a squash in the instruction window?  

If anyone is familiar with squashing instructions in opal (or knows someone who might be familiar with this), please let me know.

thanks,
Phil
[← Prev in Thread] Current Thread [Next in Thread→]