ruby: new atomics implementation
authorDerek Hower <drh5@cs.wisc.edu>
Tue, 19 Jan 2010 23:11:36 +0000 (17:11 -0600)
committerDerek Hower <drh5@cs.wisc.edu>
Tue, 19 Jan 2010 23:11:36 +0000 (17:11 -0600)
commit07ea0891f1699f6194a05516948ce3824fb8fb38
treeb5c22e3fe49a7e0d277fdb9ac5ee87c2aa0321e5
parent279f179babc9e5663156777c533c06edc91bce9a
ruby: new atomics implementation

This patch changes the way that Ruby handles atomic RMW instructions. This implementation, unlike the prior one, is protocol independent. It works by locking an address from the sequencer immediately after the read portion of an RMW completes. When that address is locked, the coherence controller will only satisfy requests coming from one port (e.g., the mandatory queue) and will ignore all others. After the write portion completed, the line is unlocked. This should also work with multi-line atomics, as long as the blocks are always acquired in the same order.
14 files changed:
src/mem/protocol/MESI_CMP_directory-L1cache.sm
src/mem/protocol/MI_example-cache.sm
src/mem/protocol/MOESI_CMP_directory-L1cache.sm
src/mem/ruby/buffers/MessageBuffer.hh
src/mem/ruby/config/MI_example-homogeneous.rb
src/mem/ruby/config/TwoLevel_SplitL1UnifiedL2.rb
src/mem/ruby/config/cfg.rb
src/mem/ruby/libruby.cc
src/mem/ruby/slicc_interface/AbstractController.hh
src/mem/ruby/system/Sequencer.cc
src/mem/ruby/system/Sequencer.hh
src/mem/slicc/ast/PeekStatementAST.py
src/mem/slicc/parser.py
src/mem/slicc/symbols/StateMachine.py