[Gems-users] Regarding Opal regd error


Date: Wed, 26 Oct 2005 13:07:43 -0500 (CDT)
From: Luke Yen <lyen@xxxxxxxxxxx>
Subject: [Gems-users] Regarding Opal regd error
Hello Brinda,

   Sorry for the late reply but at least one other group member has
experienced this same problem.  It would help if you could print out the
instruction causing this error.  To do this, please add the following code
to     opal/system/dynamic.C, inside Execute():

void
dynamic_inst_t::Execute( void ) {
  // call the appropriate function
  static_inst_t *si = getStaticInst();

  // BEGIN code to print out instr
  char buf[128];
  si->printDisassemble(buf);
  cout << "P_" << m_pseq->getID() << ": " << buf << "cycle = " << m_pseq->getLocalCycle() << endl;
  // END code
   ...
}

  The above code will print out the processor number followed by the
instruction followed by the cycle number.  Obviously this will print out
every instruction executed by Opal, but here's how to narrow down the
cycles which you are interested in:

  1) Add this to opal/system/regfile.h, inside the physical_file_t class.
This will enable retrieval of the pseq_t pointer object:

  /** returns pointer to sequencer  (useful for debugging) */
  pseq_t * getSeq() const {
    return m_pseq;
  }

  2) Add this inside opal/system/arf.C, in this function that prints out
your error msg:

void    abstract_rf_t::writeFloat32( reg_id_t &rid, float32 value)
{
  DEBUG_OUT("error: trying to write float32 out of non-64 bit register
(type=%d)  cycle = %lld\n", rid.getRtype(),
m_rf->getSeq()->getLocalCycle() );
}

 3) Recompile Opal, rerun sim

  Now Opal should output the exact cycle in which the error occurred, so
you can start outputing instructions in Execute() close to the cycle
in which the error occurred.

  Based on the group member experiencing the error the faulty
instruction is "fdtox", which converts a floating point to a
64-bit integer in the floating point register file.

  Luke

============================================================
original msg:
Hi

Im running the specJBB benchmark on simics +
opal(default configuration) + ruby ( protocol
MOESI_CMP_directory).

I get the following error

error: trying to write float32 out of non-64 bit
register (type=6)
simics-common: system/dynamic.C:444: virtual void
dynamic_inst_t::Execute(): Assertion
`(getDestReg(0).getARF()->isReady( getDestReg(0) ))'
failed.
***  Simics getting shaky, switching to 'safe' mode.
***  Simics (main thread) received an abort signal,
probably an assertion.


The program runs through fine on simics. Has anybody
seen this before or knows how I could get around it?

Thanks
Brinda
[← Prev in Thread] Current Thread [Next in Thread→]
  • [Gems-users] Regarding Opal regd error, Luke Yen <=