From 2126b3804b2978f7e6a171b4d3ab29b21c4261bb Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Keck <jean-baptiste.keck@imag.fr> Date: Sun, 18 Mar 2018 15:45:27 +0100 Subject: [PATCH] memory request report alignement --- hysop/core/memory/memory_request.py | 54 ++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/hysop/core/memory/memory_request.py b/hysop/core/memory/memory_request.py index 067711285..a30fb310c 100644 --- a/hysop/core/memory/memory_request.py +++ b/hysop/core/memory/memory_request.py @@ -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] -- GitLab