Re: [Gems-users] A question about opal


Date: Fri, 18 Sep 2009 12:20:11 -0400
From: sparsh mittal ISU <sparsh@xxxxxxxxxxx>
Subject: Re: [Gems-users] A question about opal
Hello All,
I have one more question. I am exploring the possibility of disconnecting (not unloading) the opal module from ruby and connecting it again. On running the opal again, I am getting an error while trying to run opal0.sim-step 10000.


rubycache_t: ERROR (access)- number of Opal and Ruby Demand misses differ! opal[ 2 ] ruby[ 1 ]
[0] rubycache_t: delayed: 0 outstanding: 0 (0).
[0] rubycache_t: outstanding memory transactions.
[0]    rubycache_t IFETCH: 0x2c46180 (posted: 1) thread[ 0 ]
[0]    rubycache_t IFETCH: 0x2c009c0 (posted: 139983) thread[ 0 ]
 
Ruby's Outstanding Request Table:
Sequencer Stats Version 0
Current time = 143547
---------------
outstanding requests
proc 0 thread 0 Read Requests = 1
        Request[ 0 ] = IFETCH Address [0x2c009c0, line 0x2c009c0] Posted 143547 PF No
proc 0 thread 0 Write Requests = 0

Total Number Outstanding: 1
Total Number Demand     : 1
Total Number Prefetches : 0


ASSERT_FAILURE_CYCLE[ 139983 ]
simics-common: system/rubycache.C:1131: ruby_status_t rubycache_t::access(la_t, pa_t, OpalMemop_t, la_t, bool, waiter_t*, bool&, bool&, bool&, int): Assertion `(total_opal_demand == total_ruby_demand)' failed.
Abort (SIGABRT) in main thread
The simulation state has been corrupted. Simulation cannot continue.
Please restart Simics.
=======================================================


The error arises from this piece of code in opal/system/rubycache.c file, function named access:

if(CONFIG_WITH_RUBY){
      int total_opal_demand = getOpalNumberOutstandingDemand(); printf(" Opal %d ", total_opal_demand);
      int total_ruby_demand = getRubyNumberOutstandingDemand(); printf(" ruby %d \n ", total_ruby_demand);
      if( total_opal_demand != total_ruby_demand ){
        ERROR_OUT("rubycache_t: ERROR (access)- number of Opal and Ruby Demand misses differ! opal[ %d ] ruby[ %d ]\n", total_opal_demand, total_ruby_demand);
        //reset debug cycle
        debugio_t::setDebugTime( 0 );
        print();
      }
    
      ASSERT(total_opal_demand == total_ruby_demand );
    }


I wanted to ask what could be the likely cause for the assertion to be false and any suggestions about how can one improve it?
--
Thanks and Regards
Sparsh Mittal
Graduate Student
Electrical and Computer Engineering
Iowa State University, Iowa, USA
[← Prev in Thread] Current Thread [Next in Thread→]