[Gems-users] How to abort a transaction at commit time


Date: Fri, 25 Apr 2008 19:58:13 +0200
From: "Rubén Titos" <rtitos@xxxxxxxxxxx>
Subject: [Gems-users] How to abort a transaction at commit time
Dear list,

I'm simulating a LogTM-like (EagerCD EagerVM) transactional memory machine, using GEMS 2.0 and simics 2.2.19.

I've customized the filter_directory protocol and TransactionInterfaceManager.C so that a commit_transaction "instruction" has to notify each L2 bank, and must receive a commit_ack msg before the commit actions actually take place. I managed to do that without much problem, just disabling the simics processor when executing TransactionInterfaceManager::commitTransaction, and enabling it again when all the commit_acks have arrived (calling xact_mgr from the protocol).
However, now I want to go one step further and want to add "commit_nack" messages that, instead of "granting commit", force the transaction to abort. Here is where I'm having trouble:  I can't prevent the transaction from continuing its execution PAST the commit magic call before the abort happens. After all the commits acks/nacks have arrived, my "notifyCommitNackReceived" call  does find shouldTrap set to true (setAbortFlag is called earlier, by some other code of mine) but the question is, how can I abort that transaction at that time? If I just enable the simics proc (as I did before, when I had only acks) , it eventually traps after executing the next instruction, but that is not only semantically incorrect but sometimes also leads to new calls to beginTransaction by the (to-be) aborting processor, before the abort trap actually jumps in.

So, can anybody help me on how to abort a transaction after simics has reached the commit PC?

Thanks in advance,

Ruben

--
Rubén Titos
Parallel Computing and Architecture Group
Computer Engineering Dept.
University of Murcia
http://skywalker.inf.um.es/~rtitos/
[← Prev in Thread] Current Thread [Next in Thread→]