simulation of both the old trace format (PIN and Qemu) and the new VISA trace format now supported
This commit is contained in:
parent
fca8399d0f
commit
4af6b73406
|
@ -4,6 +4,7 @@ public class EmulatorConfig {
|
||||||
|
|
||||||
public static CommunicationType communicationType;
|
public static CommunicationType communicationType;
|
||||||
public static EmulatorType emulatorType;
|
public static EmulatorType emulatorType;
|
||||||
|
public static boolean isVISATrace;
|
||||||
|
|
||||||
public static int maxThreadsForTraceCollection = 1024;
|
public static int maxThreadsForTraceCollection = 1024;
|
||||||
public static boolean storeExecutionTraceInAFile;
|
public static boolean storeExecutionTraceInAFile;
|
||||||
|
|
|
@ -31,8 +31,13 @@ public class SystemConfig
|
||||||
Bus, Noc
|
Bus, Noc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int NUM_BENCHMARKS;
|
||||||
|
|
||||||
public static int NoOfCores;
|
public static int NoOfCores;
|
||||||
|
|
||||||
|
public static String benchmarknames[]; // Number of benchmarks
|
||||||
|
public static String numCountThreads[];
|
||||||
|
|
||||||
public static int maxNumJavaThreads;
|
public static int maxNumJavaThreads;
|
||||||
public static int numEmuThreadsPerJavaThread;
|
public static int numEmuThreadsPerJavaThread;
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ public class XMLParser
|
||||||
createSharedCacheConfigs();
|
createSharedCacheConfigs();
|
||||||
setSimulationParameters();
|
setSimulationParameters();
|
||||||
setEmulatorParameters();
|
setEmulatorParameters();
|
||||||
|
setBenchmarks();
|
||||||
setSystemParameters();
|
setSystemParameters();
|
||||||
|
|
||||||
FrequencyConfig.setupStepSizes();
|
FrequencyConfig.setupStepSizes();
|
||||||
|
@ -205,6 +205,7 @@ public class XMLParser
|
||||||
|
|
||||||
EmulatorConfig.emulatorType = getEmulatorType(getImmediateString("EmulatorType", emulatorElmnt));
|
EmulatorConfig.emulatorType = getEmulatorType(getImmediateString("EmulatorType", emulatorElmnt));
|
||||||
EmulatorConfig.communicationType = getCommunicationType(getImmediateString("CommunicationType", emulatorElmnt));
|
EmulatorConfig.communicationType = getCommunicationType(getImmediateString("CommunicationType", emulatorElmnt));
|
||||||
|
EmulatorConfig.isVISATrace = Boolean.parseBoolean(getImmediateString("isVISATrace", emulatorElmnt));
|
||||||
|
|
||||||
EmulatorConfig.PinTool = getImmediateString("PinTool", emulatorElmnt);
|
EmulatorConfig.PinTool = getImmediateString("PinTool", emulatorElmnt);
|
||||||
EmulatorConfig.PinInstrumentor = getImmediateString("PinInstrumentor", emulatorElmnt);
|
EmulatorConfig.PinInstrumentor = getImmediateString("PinInstrumentor", emulatorElmnt);
|
||||||
|
@ -1124,6 +1125,25 @@ public class XMLParser
|
||||||
return ((Node) resultNode.item(0)).getNodeValue();
|
return ((Node) resultNode.item(0)).getNodeValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static void setBenchmarks() // Get the immediate string value of a particular tag name under a particular parent tag
|
||||||
|
{
|
||||||
|
NodeList nodeLst = doc.getElementsByTagName("Benchmark");
|
||||||
|
SystemConfig.NUM_BENCHMARKS=nodeLst.getLength();
|
||||||
|
SystemConfig.benchmarknames=new String[SystemConfig.NUM_BENCHMARKS];
|
||||||
|
SystemConfig.numCountThreads=new String[SystemConfig.NUM_BENCHMARKS];
|
||||||
|
|
||||||
|
for(int i=0; i< nodeLst.getLength();i++){
|
||||||
|
Node node = nodeLst.item(i);
|
||||||
|
System.out.println("");
|
||||||
|
if (node.getNodeType() == Node.ELEMENT_NODE)
|
||||||
|
{ Element eElement = (Element) node;
|
||||||
|
SystemConfig.benchmarknames[i]=eElement.getElementsByTagName("BenchmarkPath").item(0).getTextContent();
|
||||||
|
SystemConfig.numCountThreads[i]=eElement.getElementsByTagName("Threads").item(0).getTextContent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static PortType setPortType(String inputStr)
|
private static PortType setPortType(String inputStr)
|
||||||
{
|
{
|
||||||
PortType result = null;
|
PortType result = null;
|
||||||
|
|
|
@ -31,12 +31,13 @@ TDP = 15W
|
||||||
<!--Currently we support following (emulator,communication) combinations : -->
|
<!--Currently we support following (emulator,communication) combinations : -->
|
||||||
<!--(pin, sharedMemory), (qemu, sharedMemory), (qemu, network), (none, file)-->
|
<!--(pin, sharedMemory), (qemu, sharedMemory), (qemu, network), (none, file)-->
|
||||||
<!--(pin,file) combination can be used to collect execution trace of an application in a compressed file-->
|
<!--(pin,file) combination can be used to collect execution trace of an application in a compressed file-->
|
||||||
<EmulatorType>pin</EmulatorType> <!--pin,qemu-->
|
<EmulatorType>none</EmulatorType> <!--pin,qemu-->
|
||||||
|
|
||||||
<!--NOTE only file interface supports the execution of multiple benchmarks inside tejas-->
|
<!--NOTE only file interface supports the execution of multiple benchmarks inside tejas-->
|
||||||
<!--if you are reading the packets from a file, the emulator must be set to none-->
|
<!--if you are reading the packets from a file, the emulator must be set to none-->
|
||||||
<!--multiple benchmarks are specified using arguments to the simulator-->
|
<!--multiple benchmarks are specified using arguments to the simulator-->
|
||||||
<CommunicationType>sharedMemory</CommunicationType> <!--file,sharedMemory,network-->
|
<CommunicationType>file</CommunicationType> <!--file,sharedMemory,network-->
|
||||||
|
<isVISATrace>false</isVISATrace> <!-- If communication type is file, is it a VISA trace? -->
|
||||||
|
|
||||||
<!--We can use tejas as an interface to create a compressed (gzip) trace file using the emulator-->
|
<!--We can use tejas as an interface to create a compressed (gzip) trace file using the emulator-->
|
||||||
<!--Set this option to true if you want to create a trace file of the benchmark execution-->
|
<!--Set this option to true if you want to create a trace file of the benchmark execution-->
|
||||||
|
@ -85,6 +86,13 @@ TDP = 15W
|
||||||
<NumCores>2</NumCores>
|
<NumCores>2</NumCores>
|
||||||
</Simulation>
|
</Simulation>
|
||||||
|
|
||||||
|
<Applications> <!-- Applications (traces) to run -->
|
||||||
|
<Benchmark>
|
||||||
|
<BenchmarkPath>/store/Documents/B_Tech/Semester_7/ACA/Tejas-Dh/traces/qemuTrace/7zip</BenchmarkPath> <!-- Path to the benchmark traces -->
|
||||||
|
<Threads>2</Threads> <!-- Number of threads for the trace -->
|
||||||
|
</Benchmark>
|
||||||
|
</Applications>
|
||||||
|
|
||||||
<!--System Parameters-->
|
<!--System Parameters-->
|
||||||
<System>
|
<System>
|
||||||
<MainMemory>
|
<MainMemory>
|
||||||
|
@ -477,7 +485,7 @@ TDP = 15W
|
||||||
<Interconnect>NOC</Interconnect>
|
<Interconnect>NOC</Interconnect>
|
||||||
|
|
||||||
<NOC>
|
<NOC>
|
||||||
<NocConfigFile>/nfs_home/rajshekar/resources/tejas_configs/config_2core_kabylake_NocConfig.txt</NocConfigFile>
|
<NocConfigFile>/store/Documents/B_Tech/Semester_7/ACA/Assignments/Assignment_4/NocConfig.txt</NocConfigFile>
|
||||||
<NocSelScheme>STATIC</NocSelScheme>
|
<NocSelScheme>STATIC</NocSelScheme>
|
||||||
<NocNumberOfBuffers>4</NocNumberOfBuffers>
|
<NocNumberOfBuffers>4</NocNumberOfBuffers>
|
||||||
<NocPortType>FCFS</NocPortType>
|
<NocPortType>FCFS</NocPortType>
|
||||||
|
|
|
@ -116,7 +116,7 @@ public class RunnableThread implements Encoding, Runnable {
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
||||||
if (EmulatorConfig.emulatorType == EmulatorType.none
|
if (EmulatorConfig.emulatorType == EmulatorType.none
|
||||||
&& EmulatorConfig.communicationType == CommunicationType.file) {
|
&& EmulatorConfig.communicationType == CommunicationType.file && EmulatorConfig.isVISATrace) {
|
||||||
//trace-file based simulation
|
//trace-file based simulation
|
||||||
|
|
||||||
// for(int core = 0; core < maxCoreAssign; core++)
|
// for(int core = 0; core < maxCoreAssign; core++)
|
||||||
|
|
|
@ -34,9 +34,9 @@ public class FilePacket extends IpcBase implements Encoding {
|
||||||
ArrayList<Integer> pinpointWeights;
|
ArrayList<Integer> pinpointWeights;
|
||||||
int cur_slice = 0;
|
int cur_slice = 0;
|
||||||
String []basenameForBenchmarks;
|
String []basenameForBenchmarks;
|
||||||
|
int count[]=new int[SystemConfig.NUM_BENCHMARKS];
|
||||||
|
|
||||||
public FilePacket(String []basenameForBenchmarks) {
|
public FilePacket(String []basenameForBenchmarks) {
|
||||||
/*
|
|
||||||
this.maxApplicationThreads = SystemConfig.maxNumJavaThreads*SystemConfig.numEmuThreadsPerJavaThread;
|
this.maxApplicationThreads = SystemConfig.maxNumJavaThreads*SystemConfig.numEmuThreadsPerJavaThread;
|
||||||
this.basenameForBenchmarks = basenameForBenchmarks;
|
this.basenameForBenchmarks = basenameForBenchmarks;
|
||||||
|
|
||||||
|
@ -61,9 +61,13 @@ public class FilePacket extends IpcBase implements Encoding {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(int i=0;i< SystemConfig.NUM_BENCHMARKS;i++){
|
||||||
|
count[i]=Integer.parseInt(SystemConfig.numCountThreads[i]);
|
||||||
|
}
|
||||||
|
|
||||||
int numTotalThreads = 0;
|
int numTotalThreads = 0;
|
||||||
for (int benchmark=0; benchmark<basenameForBenchmarks.length; benchmark++) {
|
for (int benchmark=0; benchmark<basenameForBenchmarks.length; benchmark++) {
|
||||||
for (int tid=0; ;tid++) {
|
for (int tid=0;tid<count[benchmark];tid++) {
|
||||||
String inputFileName;
|
String inputFileName;
|
||||||
if(SimulationConfig.pinpointsSimulation == false)
|
if(SimulationConfig.pinpointsSimulation == false)
|
||||||
{
|
{
|
||||||
|
@ -96,7 +100,6 @@ public class FilePacket extends IpcBase implements Encoding {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initIpc() {
|
public void initIpc() {
|
||||||
|
@ -104,7 +107,7 @@ public class FilePacket extends IpcBase implements Encoding {
|
||||||
}
|
}
|
||||||
|
|
||||||
public int fetchManyPackets(int tidApp, CircularPacketQueue fromEmulator) {
|
public int fetchManyPackets(int tidApp, CircularPacketQueue fromEmulator) {
|
||||||
/*
|
|
||||||
if(tidApp>=maxApplicationThreads) {
|
if(tidApp>=maxApplicationThreads) {
|
||||||
misc.Error.showErrorAndExit("FilePacket cannot handle tid = " + tidApp);
|
misc.Error.showErrorAndExit("FilePacket cannot handle tid = " + tidApp);
|
||||||
}
|
}
|
||||||
|
@ -206,8 +209,6 @@ public class FilePacket extends IpcBase implements Encoding {
|
||||||
}
|
}
|
||||||
|
|
||||||
return maxSize;
|
return maxSize;
|
||||||
*/
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void errorCheck(int tidApp, long totalReads) {
|
public void errorCheck(int tidApp, long totalReads) {
|
||||||
|
|
|
@ -857,7 +857,7 @@ public class InstructionClassTable {
|
||||||
|
|
||||||
//unhandled x86 instruction type
|
//unhandled x86 instruction type
|
||||||
if(instructionClass == null && operation.compareTo("ud2") != 0)
|
if(instructionClass == null && operation.compareTo("ud2") != 0)
|
||||||
System.out.println(operation);
|
System.out.println("[x86 Translator] Unhandled instruction type encountered: " +operation);
|
||||||
|
|
||||||
if (instructionClass == null)
|
if (instructionClass == null)
|
||||||
return InstructionClass.INVALID;
|
return InstructionClass.INVALID;
|
||||||
|
|
|
@ -529,8 +529,15 @@ public class ObjParser
|
||||||
assemblyTokens[0] = str;
|
assemblyTokens[0] = str;
|
||||||
currentPointer = indexOf(asmBytes, ' ', previousPointer, 64);
|
currentPointer = indexOf(asmBytes, ' ', previousPointer, 64);
|
||||||
|
|
||||||
assemblyTokens[1] = new String(asmBytes, previousPointer, (currentPointer-previousPointer));
|
if(currentPointer==-1) {
|
||||||
currentPointer++; previousPointer = currentPointer;
|
assemblyTokens[1] = new String(asmBytes, previousPointer, len(asmBytes)-previousPointer); // only operation field is present
|
||||||
|
assemblyTokens[2] = assemblyTokens[3] = assemblyTokens[4] = null;
|
||||||
|
return assemblyTokens;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assemblyTokens[1] = new String(asmBytes, previousPointer, (currentPointer-previousPointer));
|
||||||
|
currentPointer++; previousPointer = currentPointer;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
assemblyTokens[0] = null;
|
assemblyTokens[0] = null;
|
||||||
assemblyTokens[1] = str;
|
assemblyTokens[1] = str;
|
||||||
|
|
|
@ -92,7 +92,20 @@ public class Main {
|
||||||
} /*else if(EmulatorConfig.emulatorType==EmulatorType.none) {
|
} /*else if(EmulatorConfig.emulatorType==EmulatorType.none) {
|
||||||
ObjParser.initializeThreadMicroOpsList(SystemConfig.numEmuThreadsPerJavaThread);
|
ObjParser.initializeThreadMicroOpsList(SystemConfig.numEmuThreadsPerJavaThread);
|
||||||
}*/
|
}*/
|
||||||
|
else{
|
||||||
|
executableAndArguments = new String[SystemConfig.NUM_BENCHMARKS];
|
||||||
|
|
||||||
|
for(int i=0;i<SystemConfig.NUM_BENCHMARKS;i++){
|
||||||
|
executableAndArguments[i]=SystemConfig.benchmarknames[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=2; i < arguments.length; i++) {
|
||||||
|
executableAndArguments[i-2] = arguments[i];
|
||||||
|
benchmarkArguments = benchmarkArguments + " " + arguments[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjParser.initializeThreadMicroOpsList(SystemConfig.numEmuThreadsPerJavaThread);
|
||||||
ObjParser.initializeDynamicInstructionBuffer(SystemConfig.numEmuThreadsPerJavaThread*SystemConfig.numEmuThreadsPerJavaThread);
|
ObjParser.initializeDynamicInstructionBuffer(SystemConfig.numEmuThreadsPerJavaThread*SystemConfig.numEmuThreadsPerJavaThread);
|
||||||
ObjParser.initializeControlMicroOps();
|
ObjParser.initializeControlMicroOps();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue