package jvstm.test.jwormbench;
import java.util.logging.Logger;
import junit.framework.Assert;
import jvstm.ActiveTransactionsRecord;
import jvstm.Transaction;
import jvstm.VBox;
import jwormbench.core.IWorld;
import jwormbench.core.WormBench;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.util.Modules;
public class RunJWormBench {
private static final String NEW_LINE = System.getProperty("line.separator");
private static final String EXEC_PATH = "";
private static final String OPERATIONS_FILENAME_PATTERN = EXEC_PATH + "examples/tests/config/%d_ops_%d%%writes.txt";
private static final String WORLD_FILENAME_PATTERN = EXEC_PATH + "examples/tests/config/%d.txt";
private static final String WORMS_FILENAME_PATTERN = EXEC_PATH + "examples/tests/config/W-B[1.1]-H[%s]-%d.txt";
private static final int worldSize = 512;
private static final String headSize = "2.16";
private static final int nrOperations = 1920;
public static void performTest(int nrOfIterations, int nrOfThreads, int wRate) throws InterruptedException{
final String configWorms = String.format(WORMS_FILENAME_PATTERN, headSize, worldSize);
final String configWorld= String.format(WORLD_FILENAME_PATTERN, worldSize);
final String configOperations = String.format(OPERATIONS_FILENAME_PATTERN, nrOperations, wRate);
Module configModule = new BenchWithoutSync(
nrOfIterations,
nrOfThreads,
60, // timeOut
configWorms,
configWorld,
configOperations
);
//
// Get instances
//
configModule = Modules.override(configModule).with(new JvstmSyncModule());
Injector injector = Guice.createInjector(configModule );
WormBench benchRollout = injector.getInstance(WormBench.class);
IWorld world = injector.getInstance(IWorld.class);
Logger logger = injector.getInstance(Logger.class);
//
// Run benchmark
//
logger.info("-----------------------------------------------------" + NEW_LINE);
String syncStat = "JVSTM-lock-free; wrate = " + wRate;
benchRollout.RunBenchmark(syncStat);
//
// Print results
//
benchRollout.LogExecutionTime();
printNrOfObjectsExtendedAnStandard(logger, benchRollout);
int finalWorldSum = world.getSumOfAllNodes() - benchRollout.getAccumulatedDiffOnWorld();
Assert.assertEquals(benchRollout.initWorldSum, finalWorldSum);
}
private static void printNrOfObjectsExtendedAnStandard(Logger logger, WormBench benchRollout ){
IWorld world = benchRollout.world;
int nrObjectsNormal = 0, nrObjectsExtended = 0;
for (int i = 0; i < world.getRowsNum(); i++) {
for (int j = 0; j < world.getColumnsNum(); j++) {
VBox node = (VBox) world.getNode(i, j);
if(node.body != null)
nrObjectsExtended++;
else
nrObjectsNormal++;
}
}
logger.info("Nr objects extended: " + nrObjectsExtended + NEW_LINE);
logger.info("Nr objects normal: " + nrObjectsNormal+ NEW_LINE);
// logger.info("Nr of reversions: " + LayoutReverser.nrOfReversions+ NEW_LINE);
logger.info("Nr of reversions: " + ActiveTransactionsRecord.nrOfReversions + NEW_LINE);
logger.info("Number of tries = " + ActiveTransactionsRecord.nrOfTries + NEW_LINE);
// logger.info("Number of Cleans = " + ActiveTransactionsRecord.nrOfCleans + NEW_LINE);
//logger.info("Nr of aborted trxs: " + Transaction.nrOfAborts+ NEW_LINE);
//Transaction.nrOfAborts = 0;
logger.info(NEW_LINE);
}
}