Exemplo n.º 1
0
int main(int argc, char **argv){
	int whichConfig=0;
	uint64 tempTime=0;
	whichConfig=atoi(argv[1]);
	//Select configuration and read it
	switch(whichConfig){
		case BASE:
			printf("Using Base Config\n");
			Config::readConfigFile("./configs/parametersBase.conf");
			break;
		case L12WAY:
			printf("Using L1 2-Way Config\n");
			Config::readConfigFile("./configs/parametersL12.conf");
			break;
		case L22WAY:
			printf("Using L2 2-Way Config\n");
			Config::readConfigFile("./configs/parametersL22.conf");
			break;
		case ALL2WAY:
			printf("Using All 2-way Config\n");
			Config::readConfigFile("./configs/parametersAll2.conf");
			break;
		case L12WAYL24WAY:
			printf("Using L12WAYL24WAY Config\n");
			Config::readConfigFile("./configs/parametersL12L24.conf");
			break;
		case L2BIG:
			printf("Using L2BIG Config\n");
			Config::readConfigFile("./configs/parametersL2Big.conf");
			break;
		case ALLFA:
			printf("Using ALL FA Config\n");
			Config::readConfigFile("./configs/parametersAllFA.conf");
			break;

		default:
			printf("Invalid Configuration File Number:%d\n",whichConfig);
			break;
	}
	//Create caches based on configuration
	Cache* L1I = Cache::CreateCache(Cache::CL_L1I, L1_cache_size, L1_block_size, L1_assoc);
	Cache* L1D = Cache::CreateCache(Cache::CL_L1D, L1_cache_size, L1_block_size, L1_assoc);
	Cache* L2 = Cache::CreateCache(Cache::CL_L2, L2_cache_size, L2_block_size, L2_assoc);

	//Open trace file & instantiate instruction and result vectors
	Trace::OpenTraceFile(INPUTTRACE);
	Instruction* instr = new Instruction();
	Results* results = new Results();
	
	//Deal with command line arguments
	if (argc < 2) printBool=false;
	else if(argv[2] != NULL){
		if (atoi(argv[2]) == 1) printBool=true;
	}
	printf("Status of printing: %s\n",BoolToString(printBool));
	
	//Start simulation and keep running until end of trace file
	while (Trace::GetInstruction(instr, results) == 0){
		tempTime=results->GetExecTime();
		if (printBool == true) Trace::PrintInstruction(instr);
		Simulator::HandleInstruction(instr, L1I, L1D, L2, results);
		tempTime=results->GetExecTime()-tempTime;
		results->AddCycleCount(instr->GetOpcode(),tempTime);
		if (printBool == true) printf("Simulated Time = %llu\n",results->GetExecTime());
	}
	//Save results vector to output file & exit
	results->PrintResults();
	return 0;
}