You should run M5 in a debugger and see where the segfault comes from.  
Looking over the code you have below I don't see a problem. As for the  
array, sure but you would have to insert each element in the array  
separately.

Ali
On Nov 4, 2008, at 3:41 AM, Dean Michael Ancajas wrote:

> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: 
> http://m5sim.org/cgi-bin/mailman/private/m5-users/attachments/20080918/c7a931f3/attachment-0001.htm
>
>
> I think you have a misconception about the events. Events can be
> reused, so as long as you don't have more than one event outstanding
> for a specific task (and you really shouldn't ever do this), you
> shouldn't need to dynamically create them.  Of the top of my head I
> can' think of what the copy constructor looks like for an Event, but
> it doesn't seems like it would do what you appear to want it to do. I
> would imagine that the event copying is the root of the problem, that
> or something subtle about using the comInstEventQueue.
>
> Ali
>
> hi Ali,
>    I know my reply is late, very sorry. Anyways, I've fixed the  
> thread-ID error, it turns out I haven't initialized it properly in  
> the constructor list. So now I can schedule the event to be  
> process()'d at the correct instruction count in each thread, however  
> I still get a segmentation fault error when I call  
> suspendContext(tid) or even deactivateThread(tid). Any tips on how  
> to debug this? And also my reason that I dynamically create  
> SuspendThreadEvent is because I can only find out the number of  
> threads(which would be important when Queue-ing the event in the  
> comInstEventQueue array),instruction count depending on the  
> configuration of the CPU. I'm fairly new to C++ and after reading  
> about copy constructors I understand the fundamental problem of my  
> previous code in scheduleSuspendThreadEvent() method,
>
> so my new scheduleSuspendThreadEvent() is now:
>
>
> void scheduleSuspendThreadEvent(int _tid,Tick when){
> 190         // Schedule thread to suspend, regardless of its current  
> state.
> 191         DPRINTF(Event,"suspend thread:%d \n",_tid);
> 192
> 193         new SuspendThreadEvent(comInstEventQueue[_tid], 
> 1000,_tid); //hard-coded to suspend in 1000 instructions each  
> thread; will be changed later
> 202         }
>
> I removed the "SuspendThreadEvent  
> suspendThread[Impl::Maxthreads]"(see code below from previous email)  
> line to prevent issues in copy constructors and just dyamically  
> created the events(the downside is that I cannot access the created  
> events after, which I guess is fine as of now). Also, I know that  
> this is not an M5-related question but a C++ one: Is it possible  
> create an array of Events in M5 that wouldn't use the standard  
> constructors? The relevance of my question is that I wanted to pass  
> the thread_id of each event so that it would be queued in its own  
> comInstEventQueue[].
>
>
>
> Thanks in advance!
>
>
>
>
>
> On Sep 18, 2008, at 4:20 AM, Dean Michael Ancajas wrote:
>
> > hi everybody,
> >     I've create d an Event called SuspendThreadEvent(same properties
> - Hide quoted text -
>
> > with ActivateThreadEvent in src/o3/cpu.cc) which will call
> > FullO3CPU<Impl>::
> suspendContext(int tid), to be able to initialize a
> > SuspendThreadEvent instance, I created
> > scheduleSuspendThreadEvent(tid,cpu), the problem is when I passed
> > the correct parameter to scheduleSuspendThreadEvent but according to
> > the generated traces(see below) the value used in the initialization
> > is different.
> >
> > commandline:
> > [EMAIL PROTECTED]:~/m5/repos/smt$ ./m5.debug --trace-file=event2.out --
> > trace-flags=Event tests/run.py quick/01.hello-2T-smt/alpha/tru64/o3-
> > timing
> >
> >
> > in cpu.cc
> >  if( params->max_insts_pause_each_thread == 0 ){ //number of
> > instructiosn has been coded in initialization at cpu.hh
> >  279
> >  280         for(int tid=0;tid < numThreads; tid++){
> >  281
> >  282            DPRINTF(Event,"Num of threads: %d\n",numThreads); //
> > print number of threads
> >  283            DPRINTF(Event,"1. scheduling suspend thread: %d
> > \n",tid); //print out thread # to be suspended
> >  284            scheduleSuspendThreadEvent(tid,params-
> > >max_insts_pause_each_thread);
> >  285            DPRINTF(Event,"2. scheduling suspend thread: %d
> > \n",tid); //double check if value of tid has changed
> >  286         }
> >  287     }
> >
> >
> > in cpu.hh
> >  /** added by dean michael ancajas, Schedule thread to suspend **/
> > 189         void scheduleSuspendThreadEvent(int _tid,Tick when){
> > 190         // Schedule thread to suspend, regardless of its current
> > state.
> > 191         DPRINTF(Event,"suspend thread:%d \n",_tid);
> > 192
> > 193         suspendThreadEvent[_tid] = *(new
> > SuspendThreadEvent(comInstEventQueue[_tid],100)); //for now this is
> > hard-coded to suspend in 100 instructions each thread
> > 194         suspendThreadEvent[_tid].init(_tid,this);
> > 201         }
> >
> >
> > Generated traces from event2.out:
> >
> >    2       0: system.cpu: Num of threads: 2
> >    3       0: system.cpu: 1. scheduling suspend thread: 0
> >    4       0: system.cpu: suspend thread:0
> >    5       0: Event_15: FullO3CPU "Suspend Thread" event scheduled @
> > 100
> >    6       0: Event_15: thread suspend: 0
> >    7       0: system.cpu: 2. scheduling suspend thread: 0
> >    8       0: system.cpu: Num of threads: 2
> >    9       0: system.cpu: 1. scheduling suspend thread: 1
> >   10       0: system.cpu: suspend thread:1
> >   11       0: Event_16: FullO3CPU "Suspend Thread" event scheduled @
> > 100
> >   12       0: Event_16: thread suspend: 9
> >   13       0: system.cpu: 2. scheduling suspend thread: 1
> >   14       0: Event_2: FullO3CPU tick event scheduled @ 0
> >
> >
> > The first SuspendThreadEvent was initialized properly(line 3's
> > thread # and line 6's thread # are equal, but the 2nd is not, line 9
> > says it must suspend thread #1 but in line 12 it passed thread #9.
> > I'm confused as to where the value started to change. As we can also
> > see in line 13, the value of tid in cpu.cc hasn't change after
> > calling the scheduleSuspendThreadEvent. So I guess the culprit must
> > be in the scheduleSuspendThreadEvent.. Any help/ideas would be
> > greatly appreciated.
> >
> > thanks in advance,
> > Dean Michael Ancajas
> >
> > _______________________________________________
> > m5-users mailing list
> > [email protected]
> > http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
>
>
>
> ------------------------------
>
> _______________________________________________
> m5-users mailing list
> [email protected]
> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
>
> End of m5-users Digest, Vol 26, Issue 10
> ****************************************
>
>
> -- 
> Dean Michael B. Ancajas
>
> _______________________________________________
> m5-users mailing list
> [email protected]
> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

Reply via email to