Re: [Gems-users] Running Transactional Workloads with LogTM


Date: Tue, 20 Mar 2007 10:52:05 -0600
From: Kevin Moore <kmoore@xxxxxxxxxxx>
Subject: Re: [Gems-users] Running Transactional Workloads with LogTM
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.



[← Prev in Thread] Current Thread [Next in Thread→]