Hi James,
Are you using Opal? LogTM is designed to be used
with the simple 1-cycle simics model, this is, without Opal. Also, you can try compiling
Ruby with the "DEBUG_FLAGS += -DRUBY_DEBUG=true" option (see README.debugging
in the Ruby directory) and display the debug messages for the LogTM module:
ruby0.debug-filter X
ruby0.debug-verb high
If
you do not see any output message (not even for the transaction start) you
might probably have overwritten the callback function install in
$GEMS/ruby/module/ruby.c. Make sure that the following line exists in the init_local
function:
SIM_hap_add_callback("Core_Magic_Instruction",
(obj_hap_func_t) magic_instruction_callback, NULL);
Otherwise,
the BEGIN_TRANSACTION and END_TRANSACTION instructions are considered as nops,
and ignored by the simulator. In this case, the simulation works, but transaction
properties (atomicity, isolation, etc) are not preserved.
Regards,
Enrique Vallejo Gutiérrez
University of Cantabria
http://www.atc.unican.es/~enrique/
Hi all,
This is my first attempt at gathering some transactional results with LogTM
protocols, and I seem to be unable to get ruby to notice the
transactions. I am using Gems 1.4, Simics 3.0.21, and the simulated
environment is an 8 processor Solaris 9/Sparc.
I have written a few benchmarks, and most of the normal result are as expected
(e.g. instruction counts, etc), but all of the transactional specific results
are always 0:
transactions_started: 0 [ 0 0 0 0 0 0 0 0 ]
transactions_ended: 0 [ 0 0 0 0 0 0 0 0 ]
instructions_per_transaction: 0 [ 0 0 0 0 0 0 0 0 ]
cycles_per_transaction: 0 [ 0 0 0 0 0 0 0 0 ]
misses_per_transaction: 0 [ 0 0 0 0 0 0 0 0 ]
To help debug, I've written an extremely simple benchmark (I've also written
several pthread benchmarks that actually perform computations and have experienced
similiar results):
#include <stdlib.h>
#include <stdio.h>
#include "magic-instruction.h"
#include "logtm.h"
int main(int argc, char*argv[])
{
MAGIC_BREAKPOINT;
BEGIN_TRANSACTION(0);
printf("Transaction\n");
COMMIT_TRANSACTION(0);
MAGIC_BREAKPOINT;
printf("Transaction
Complete\n");
return 0;
}
Where "logtm.h" contains:
#define NEW_RUBY_MAGIC_CALL( service
)
\
__asm__
__volatile__
\
( "sethi %1, %%g0 !magic
service\n\t"
\
: /* no outputs
*/
\
: "r" (0), "i"
((service)<<16)
\
: "l0" /*
clobber register
*/
\
);
#define BEGIN_TRANSACTION(id) NEW_RUBY_MAGIC_CALL((id + 20))
#define COMMIT_TRANSACTION(id) NEW_RUBY_MAGIC_CALL((id + 40))
I believe I have all of the correct configuration settings for using LogTM, and
I do not receive any errors and the simulation seems to execute and terminate
properly, its just the transactional results are always 0.
Is there something that I am missing? Anyone have any suggestions?
Thank you in advance,
James