#include "event_analysis_chull.h"
#include "event_analysis_linreg.h"
#include "event_analysis_eval.h"
+#include "factor_reduction_accuracy.h"
#include "sync_chain.h"
.hasArg= REQUIRED_ARG,
.optionHelp= "Specify which algorithm to use for event analysis",
};
+static ModuleOption optionSyncReduction= {
+ .shortName= 'r',
+ .longName= "sync-reduction",
+ .hasArg= REQUIRED_ARG,
+ .optionHelp= "Specify which algorithm to use for factor reduction",
+};
/*
struct timeval startTime, endTime;
struct rusage startUsage, endUsage;
GList* result;
+ GArray* factors;
int retval;
bool stats;
const char* testCaseName;
GString* analysisModulesNames;
+ GString* reductionModulesNames;
unsigned int id;
+ AllFactors* allFactors;
/*
* Initialize event modules
registerAnalysisLinReg();
registerAnalysisEval();
+ registerReductionAccuracy();
+
// Initialize data structures
syncState= malloc(sizeof(SyncState));
g_string_truncate(analysisModulesNames, analysisModulesNames->len - 2);
optionSyncAnalysis.argHelp= analysisModulesNames->str;
+ g_assert(g_queue_get_length(&reductionModules) > 0);
+ optionSyncReduction.arg= ((ReductionModule*)
+ g_queue_peek_head(&reductionModules))->name;
+ reductionModulesNames= g_string_new("Available modules: ");
+ g_queue_foreach(&reductionModules, &gfAppendReductionName,
+ reductionModulesNames);
+ // remove the last ", "
+ g_string_truncate(reductionModulesNames, reductionModulesNames->len - 2);
+ optionSyncReduction.argHelp= reductionModulesNames->str;
+
retval= snprintf(graphsDir, sizeof(graphsDir), "graphs-%d", getpid());
if (retval > sizeof(graphsDir) - 1)
{
}
optionSyncGraphs.arg= graphsDir;
+ g_queue_push_head(&moduleOptions, &optionSyncReduction);
g_queue_push_head(&moduleOptions, &optionSyncAnalysis);
g_queue_push_head(&moduleOptions, &optionSyncGraphs);
g_queue_push_head(&moduleOptions, &optionSyncStats);
testCaseName= processOptions(argc, argv);
g_string_free(analysisModulesNames, TRUE);
+ g_string_free(reductionModulesNames, TRUE);
if (optionSyncStats.present)
{
g_error("Analysis module '%s' not found", optionSyncAnalysis.arg);
}
+ syncState->reductionData= NULL;
+ result= g_queue_find_custom(&reductionModules, optionSyncReduction.arg,
+ &gcfCompareReduction);
+ if (result != NULL)
+ {
+ syncState->reductionModule= (ReductionModule*) result->data;
+ }
+ else
+ {
+ g_error("Reduction module '%s' not found", optionSyncReduction.arg);
+ }
+
// Initialize modules
syncState->processingModule->initProcessing(syncState, testCaseName);
syncState->matchingModule->initMatching(syncState);
syncState->analysisModule->initAnalysis(syncState);
+ syncState->reductionModule->initReduction(syncState);
// Process traceset
- syncState->processingModule->finalizeProcessing(syncState);
+ allFactors= syncState->processingModule->finalizeProcessing(syncState);
+ factors= syncState->reductionModule->finalizeReduction(syncState,
+ allFactors);
+ freeAllFactors(allFactors, syncState->traceNb);
// Write graphs file
if (syncState->graphsStream)
}
// Print statistics
- if (syncState->stats)
+ if (optionSyncStats.present)
{
+ unsigned int i;
+
printStats(syncState);
+
+ 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);
+ }
}
// Destroy modules and clean up
syncState->processingModule->destroyProcessing(syncState);
syncState->matchingModule->destroyMatching(syncState);
syncState->analysisModule->destroyAnalysis(syncState);
+ syncState->reductionModule->destroyReduction(syncState);
stats= syncState->stats;
free(syncState);
/*
- * Read program arguments dans update ModuleOptions structures
+ * Read program arguments and update ModuleOptions structures
*
* Args:
* argc, argv: standard argument arrays