diff --git a/llvm/projects/hpvm-tensor-rt/bin/get_power_stats.py b/llvm/projects/hpvm-tensor-rt/bin/get_power_stats.py new file mode 100644 index 0000000000000000000000000000000000000000..e81cf10ece72c43457de718365bd2017e1684ab2 --- /dev/null +++ b/llvm/projects/hpvm-tensor-rt/bin/get_power_stats.py @@ -0,0 +1,79 @@ + +import sys +import numpy as np +import subprocess + + +def get_avg_power(f_name): + + f = open(f_name, "r") + + gpu_power = [] + ddr_power = [] + sys_power = [] + + for x in f: + toks = x.split() + + gpu_power.append(float(toks[1])) + ddr_power.append(float(toks[2])) + sys_power.append(float(toks[3])) + + + avg_gpu_power = np.mean(gpu_power) + avg_ddr_power = np.mean(ddr_power) + avg_sys_power = np.mean(sys_power) + + print ("** avg_gpu_power = ", avg_gpu_power, " avg_ddr_power = ", \ + avg_ddr_power, " avg_sys_power = ", avg_sys_power) + + return (avg_gpu_power, avg_ddr_power, avg_sys_power) + + +#avail_frequencies = [140250000, 229500000, 318750000, 408000000, 497250000, +# 586500000, 675750000, 765000000, 854250000, +# 943500000, 1032750000, 1122000000, 1211250000, 1300500000]; + + +avail_frequencies = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; + + +if __name__ == "__main__": + + + programs = ["alexnet_promise", "alexnet2_promise", "vgg16_cifar10_promise", "resnet18_promise", "resnet50_imagenet_promise", "mobilenet_promise", "vgg16_imagenet_promise"] + + for binary_path in programs: + + power_avgs = [] + power_freq_file = "power_data/" + binary_path + "/power_vals.txt" + fout = open(power_freq_file, "w+") + + for frequency in avail_frequencies: + + print (frequency) + poll_path = "./poll" + iterations = 10 + + poll_cmd = poll_path + " " + str(frequency) # sudo needed for frequency change + subprocess.call(poll_cmd, shell=True) + + + binary_path = "./" + binary_path + power_file = " power_data/" + binary_path + "/power.out." + str(frequency) + profile_cmd = "../../system_profiler/build/offline_profiler " + binary_path + " " + \ + str(iterations) + " tensor.out." + str(frequency) + power_file + + subprocess.call(profile_cmd, shell=True) + + + #avg_power = get_avg_power("power.out." + str(frequency)) + avg_power = get_avg_power(power_file) + power_avgs.append(avg_power) + + fout.write(str(avg_power[0]) + " " + str(avg_power[1]) + " " + str(avg_power[2]) + "\n") + print (avg_power) + + + print (power_avgs) + fout.close()