[Gems-users] About data prefetch


Date: Thu, 20 May 2010 14:30:55 +0800
From: lori zhuang <lorizhuang@xxxxxxxxx>
Subject: [Gems-users] About data prefetch
List,
     I wonder if Ruby simulates the behavior of data prefetch. It seems like it does according to this link https://lists.cs.wisc.edu/archive/gems-users/2007-November/msg00102.shtml. But it seems like it doesn't according to the code in SimicsDriver.C:

int SimicsDriver::makeRequest(memory_transaction_t *mem_trans) {
    ...
    ...
    // skip unsupported types
    if (isUnhandledTransaction(mem_trans)) {
    ret = Unhandled;
    } else {
     // perform makeRequest()
      int proc = SIMICS_get_proc_no(mem_trans->s.ini_ptr);
     ret = m_processors[proc]->makeRequest(mem_trans);
   }
   ...
  ...
}

bool SimicsDriver::isUnhandledTransaction(memory_transaction_t* mem_trans) {
  // only handle user data?
  if (USER_MODE_DATA_ONLY) {
    if(PRIV_MODE) {
      return true;
    }
    if(mem_trans->s.type == Sim_Trans_Instr_Fetch) {
      return true;
    }
  }

  // no prefetches
  if (mem_trans->s.type == Sim_Trans_Prefetch) {
    return true;
  }

  // no cache flush
  if (mem_trans->s.type == Sim_Trans_Cache) {
    return true;
  }

  // no DMA & IO
  if (IS_DEV_MEM_OP(mem_trans->s.ini_type) ||
      IS_OTH_MEM_OP(mem_trans->s.ini_type) ||
      mem_trans->s.physical_address > uinteger_t(RubyConfig::memorySizeBytes())
     ) {
    return true;
  }

  return false;
}

Ruby skips supported types memory request and it threats Sim_Trans_Prefetch as unsupported types. Hence I think Ruby doesn't simulates data prefetching. Am I right?
Since I'm going to add a prefetch instruction of the SPARC v9 instruction set to a benchmark and see if any speedups. That's why I care so much about prefetching. Any suggestion is highly appreciated. 


Thanks,
lorizhuang



[← Prev in Thread] Current Thread [Next in Thread→]