learning gem5 part iilearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · a...
TRANSCRIPT
![Page 1: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/1.jpg)
Learning gem5 – Part IIModifying and Extending gem5
Jason Lowe-Powerhttp://learning.gem5.org/
https://faculty.engineering.ucdavis.edu/lowepower/
© Jason Lowe-Power <[email protected]> 1
![Page 2: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/2.jpg)
A simple SimObjecthttp://learning.gem5.org/book/part2/helloobject.html
© Jason Lowe-Power <[email protected]> 2
![Page 3: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/3.jpg)
gem5’s coding guidelines
Follow the style guide (http://www.gem5.org/Coding_Style)
Install the style guide when scons asks
Don’t ignore style errors
Use good development practices
Historically mercurial queues
Now: git branches
© Jason Lowe-Power <[email protected]> 3
![Page 4: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/4.jpg)
Adding a new SimObject
Step 1: Create a Python class
Step 2: Implement the C++
Step 3: Register the SimObject and C++ file
Step 4: (Re-)build gem5
Step 5: Create a config script
© Jason Lowe-Power <[email protected]> 4
Switch!
![Page 5: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/5.jpg)
Step 1: Create a Python class
© Jason Lowe-Power <[email protected]> 5
| from m5.params import *| from m5.SimObject import SimObject|| class HelloObject(SimObject):| type = ‘HelloObject’| cxx_header = ‘learning_gem5/hello_object.hh’
Import the objects we need
m5.params: Things like MemorySize, Int, etc.
type: The C++ class name cxx_header: The filename for the C++ header file
HelloObject.py
![Page 6: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/6.jpg)
Step 2: Implement the C++
© Jason Lowe-Power <[email protected]> 6
| #include "params/HelloObject.hh"
| #include "sim/sim_object.hh"
| class HelloObject : public SimObject
| {
| public:
| HelloObject(HelloObjectParams *p);
| };
hello_object.hh params/*.hh generated automatically. Comes from Python SimObject definition
Constructor has one parameter, the generated params object.
![Page 7: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/7.jpg)
Step 2: Implement the C++
© Jason Lowe-Power <[email protected]> 7
HelloObject::HelloObject(HelloObjectParams *params)
: SimObject(params)
{
std::cout << "Hello World! From a SimObject!" << std::endl;
}
HelloObject*
HelloObjectParams::create()
{
return new HelloObject(this);
}
hello_object.cc
HelloObjectParams: when you specify a Param in the Hello.py file, it will be a member of this object.
You must define this function (you’ll get a linker error otherwise). This is how Python config creates the C++ object.
![Page 8: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/8.jpg)
Step 3: Register the SimObject and C++ file
© Jason Lowe-Power <[email protected]> 8
| Import(*)
| SimObject(‘Hello.py’)
| Source(‘hello_object.cc’)
SConscript Import: SConscript is just Python… but weird.
SimObject(): Says that this Python file contains a SimObject. Note: you can put pretty much any Python in here
Source(): Tell scons to compile this file (e.g., with g++).
![Page 10: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/10.jpg)
Step 5: Create a config script
© Jason Lowe-Power <[email protected]> 10
| ...
| system.hello = HelloObject()
| ...
Instantiate the new object that you created in the config file (e.g., simple.py)
> build/X86/gem5.opt configs/learning_gem5/hello.py
...
Hello world! From a SimObject!
...
![Page 11: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/11.jpg)
Simple SimObject code
gem5/src/learning_gem5/part2/hello_object.cc
gem5/src/learning_gem5/part2/hello_object.hh
gem5/src/learning_gem5/part2/HelloObject.py
gem5/configs/learning_gem5/part2/hello_run.py
© Jason Lowe-Power <[email protected]> 11
![Page 12: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/12.jpg)
Debug support in gem5http://learning.gem5.org/book/part2/debugging.html
© Jason Lowe-Power <[email protected]> 12
![Page 13: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/13.jpg)
Adding debug flags
© Jason Lowe-Power <[email protected]> 13
Switch!DebugFlag(‘Hello’)
DPRINTF(Hello, “Created the hello object”);
Declare the flag: add the debug flag to the SConscriptfile in the current directory
DPRINTF: macro for debug statements in gem5
Hello: the debug flag declared in the SConscript.Found in “debug/hello.hh”
Debug string: Any C format string
SConscript
hello_object.cc
![Page 14: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/14.jpg)
Debugging gem5
© Jason Lowe-Power <[email protected]> 14
> build/X86/gem5.opt --debug-flags=Hello configs/tutorial/hello.py
...
0: system.hello: Hello world! From a debug statement
debug-flags: Comma separated list of flags to enable. Other options include --debug-start=<tick>, --debug-ignore=<simobj name>,etc. See gem5.opt --help
![Page 15: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/15.jpg)
Event-driven programminghttp://learning.gem5.org/book/part2/events.html
© Jason Lowe-Power <[email protected]> 15
![Page 16: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/16.jpg)
Simple event callback
© Jason Lowe-Power <[email protected]> 16
Switch!| class HelloObject : public SimObject
| {
| private:
| ...
| void processEvent();
| EventFunctionWrapper event;
|
| public:
| HelloObject(HelloObjectParams *p);
| void startup();
| };
EventFunctionWrapper: Convenience class for simple events.
processEvent: Callback function to run when event fires.
startup: Called after all SimObjects instantiated. Schedule local events here.
![Page 17: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/17.jpg)
Simple event callback
© Jason Lowe-Power <[email protected]> 17
| void
| HelloObject::processEvent()
| {
| timesLeft--;
| DPRINTF(Hello, "Hello world!"
| " Processing the event! %d left\n", timesLeft);
| if (timesLeft <= 0) {
| DPRINTF(Hello, "Done firing!\n");
| } else {
| schedule(event, curTick() + latency);
| }
| }
schedule: Put an event instance on the event queue. An absolute tick used for when the event is processed.
curTick: Returns the current simulator time. Useful for relative time computations.
![Page 18: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/18.jpg)
Event SimObject code
http://learning.gem5.org/book/_downloads/hello_object1.hh
http://learning.gem5.org/book/_downloads/hello_object2.cc
© Jason Lowe-Power <[email protected]> 18
![Page 19: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/19.jpg)
SimObject parametershttp://learning.gem5.org/book/part2/parameters.html
© Jason Lowe-Power <[email protected]> 19
![Page 20: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/20.jpg)
Switch!
Adding parameters
© Jason Lowe-Power <[email protected]> 20
| class HelloObject(SimObject):| type = 'HelloObject'| cxx_header = "learning_gem5/hello_object.hh"|| time_to_wait = Param.Latency("Time before firing the event")| number_of_fires = Param.Int(1, "Number of times to fire the event before "| "goodbye")
Param.<TYPE>: Specifies a parameter of type <TYPE> for the SimObject
Param.<TYPE>(): First parameter: default value.Second parameter: “help”
![Page 21: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/21.jpg)
Going further: More parameters
Included types (e.g., MemorySize, MemoryBandwidth, Latency)
Using a SimObject as a parameter
SimObject-SimObject interaction
src/learning_gem5/part2/hello_object.cc & hello_object.hh
src/learning_gem5/part2/goodbye_object.cc & goodbye_object.hh
src/learning_gem5/part2/HelloObject.py & GoodbyeObject.py
© Jason Lowe-Power <[email protected]> 21
http://learning.gem5.org/book/part2/parameters.html
![Page 22: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/22.jpg)
Questions?
We covered
How to build a SimObject
How to schedule events
Debug statements in gem5
Adding parameters to SimObjects
© Jason Lowe-Power <[email protected]> 22
![Page 23: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/23.jpg)
MemObjectshttp://learning.gem5.org/book/part2/memoryobject.html
© Jason Lowe-Power <[email protected]> 23
![Page 24: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/24.jpg)
MemObject
Object that is part of gem5’s memory system
both classic caches and Ruby are MemObjects
Allowed to have MasterPorts and SlavePorts
© Jason Lowe-Power <[email protected]> 24
![Page 25: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/25.jpg)
Packets
Unit of transfer between MemObjects
Packets pass between Master and Slave ports
Packets haveRequestCommandDataMuch more…
© Jason Lowe-Power <[email protected]> 25
![Page 26: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/26.jpg)
Master and slave ports
© Jason Lowe-Power <[email protected]> 26
Master Slave
sendTimingReq recvTimingReq
returns: true Slave executesrequest
Time
sendTimingReq: send a Packet containing a request from a master to a slave
recvTimingReq: function that is called to handle the request in the slave port.
return true: The slave can handle the request.
![Page 27: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/27.jpg)
Master and slave ports
© Jason Lowe-Power <[email protected]> 27
Master Slave
sendTimingReq recvTimingReq
returns: true
returns: true
Slave executesrequest
recvTimingResp sendTimingResp
Time
sendTimingResp: The slave finishes processing the request, and now sends a response (same packet).
recvTimingResp: Handles the response from the slave. Returning true means the packet is handled.
![Page 28: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/28.jpg)
Master and slave ports
© Jason Lowe-Power <[email protected]> 28
Master Slave
sendTimingReq recvTimingReq
returns: falseSlave busyTim
e
sendTimingReq recvTimingReq
returns: true
recvReqRetry sendReqRetry
return false: Slave cannot currently process the Packet. Resend the packet later. The Master’sresponsibility to track Packet.
sendReqRetry: Tell the master it can retry the stalled Packet.
recvReqRetry: Can now retry the request by calling sendTimingReq.
![Page 29: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/29.jpg)
Master and slave ports
© Jason Lowe-Power <[email protected]> 29
Master Slave
returns: false
recvTimingResp sendTimingResp
return false: Master cannot currently process the Packet. Resend the packet later. The Slave’sresponsibility to track Packet.
returns: true
recvTimingResp sendTimingResp
sendRespRetry recvRespRetry
sendRespRetry: Slave can now retry the response.
![Page 30: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/30.jpg)
Master and slave port interface
Masterrecv Timing Resp
recv Req Retry
recv Range Change
Slaverecv Timing Req
recv Resp Retry
recv Functional
get Addr Ranges
© Jason Lowe-Power <[email protected]> 30
![Page 32: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/32.jpg)
Overview of SimpleMemobj© Jason Lowe-Power <[email protected]> 32
![Page 33: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/33.jpg)
SimpleCachehttp://learning.gem5.org/book/part2/simplecache.html
© Jason Lowe-Power <[email protected]> 33
![Page 34: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/34.jpg)
Cache: A first “real” object
How to model…
Data storage
Tags
Associativity
Data access latency
Blocking?
© Jason Lowe-Power <[email protected]> 34
std::map
Make an event
Could implement MSHRS…
![Page 35: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/35.jpg)
Design
Handle request -> accessTiming with a delayAccessTiming
->accessFuntional to check for hit/miss->if hit, reply->if miss, upgrade request and send read
Handle response-> insert new data (evict if needed)-> accessFunctional to read/write-> reply
© Jason Lowe-Power <[email protected]> 35
Switch!
![Page 36: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/36.jpg)
More on events
schedule(new EventFunctionWrapper(
[this, pkt] { accessTiming(pkt); },
name() + ".accessEvent",
true),
clockEdge(latency));
© Jason Lowe-Power <[email protected]> 36
Anonymous function to executeLocal variables to
“capture”
Delete this object after executing event
![Page 37: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/37.jpg)
Packet construction
Many different packet constructorsSee src/mem/packet.hh for details
Packet(Request, command)
Packet(Request, command, block size)Make a packet that is block aligned (overrides request address)
createRead/createWrite(Request)Should probably use these convenience functions
© Jason Lowe-Power <[email protected]> 37
![Page 38: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/38.jpg)
Packets data allocation
Dynamic data: Will be deleted when the packet is deleted
packet->allocate(): Allocates dynamic data
Static data: Give packet a pointer to the data. It will not delete it.
SenderState: Can be used to store “local” information
© Jason Lowe-Power <[email protected]> 38
![Page 39: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/39.jpg)
Packets: To delete or not to delete
Do not delete to send a response
Call packet->makeResponse()
Do delete if you are the final sink for the packet
E.g., a memory write
Do delete if you initiated the request and then received the response
© Jason Lowe-Power <[email protected]> 39
![Page 40: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/40.jpg)
Complete code available
Statistics
Better flow control
Code to make it work with O3CPU
Much more: http://learning.gem5.org/book/part2/simplecache.html
© Jason Lowe-Power <[email protected]> 40
![Page 41: Learning gem5 Part IIlearning.gem5.org/tutorial/presentations/learning gem5... · 2018-09-17 · A simple SimObject © Jason Lowe-Power 2](https://reader033.vdocuments.mx/reader033/viewer/2022042811/5fa3a87c0861e606a46c7a49/html5/thumbnails/41.jpg)
Questions?
We covered
How to make a MemObject
gem5 packets
The master – slave API in gem5
“Real” cache example
© Jason Lowe-Power <[email protected]> 41