[Gems-users] Can't implemente magic-break-enable


Date: Sun, 16 Aug 2009 12:17:57 +0800
From: "shanshuchang" <shanshuchang@xxxxxxxxx>
Subject: [Gems-users] Can't implemente magic-break-enable
Hi all:
I've got a problem implementing the magic instruction break:
 
I got splash2_simics benchmarks from the net.Then I compiled it myself ,copied it into my 16p- simulated solaris machine and write down the checkpoint.
 
As is shown in ISCA-tutorial,I tried to warm up the cache when the barnes benchmark was running:


1) first run  (Simics)

----------------------------------------------------------------------------------------

  * The Console command: ./BARNES < input_p16.8192

2) second run  (Need Simics+Ruby)

-------------------------------------------------------------------------------------------

load "cold" checkpoint generated in the first run,

set up ruby

    ./BARNES < input_p16.8192

   ruby0.save-caches barnes.caches.gz  
   write-configuration CHKPT_DIR/barnes-warm-16p.check

3) third run (Real simulation--RUBY+OPAL)

----------------------------------------------------------------------------------------------

load barnes-warm-16p.check

load barnes.cache.gz

clear ruby stats

start simulcation

*The Console Commands:./BARNES < input_p16.8192; magic_call break


But the running can't be interruptted by the magic_call which really exists in barnes/code.C

 

In splash2_simics/codes/apps/barnes/code.C

main(argc, argv)

{

    ......

   Global->tracktime = 0;
   Global->partitiontime = 0;
   Global->treebuildtime = 0;
   Global->forcecalctime = 0;

  

    MEMSYS_ON   /*macro definition--#define MEMSYS_ON MAGIC(1) in splash2_simics/codes/solaris.threads/magic.h*/

  
    /* Create the slave processes: number of processors less one,
      since the master will do work as well */
   Global->current_id = 0;
   for(ProcessId = 1; ProcessId < NPROC; ProcessId++) {
      CREATE(SlaveStart);
   }

   /* Make the master do slave work so we don't waste the processor */
   CLOCK(Global->computestart);
   printf("COMPUTESTART  = %12u\n",Global->computestart);
   SlaveStart();
   
    ......

}

 

However, here is the warning:
Warning: in fn void magic_instruction_callback(void*, void*, integer_t) in simics/commands.C:476: val is 1
Warning: in fn void magic_instruction_callback(void*, void*, integer_t) in simics/commands.C:476: val is 1
Warning: in fn void magic_instruction_callback(void*, void*, integer_t) in simics/commands.C:477: SIMICS_get_program_counter(proc_num) is [0x145b8, line 0x14580]
Warning: in fn void magic_instruction_callback(void*, void*, integer_t) in simics/commands.C:477: SIMICS_get_program_counter(proc_num) is [0x145b8, line 0x14580]
Warning: in fn void magic_instruction_callback(void*, void*, integer_t) in simics/commands.C:478: Unexpected magic call
Warning: in fn void magic_instruction_callback(void*, void*, integer_t) in simics/commands.C:478: Unexpected magic call


I am sorry for so long mail. My question is how to implement the magic_call break function, so I can stop the simulation wherever I expected.

As is in the barnes,how can I managed to stop the simulation by the MEMSYS_ON call?

 

Any help is appreciated!

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