Skip to content
Snippets Groups Projects
Commit 2126b380 authored by Jean-Baptiste Keck's avatar Jean-Baptiste Keck
Browse files

memory request report alignement

parent 0f7c6a74
No related branches found
No related tags found
No related merge requests found
......@@ -149,6 +149,15 @@ class MemoryRequest(object):
return dfield, request
def stuple(self):
if not hasattr(self,'id'):
id='None'
else:
id = self.id
size = bytes2str(self.min_bytes(), decimal=False)
ret = (id, size, self.nb_components, self.shape, self.dtype, self.alignment)
return tuple(map(str, ret))
def __str__(self):
if not hasattr(self,'id'):
id='None'
......@@ -353,27 +362,48 @@ class MultipleOperatorMemoryRequests(object):
return buffers
def __str__(self):
s=''
all_requests = {}
for (backend, backend_requests) in self._all_requests_per_backend.iteritems():
kind = backend.kind
if kind == Backend.OPENCL:
precision = ' on device {}'.format(backend.device.name)
else:
precision = ''
s+= ' Backend {}{}:'.format(kind, precision)
total=0
for op in sorted(backend_requests.keys(), key=lambda op: op.name):
op_requests = backend_requests[op]
s+= '\n Operator {} ({})'.format(op.name, op.__class__.__name__)
sop_request = all_requests.setdefault(backend, {}).setdefault(op, [])
local_total=0
opname='{}'.format(op.name)
for req in op_requests:
s+= '\n *{}'.format(req)
sop_request.append((opname,)+req.stuple())
local_total+=req.max_bytes()
if local_total>total:
total=local_total
s +='\n Total work requested: {} ({})'.format(
sizes = {}
template = '\n'
titles=('OPERATOR', 'REQUEST_ID', 'SIZE', 'COMPONENTS', 'SHAPE', 'DTYPE', 'ALIGNMENT')
for (i,k) in enumerate(titles):
k=k.lower()
template += ' '
size = max(len(req[i]) for breqs in all_requests.values() for reqs in breqs.values() for req in reqs)
size = max(size, len(k))
name=k+'_len'
sizes[name] = size
template += '{:'+('<' if i==0 else '^')+'{'+name+'}}'
ss=''
for (backend, backend_srequests) in all_requests.iteritems():
kind = backend.kind
if (kind == Backend.OPENCL):
precision = ' on device {}'.format(backend.device.name.strip())
else:
precision = ''
ss+= '\n {}{}:'.format(backend.full_tag, precision)
ss+= template.format(*titles, **sizes)
for op in sorted(backend_requests.keys(), key=lambda op: op.name):
sop_reqs = backend_srequests[op]
for sreq in sop_reqs:
ss+= template.format(*sreq, **sizes)
ss +='\n Total extra work buffers requested: {} ({})'.format(
bytes2str(total,decimal=False),
bytes2str(total,decimal=True))
s +='\n'
return s[:-1]
ss += '\n'
return ss[1:-1]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment