/* * Machine.cpp * */ #include #include "GC/Program.h" #include "ThreadMaster.h" namespace GC { template Machine::Machine() { use_encryption = false; more_comm_less_comp = false; start_timer(); } template Machine::~Machine() { #ifdef VERBOSE for (auto it = timer.begin(); it != timer.end(); it++) cerr << T::phase_name() << " timer " << it->first << " at end: " << it->second.elapsed() << " seconds" << endl; #endif } template void Machine::load_program(string threadname, string filename) { (void)threadname; progs.push_back({}); progs.back().parse_file(filename); reset(progs.back()); } template void Machine::load_schedule(string progname) { BaseMachine::load_schedule(progname); for (auto i : {1, 0, 0}) { int n; inpf >> n; if (n != i) throw runtime_error("old schedule format not supported"); } print_compiler(); } template template void Machine::reset(const U& program) { MS.resize_min(program.direct_mem(SBIT), "memory"); MC.resize_min(program.direct_mem(CBIT), "memory"); MI.resize_min(program.direct_mem(INT), "memory"); } template template void Machine::reset(const U& program, V& MD) { reset(program); MD.resize_min(program.direct_mem(DYN_SBIT), "dynamic memory"); #ifdef DEBUG_MEMORY cerr << "reset dynamic mem to " << program.direct_mem(DYN_SBIT) << endl; #endif } template void Machine::run_tape(int thread_number, int tape_number, int arg) { ThreadMaster::s().run_tape(thread_number, tape_number, arg); } template void Machine::join_tape(int thread_number) { ThreadMaster::s().join_tape(thread_number); } template void GC::Machine::write_memory(int my_num) { ofstream outf(memory_filename("B", my_num)); outf << 0 << endl; outf << MC.size() << endl << MC; outf << 0 << endl << 0 << endl << 0 << endl << 0 << endl; } } /* namespace GC */