Hi Vipin,
The solution will depend on the way you want to retrieve your saved messages.
If you want to retrieve them in the same order you saved them, just add an
extra MessageBuffer to the cache machine, initialize it in the python script
and enqueue/dequeue in it the messages you want to save (hint, if using gem5
v21+, you should be able to write out_msg := in_msg instead of copying all
fields by hand).
If you do not store too many messages, you can also attempt to use the recycle
feature of MessageBuffer to cycle through messages and find the one you are
looking for. Because ruby does not support loops, you will have to hack the
built_in controller wake up loop. Details would be a bit too long to expose and
I don't have time to test my idea... But that will definitely make for a fun
exercise ;)
You can also store inside the TBE all the information you need to reconstruct
the message when needed.
Last approach that should work for associative lookup: define your own
container similar to TBE but with support for non default constructible types.
This will be hacky but sometime ruby does not leave you the choice. Here is a
very simple example that you can adapt to your need:
1. Put "#include <unordered_map>" in a new file
"src/mem/ruby/protocol/std::unordered_map.hh" (do not forget the std:: in the
file name as ruby will automatiaclly include this exact file because of 2.)
2. Add
structure(std::unordered_map, external="yes") {
void emplace(Addr, MyMsgType);
MyMsgType at(Addr);
void erase(Addr);
}
std::unordered_map myMapName, template="<Addr, MyMsgType>";
to your machine.
3. You can now write
myMapName.emplace(addr, in_msg);
out_msg := myMapName.at(addr);
myMapName.erase(addr);
This is very hacky and I don't recommend this for anything other than internal
use, but it should work like a charm. If you need something cleaner, you will
have to dive into ruby code generation and how it interfaces with C++. You will
then be able to define arbitrary complex C++ constructs that can be used from
inside ruby.
And if I am missing a more idiomatic solution, anyone please enlighten me ;)
Best,
Gabriel
_______________________________________________
gem5-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s