Thank you very much for the explanation Luke,
However
(1)
> These asserts are confusing but not incorrect. Ruby only
> knows about SMT processor numbers, so the cpuNumber passed in should be
> less than numProcs. In your example cpuNumber and seq_index should only
be 0,1 if
> the SMT system is set up properly.
If this is the case, the first assert should be:
ASSERT( (cpuNumber >= 0) && (cpuNumber < system_t::inst->m_numSMTProcs) );
instead of:
ASSERT( (cpuNumber >= 0) && (cpuNumber < system_t::inst->m_numProcs) );
Is it?
(2) in system.C
first, the numProcs is defined as:
// establish how many processors there are in the system
int numProcs = SIM_number_processors(); //for SMT, this is the total
number of LOGICAL processors in the system
then,
m_numSMTProcs = numProcs / CONFIG_LOGICAL_PER_PHY_PROC;
I am confused here because numProcs is first defined as the total number
of LOGICAL processors in the system. Is this the number of SMT processors?
If so, m_numSMTProcs = numProcs / CONFIG_LOGICAL_PER_PHY_PROC doesn't make
sense. It looks to me that numProcs should be set to the number
of PHYSICAL processors initiated by simics, is it? Maybe I misunderstand
the definition of LOGICAL processor?
Thanks again for your help...
Best regards,
Xuan Qi
On Tue, 25 Mar 2008, Luke Yen wrote:
> On Mon, 24 Mar 2008, Xuan Qi wrote:
>
> > Hi everyone,
> >
> > I am trying to configure SMT in GEMS2.1. I checked mfacet.py and
> > GEMS/opal/system/system.C but the code for SMT looks kind of strange
> > to me. Please help to correct my understanding. Thanks a lot.
> >
> > in system.C:
> > "m_numSMTProcs = numProcs / CONFIG_LOGICAL_PER_PHY_PROC;"
> >
> > so the number of SMT processor is equal the number of processors
> > initiated by simics over the number of config_logical on each SMT
> > processor. And CONFIG_LOGICAL_PER_PHY_PROC should be at least 2 in
> > order to make use of SMT (2 threads can issue
> > instructions simutaneously), am I right?
>
> Yes, you are correct.
> >
> > Next in system.C
> >
> > "ASSERT( (cpuNumber >= 0) && (cpuNumber < system_t::inst->m_numProcs) );
> >
> > int32 seq_index = cpuNumber;
> > ASSERT(seq_index >= 0 && seq_index < system_t::inst->m_numSMTProcs);"
> >
> > As seq_index is equal to cpuNumber, if numProcs = 4, then seq_index can
> > be 0, 1, 2, 3. But if i set CONFIG_LOGICAL_PER_PHY_PROC = 2, the
> > seq_index can only be 0, 1 to satisfy the second assert. It is kind of
> > conflict, isn't it?
> >
>
> These asserts are confusing but not incorrect. Ruby only
> knows about SMT processor numbers, so the cpuNumber passed in should be
> less than numProcs. In your example cpuNumber and seq_index should only be 0,1 if
> the SMT system is set up properly.
>
> Luke
> _______________________________________________
> Gems-users mailing list
> Gems-users@xxxxxxxxxxx
> https://lists.cs.wisc.edu/mailman/listinfo/gems-users
> Use Google to search the GEMS Users mailing list by adding "site:https://lists.cs.wisc.edu/archive/gems-users/" to your search.
>
>
|