It looks like how I would implement the same functionality, though I don't know
which dimension -- sets or assoc -- comes first in the m_cache member var --
maybe the indexes are backwards? (I haven't checked the definition)
Regards,
Dan
Mladen Nikitovic wrote:
> Will do that. Thanks. Just wondered if there was anything semantically
> wrong with the code. I'm thinking about the way I've created the message
> and the way I've extracted the address from the cache. Does that seem as
> a reasonable approach?
>
> I implemented the functions to extract the number of sets and ways and
> the address myself, there could be an error there. This is what I added
> to CacheMemory.h
>
> template<class ENTRY>
> inline
> int CacheMemory<ENTRY>::getCacheNumSets()
> {
> return m_cache_num_sets;
> }
>
> template<class ENTRY>
> inline
> int CacheMemory<ENTRY>::getCacheAssoc()
> {
> return m_cache_assoc;
> }
>
> template<class ENTRY>
> inline
> Address CacheMemory<ENTRY>::getAddress(int i, int j)
> {
> return m_cache[i][j].m_Address;
> }
>
> /M
>
> Dan Gibson wrote:
>
>> This is a vector/array bounds assertion. Apparently some code in flush is
>> accessing a Vector<L1Cache_Entry> with an offset too large for the specified
>> size of the vector. As a first step, track down places were vectors are indexed
>> in your call stack -- or better yet, attach gdb when you get the assertion and
>> pop the call stack a few times to find the right spot.
>>
>> Regards,
>> Dan
>>
>> Mladen Nikitovic wrote:
>>
>>> I have reproduced the error and this is the message I get from
>>> Simics/GEMS when I try to do the flush:
>>>
>>>
>>> simics> c
>>> before flush (8023)
>>> failed assertion 'index < m_size' at fn TYPE& Vector<TYPE>::ref(int)
>>> [with TYPE = L1Cache_Entry] in ../common/Vector.h:168
>>> failed assertion 'index < m_size' at fn TYPE& Vector<TYPE>::ref(int)
>>> [with TYPE = L1Cache_Entry] in ../common/Vector.h:168
>>> At this point you might want to attach a debug to the running and get to the
>>> crash site; otherwise press enter to continue
>>> PID: 3981
>>> Warning: Interrupt key pressed more than once.
>>> Pressing it again will force Simics back to the command prompt.
>>> This may corrupt the running simulation.
>>> Try waiting for Simics to stop first.
>>> USER INTERRUPT: Interrupt key pressed multiple times.
>>> Returning to prompt.
>>> simics>
>>>
>>>
>>> Hopefully this can help someone to shed some light on this matter.
>>>
>>> Best Regards,
>>> Mladen
>>>
>>> Mladen Nikitovic wrote:
>>>
>>>
>>>> Hi,
>>>>
>>>> I'm trying to implement a function that flushes the L1 caches. You can
>>>> see from my previous posts that I have arrived at a solution that
>>>> involves some augmentation of protocol code etc. But, the final thing is
>>>> actually implementing the flush in the Sequencer, which was supposed to
>>>> be done be walking the I and D-cache entries and sending invalidation
>>>> request via the mandatory queue. I have tried to do that but the
>>>> simulation crashes when I try call the flush at the point of shutting
>>>> down one of the processors.
>>>>
>>>> Implementation-wise, is there anything in the following function that
>>>> should change?
>>>>
>>>> Thanks.
>>>>
>>>> Regards,
>>>> Mladen
>>>>
>>>> void Sequencer::flushL1caches(int cpu)
>>>> {
>>>> Time latency = SEQUENCER_TO_CONTROLLER_LATENCY;
>>>> CacheMsg Imsg, Dmsg;
>>>> int i,j, Iassoc, Dassoc, Isets, Dsets;
>>>>
>>>> Imsg.setType(CacheRequestType_INVALIDATE);
>>>> Dmsg.setType(CacheRequestType_INVALIDATE);
>>>>
>>>> Isets =
>>>> m_chip_ptr->m_L1Cache_L1IcacheMemory_vec[m_version]->getCacheNumSets();
>>>> Dsets =
>>>> m_chip_ptr->m_L1Cache_L1DcacheMemory_vec[m_version]->getCacheNumSets();
>>>>
>>>> Iassoc =
>>>> m_chip_ptr->m_L1Cache_L1IcacheMemory_vec[m_version]->getCacheAssoc();
>>>> Dassoc =
>>>> m_chip_ptr->m_L1Cache_L1DcacheMemory_vec[m_version]->getCacheAssoc();
>>>>
>>>> for(i=0; i<Isets; i++) {
>>>> for(j=0; i<Iassoc; j++) {
>>>>
>>>> Imsg.setAddress(m_chip_ptr->m_L1Cache_L1IcacheMemory_vec[m_version]->getAddress(i,j));
>>>>
>>>> m_chip_ptr->m_L1Cache_mandatoryQueue_vec[m_version]->enqueue(Imsg,
>>>> latency);
>>>> }
>>>> }
>>>>
>>>> for(i=0; i<Dsets; i++) {
>>>> for(j=0; i<Dassoc; j++) {
>>>>
>>>> Dmsg.setAddress(m_chip_ptr->m_L1Cache_L1DcacheMemory_vec[m_version]->getAddress(i,j));
>>>>
>>>> m_chip_ptr->m_L1Cache_mandatoryQueue_vec[m_version]->enqueue(Dmsg,
>>>> latency);
>>>> }
>>>> }
>>>> }
>>>>
>>>> _______________________________________________
>>>> 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.
>>>>
>>>>
>>>>
>>>>
>>> _______________________________________________
>>> 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.
>>>
>>>
>>>
>>>
>> --
>> http://www.cs.wisc.edu/~gibson [esc]:wq!
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> 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.
>>
>>
>>
>
>
> _______________________________________________
> 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.
>
>
>
--
http://www.cs.wisc.edu/~gibson [esc]:wq!
------------------------------------------------------------------------
_______________________________________________
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.