James,
The statistics you list below actually don't have anything at all to
do with LogTM or transactional memory. The "transactions_started" and
"transactions_ended," etc. record the number of times the workload has
executed a benchmark-specific unit of work. The terminology is
certainly confusing. These units of work were named 'transactions'
because, in many of our commercial workloads (e.g., database workloads)
they are transactions. Unfortunately, the term transaction is now used
in other places.
All LogTM statistics in the stats files start with the string "xact."
The best way to see if you are running LogTM transactions, however, is
to turn on the transactional memory profiling by setting the parameter
"PROFILE_XACT" to true.
--Kevin
On Mar 19, 2007, at 8:52 PM, James Poe wrote:
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
_______________________________________________
Gems-users mailing list
Gems-users@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/gems-users
Use Google to search the GEMS Users mailing list by adding
"site:https://lists.cs.wisc.edu/archive/gems-users/" to your search.
|