4 from threading import Thread
8 # 1) Deploy on all the servers
9 # 2) Based on the benchmark selection, run each learning set on a server
10 # 3) After being done with that, it sshould calculate the first best 3
11 # 4) Run them indivisually
12 # 5) Generate the excel sheet!
13 SRCDIR="/scratch/hamed/constraint_compiler/src"
14 LOCALSRCDIR="/scratch/satcheck/satproject/constraint_compiler/src"
17 self.parser = argparse.ArgumentParser(description='Parsing the output log of the CSolver auto tuner ...')
18 self.parser.add_argument('--bench', '-b', metavar='sudoku', type=str, nargs=1,help='Benchmark that you want to learn on')
19 self.args = self.parser.parse_args()
21 def getBenchmarkName(self):
22 return self.args.bench[0]
25 os.system("cd ../; ./deploy-cs.sh")
27 def getServerNeeded(benchmark):
29 with open("./Benchmarks/" + benchmark + "/learn.sh") as f:
31 while "declare -a LearningSet=" not in line:
33 while ")" not in line:
34 variable = variable + line
36 variable = variable + line
37 return variable.count("\"")/2
39 def getAvailableServerList(needed):
43 print ("Checking availability for server " + str(i))
44 HOST="dc-"+ str(i) + ".calit2.uci.edu"
45 COMMAND="cd "+SRCDIR+"; python ./Scripts/serverstatus.py"
46 ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
48 stdout=subprocess.PIPE,
49 stderr=subprocess.PIPE)
50 result = ssh.stdout.readlines()
52 error = ssh.stderr.readlines()
53 print >>sys.stderr, "ERROR: %s" % error
55 print ("Result of running serverStatus: ")
57 if "AVAILABLE\n" in result:
59 if len(available) >= needed:
63 def startLearningProcess(benchmark, server, learningSet):
65 HOST="dc-"+ str(server) + ".calit2.uci.edu"
67 LOGFILE= benchmark + "-" + str(learningSet) + ".log"
68 print("Running benchmark " + benchmark + "(Set="+ str(learningSet)+") on server")
69 COMMAND=("cd "+SRCDIR+"; ./Scripts/learnresultgen.sh " +
70 benchmark + " " + str(learningSet) + " " + ALGORITHM + " &> " + LOGFILE + "; mv *.csv ~/; echo 'SUCCESS'")
71 print("Calling the following command:\n" + COMMAND)
72 ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
74 stdout=subprocess.PIPE,
75 stderr=subprocess.PIPE)
76 result = ssh.stdout.readlines()
78 error = ssh.stderr.readlines()
79 print >>sys.stderr, "ERROR: %s" % error
81 print ("Result of running serverStatus: ")
86 os.system("mv ~/*.csv "+ LOCALSRCDIR)
90 benchmark = ArgParser().getBenchmarkName()
91 # print("Deploying on all the servers ...")
93 serverNumber = getServerNeeded(benchmark)
94 print("Learning on " + benchmark + " needs " + str(serverNumber) + " servers.")
95 availableServers = getAvailableServerList(serverNumber)
96 print ("Available Server:" + str(availableServers))
97 if serverNumber > len(availableServers):
98 print("Servers are busy. We don't have enough server available for learning ...")
102 for i in range(serverNumber):
103 t = Thread(target=startLearningProcess, args=(benchmark, availableServers[i], i, ))
111 print("Exception in creating learning thread ...")
116 if __name__ == "__main__":