Files
MP-SPDZ/Scripts/memory-usage.py
2023-02-16 12:35:18 +11:00

42 lines
1.2 KiB
Python
Executable File

#!/usr/bin/env python3
import sys, os
import collections
sys.path.append('.')
from Compiler.program import *
from Compiler.instructions_base import *
if len(sys.argv) <= 1:
print('Usage: %s <program>' % sys.argv[0])
res = collections.defaultdict(lambda: 0)
regs = collections.defaultdict(lambda: 0)
thread_regs = collections.defaultdict(lambda: 0)
def process(tapename, res, regs):
for inst in Tape.read_instructions(tapename):
t = inst.type
if issubclass(t, DirectMemoryInstruction):
res[t.arg_format[0]] = max(inst.args[1].i + inst.size,
res[t.arg_format[0]])
for arg in inst.args:
if isinstance(arg, RegisterArgFormat):
regs[type(arg)] = max(regs[type(arg)], arg.i + inst.size)
tapes = Program.read_tapes(sys.argv[1])
process(next(tapes), res, regs)
for tapename in tapes:
process(tapename, res, thread_regs)
reverse_formats = dict((v, k) for k, v in ArgFormats.items())
regout = lambda regs: dict((reverse_formats[t], n) for t, n in regs.items())
print ('Memory:', dict(res))
print ('Registers in main thread:', regout(regs))
print ('Registers in other threads:', regout(thread_regs))