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.