Changeset 502 for soft/giet_vm/applications/transpose/transpose.py
- Timestamp:
- Feb 8, 2015, 9:20:45 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
soft/giet_vm/applications/transpose/transpose.py
r457 r502 3 3 from mapping import * 4 4 5 ################################################################################## ####5 ################################################################################## 6 6 # file : transpose.py (for the transpose application) 7 7 # date : may 2014 8 8 # author : Alain Greiner 9 ################################################################################## #####9 ################################################################################## 10 10 # This file describes the mapping of the multi-threaded "transpose" 11 11 # application on a multi-clusters, multi-processors architecture. 12 12 # This include both the mapping of virtual segments on the clusters, 13 13 # and the mapping of tasks on processors. 14 # There is one task per processor. 15 # The mapping of virtual segments is the following: 16 # - There is one shared data vseg in cluster[0][0] 17 # - The code vsegs are replicated on all clusters containing processors. 18 # - There is one heap vseg per cluster containing processors. 19 # - The stacks vsegs are distibuted on all clusters containing processors. 14 20 # This mapping uses 5 platform parameters, (obtained from the "mapping" argument) 15 # - x_size : number of clusters in a row16 # - y_size : number of clusters in a column17 # - x_width : number of bits coding x coordinate18 # - y_width : number of bits coding y coordinate19 # - nprocs : number of processors per cluster20 ################################################################################## ##21 # - x_size : number of clusters in a row 22 # - y_size : number of clusters in a column 23 # - x_width : number of bits coding x coordinate 24 # - y_width : number of bits coding y coordinate 25 # - nprocs : number of processors per cluster 26 ################################################################################## 21 27 22 28 ######################### … … 54 60 for x in xrange (x_size): 55 61 for y in xrange (y_size): 56 mapping.addVseg( vspace, 'trsp_code_%d_%d' %(x,y), code_base , code_size, 57 'CXWU', vtype = 'ELF', x = x, y = y, pseg = 'RAM', 58 binpath = 'build/transpose/transpose.elf', 59 local = True ) 62 cluster_id = (x * y_size) + y 63 if ( mapping.clusters[cluster_id].procs ): 60 64 61 # stacks vsegs: local (one stack per processor => nprocs stacks per cluster) 62 for x in xrange (x_size): 63 for y in xrange (y_size): 64 for p in xrange( nprocs ): 65 proc_id = (((x * y_size) + y) * nprocs) + p 66 size = (stack_size / nprocs) & 0xFFFFF000 67 base = stack_base + (proc_id * size) 68 mapping.addVseg( vspace, 'trsp_stack_%d_%d_%d' % (x,y,p), base, size, 69 'C_WU', vtype = 'BUFFER', x = x , y = y , pseg = 'RAM', 70 local = True, big = True ) 65 mapping.addVseg( vspace, 'trsp_code_%d_%d' %(x,y), 66 code_base , code_size, 67 'CXWU', vtype = 'ELF', x = x, y = y, pseg = 'RAM', 68 binpath = 'build/transpose/transpose.elf', 69 local = True ) 71 70 72 # heap vsegs: distributed but non local (all heap vsegs can be accessed by all tasks)71 # stacks vsegs: local (one stack per processor => nprocs stacks per cluster) 73 72 for x in xrange (x_size): 74 73 for y in xrange (y_size): 75 74 cluster_id = (x * y_size) + y 76 size = heap_size 77 base = heap_base + (cluster_id * size) 78 mapping.addVseg( vspace, 'trsp_heap_%d_%d' % (x,y), base, size, 79 'C_WU', vtype = 'BUFFER', x = x, y = y, pseg = 'RAM', 80 local = False, big = True ) 75 if ( mapping.clusters[cluster_id].procs ): 76 for p in xrange( nprocs ): 77 proc_id = (((x * y_size) + y) * nprocs) + p 78 size = (stack_size / nprocs) & 0xFFFFF000 79 base = stack_base + (proc_id * size) 80 81 mapping.addVseg( vspace, 'trsp_stack_%d_%d_%d' % (x,y,p), 82 base, size, 'C_WU', vtype = 'BUFFER', 83 x = x , y = y , pseg = 'RAM', 84 local = True, big = True ) 85 86 # heap vsegs: distributed non local (all heap vsegs can be accessed by all tasks) 87 for x in xrange (x_size): 88 for y in xrange (y_size): 89 cluster_id = (x * y_size) + y 90 if ( mapping.clusters[cluster_id].procs ): 91 size = heap_size 92 base = heap_base + (cluster_id * size) 93 94 mapping.addVseg( vspace, 'trsp_heap_%d_%d' % (x,y), base, size, 95 'C_WU', vtype = 'HEAP', x = x, y = y, pseg = 'RAM', 96 local = False, big = True ) 81 97 82 98 # distributed tasks / one task per processor 83 99 for x in xrange (x_size): 84 100 for y in xrange (y_size): 85 for p in xrange( nprocs ): 86 trdid = (((x * y_size) + y) * nprocs) + p 87 mapping.addTask( vspace, 'trsp_%d_%d_%d' % (x,y,p), trdid, x, y, p, 88 'trsp_stack_%d_%d_%d' % (x,y,p), 89 'trsp_heap_%d_%d' % (x,y), 0 ) 101 cluster_id = (x * y_size) + y 102 if ( mapping.clusters[cluster_id].procs ): 103 for p in xrange( nprocs ): 104 trdid = (((x * y_size) + y) * nprocs) + p 105 106 mapping.addTask( vspace, 'trsp_%d_%d_%d' % (x,y,p), 107 trdid, x, y, p, 108 'trsp_stack_%d_%d_%d' % (x,y,p), 109 'trsp_heap_%d_%d' % (x,y), 0 ) 90 110 91 111 # extend mapping name … … 94 114 return vspace # useful for test 95 115 96 ################################ test ################################################## ####116 ################################ test ################################################## 97 117 98 118 if __name__ == '__main__':
Note: See TracChangeset
for help on using the changeset viewer.