From mboxrd@z Thu Jan 1 00:00:00 1970 From: masoume.jabbarifar@polymtl.ca (masoume.jabbarifar@polymtl.ca) Date: Mon, 13 Sep 2010 14:56:43 -0400 Subject: [ltt-dev] [PATCH] Fixing bugs in cluster synchronisation for accuracy algorithm Message-ID: <1284404203-21851-1-git-send-email-masoume.jabbarifar@polymtl.ca> From: Masoume Jabbarifar --- 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