Newer
Older
sys.exit(1)
n = float(sys.argv[1])
if len(sys.argv) == 3:
threads = int(sys.argv[2])
def help():
print("Single core burner computing fib(n) recursively.")
print(" Usage: {} <hours> [number of threads]".format(sys.argv[0]))
def sysinfo():
proc = '/proc/{}/status'.format(os.getpid())
cpuset = ''
with open(proc, 'r') as f:
for line in f.readlines():
if 'Cpus_allowed_list' in line:
cpuset = line.split(':',1)[1].strip()
print('Sysinfo:')
print(' Hostname: {}'.format(gethostname()))
print(' CPUSet: [{}]'.format(cpuset))
"""
Solve:
time(fib(36)) = 10s
time(fib(n)) = c * 1.618**n
10 = c ** 1.618**n
log10(10)/log10(1.618) = log10(c)/log10(1.618) + n
log10(10) - n*log10(1.618) = log10(c)
10**(1 - n*log10(1.618)) = c
"""
# c is the characteristic speed of this cpu
# and I measured time(fib(36)) = 10s
c = 10**(1 - 36*log10(1.618))
n = log10(hours*3600/c)/log10(1.618)
n = int(floor(n))
print("Burning {} hours by stupidly calculating fib({}), using {} thread(s)".format(hours, n, threads))
with ProcessPoolExecutor(max_workers=threads) as pool:
futures = {pool.submit(fib, n) for i in range(threads)}
for index, future in enumerate(as_completed(futures)):
print("(thread {}) fib({}) = "
"{} , congrats.".format(index, n, future.result()))