From: Masoume Jabbarifar <[email protected]>

---
 lttv/lttv/sync/data_structures.h           |    2 +-
 lttv/lttv/sync/factor_reduction_accuracy.c |   15 ++++++++++++---
 lttv/lttv/sync/sync_chain_lttv.c           |   18 ++++++++++++------
 lttv/lttv/sync/sync_chain_unittest.c       |    9 ++++++---
 4 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/lttv/lttv/sync/data_structures.h b/lttv/lttv/sync/data_structures.h
index 627286c..2206455 100644
--- a/lttv/lttv/sync/data_structures.h
+++ b/lttv/lttv/sync/data_structures.h
@@ -131,7 +131,7 @@ typedef struct
  * synchronization */
 typedef struct
 {
-       double drift, offset;
+       double drift, offset, accuracyToRefNode;
 } Factors;
 
 // Correction factors between trace pairs, to be used for reduction
diff --git a/lttv/lttv/sync/factor_reduction_accuracy.c 
b/lttv/lttv/sync/factor_reduction_accuracy.c
index a63dae7..bf0546b 100644
--- a/lttv/lttv/sync/factor_reduction_accuracy.c
+++ b/lttv/lttv/sync/factor_reduction_accuracy.c
@@ -415,12 +415,19 @@ static void getFactors(AllFactors* const allFactors, 
unsigned int** const
        unsigned int reference;
        PairFactors** const pairFactors= allFactors->pairFactors;
 
-       reference= references[traceNum];
-
+       if (traceNum == references[traceNum])
+       {
+               reference=traceNum;
+       }
+       else
+       {
+               reference = predecessors[references[traceNum]][traceNum];
+       }
        if (reference == traceNum)
        {
                factors->offset= 0.;
                factors->drift= 1.;
+               factors->accuracyToRefNode= 0.;
        }
        else
        {
@@ -428,6 +435,8 @@ static void getFactors(AllFactors* const allFactors, 
unsigned int** const
 
                getFactors(allFactors, predecessors, references,
                        predecessors[reference][traceNum], 
&previousVertexFactors);
+               factors->accuracyToRefNode = 
+                       pairFactors[reference][traceNum].accuracy+ 
pairFactors[traceNum][reference].accuracy + 
previousVertexFactors.accuracyToRefNode;
 
                /* Convert the time from traceNum to reference;
                 * pairFactors[row][col] converts the time from col to row, 
invert the
@@ -452,7 +461,7 @@ static void getFactors(AllFactors* const allFactors, 
unsigned int** const
                }
                else
                {
-                       g_assert_not_reached();
+                       //g_assert_not_reached();
                }
        }
 }
diff --git a/lttv/lttv/sync/sync_chain_lttv.c b/lttv/lttv/sync/sync_chain_lttv.c
index 95bef44..20ed111 100644
--- a/lttv/lttv/sync/sync_chain_lttv.c
+++ b/lttv/lttv/sync/sync_chain_lttv.c
@@ -218,6 +218,7 @@ bool syncTraceset(LttvTracesetContext* const 
traceSetContext)
        double minOffset, minDrift;
        unsigned int refFreqTrace;
        int retval;
+       double sumAccuracy;
 
        if (!optionSync.present)
        {
@@ -370,8 +371,6 @@ bool syncTraceset(LttvTracesetContext* const 
traceSetContext)
                                        t->drift * t->start_tsc + t->offset));
        }
 
-       g_array_free(factors, TRUE);
-
        lttv_traceset_context_compute_time_span(traceSetContext,
                &traceSetContext->time_span);
 
@@ -395,21 +394,28 @@ bool syncTraceset(LttvTracesetContext* const 
traceSetContext)
        if (!optionSyncNull.present && optionSyncStats.present)
        {
                printStats(syncState);
-
+               sumAccuracy = 0;
                printf("Resulting synchronization factors:\n");
                for (i= 0; i < syncState->traceNb; i++)
                {
                        LttTrace* t;
+                       Factors* traceFactors;
 
                        t= traceSetContext->traces[i]->t;
-
-                       printf("\ttrace %u drift= %g offset= %g (%f) start 
time= %ld.%09ld\n",
+                       traceFactors= &g_array_index(factors, Factors, i);
+                       
+                       printf("\ttrace %u drift= %g offset= %g (%f) start 
time= %ld.%09ld accuracyToRefNode= %g\n",
                                i, t->drift, t->offset, (double) 
tsc_to_uint64(t->freq_scale,
                                        t->start_freq, t->offset) / 
NANOSECONDS_PER_SECOND,
                                t->start_time_from_tsc.tv_sec,
-                               t->start_time_from_tsc.tv_nsec);
+                               
t->start_time_from_tsc.tv_nsec,traceFactors->accuracyToRefNode);
+                       sumAccuracy += traceFactors->accuracyToRefNode;
+
                }
        }
+       printf("Total accuracy (0.0 is the best): %g\n",sumAccuracy);
+
+       g_array_free(factors, TRUE);
 
        syncState->processingModule->destroyProcessing(syncState);
        if (syncState->matchingModule != NULL)
diff --git a/lttv/lttv/sync/sync_chain_unittest.c 
b/lttv/lttv/sync/sync_chain_unittest.c
index 40302a0..d59eb09 100644
--- a/lttv/lttv/sync/sync_chain_unittest.c
+++ b/lttv/lttv/sync/sync_chain_unittest.c
@@ -114,6 +114,7 @@ int main(const int argc, char* const argv[])
        GString* analysisModulesNames;
        GString* reductionModulesNames;
        unsigned int id;
+       double sumAccuracy;
        AllFactors* allFactors;
 
        /*
@@ -266,15 +267,17 @@ int main(const int argc, char* const argv[])
                unsigned int i;
 
                printStats(syncState);
-
+               sumAccuracy = 0;
                printf("Resulting synchronization factors:\n");
                for (i= 0; i < factors->len; i++)
                {
                        Factors* traceFactors= &g_array_index(factors, Factors, 
i);
-                       printf("\ttrace %u drift= %g offset= %g\n", i,
-                               traceFactors->drift, traceFactors->offset);
+                       printf("\ttrace %u drift= %g offset= %g 
accuracyToRefNode= %g\n", i,
+                               traceFactors->drift, traceFactors->offset, 
traceFactors->accuracyToRefNode);
+                       sumAccuracy += traceFactors->accuracyToRefNode;
                }
        }
+       printf("Total accuracy (0.0 is the best): %g\n",sumAccuracy);
 
        // Destroy modules and clean up
        syncState->processingModule->destroyProcessing(syncState);
-- 
1.6.0.4


_______________________________________________
ltt-dev mailing list
[email protected]
http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev

Reply via email to