[Gems-users] Running Transactional Workloads with LogTM


Date: Mon, 19 Mar 2007 22:52:01 -0400
From: "James Poe" <gemsmaillist@xxxxxxxxx>
Subject: [Gems-users] Running Transactional Workloads with LogTM
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

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