source: soft/giet_vm/applications/transpose/transpose.py @ 618

Last change on this file since 618 was 610, checked in by alain, 10 years ago

Rename the path to .elf file in the "appli.py" files,
because the "build" directory has been renamed to "bin" on virtual disk.

  • Property svn:executable set to *
File size: 5.2 KB
RevLine 
[317]1#!/usr/bin/env python
2
3from mapping import *
4
[502]5##################################################################################
[589]6#   file   : transpose.py 
[317]7#   date   : may 2014
8#   author : Alain Greiner
[502]9##################################################################################
[317]10#  This file describes the mapping of the multi-threaded "transpose"
11#  application on a multi-clusters, multi-processors architecture.
12#  This include both the mapping of virtual segments on the clusters,
13#  and the mapping of tasks on processors.
[502]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.
[317]20#  This mapping uses 5 platform parameters, (obtained from the "mapping" argument)
[502]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##################################################################################
[317]27
[589]28######################
29def extend( mapping ):
[317]30
31    x_size    = mapping.x_size
32    y_size    = mapping.y_size
[444]33    nprocs    = mapping.nprocs
[317]34    x_width   = mapping.x_width
35    y_width   = mapping.y_width
36
37    # define vsegs base & size
38    code_base  = 0x10000000
[383]39    code_size  = 0x00010000     # 64 Kbytes (replicated in each cluster)
[317]40   
41    data_base  = 0x20000000
[383]42    data_size  = 0x00010000     # 64 Kbytes (non replicated)
[317]43
44    stack_base = 0x40000000 
[414]45    stack_size = 0x00200000     # 2 Mbytes (per cluster)
[317]46
[414]47    heap_base  = 0x60000000 
48    heap_size  = 0x00200000     # 2 Mbytes (per cluster)
[317]49
[383]50    # create vspace
[317]51    vspace = mapping.addVspace( name = 'transpose', startname = 'trsp_data' )
52   
[383]53    # data vseg : shared (only in cluster[0,0])
54    mapping.addVseg( vspace, 'trsp_data', data_base , data_size, 
55                     'C_WU', vtype = 'ELF', x = 0, y = 0, pseg = 'RAM', 
[610]56                     binpath = 'bin/transpose/appli.elf',
[383]57                     local = False )
[317]58
[383]59    # code vsegs : local (one copy in each cluster)
60    for x in xrange (x_size):
61        for y in xrange (y_size):
[502]62            cluster_id = (x * y_size) + y
63            if ( mapping.clusters[cluster_id].procs ):
[317]64
[502]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', 
[610]68                                 binpath = 'bin/transpose/appli.elf',
[502]69                                 local = True )
70
71    # stacks vsegs: local (one stack per processor => nprocs stacks per cluster)
[383]72    for x in xrange (x_size):
73        for y in xrange (y_size):
[502]74            cluster_id = (x * y_size) + y
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)
[383]80
[502]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)
[383]87    for x in xrange (x_size):
88        for y in xrange (y_size):
89            cluster_id = (x * y_size) + y
[502]90            if ( mapping.clusters[cluster_id].procs ):
91                size  = heap_size
92                base  = heap_base + (cluster_id * size)
[383]93
[502]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 )
97
[317]98    # distributed tasks / one task per processor
99    for x in xrange (x_size):
100        for y in xrange (y_size):
[502]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
[317]105
[502]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 )
110
[317]111    # extend mapping name
112    mapping.name += '_transpose'
113
114    return vspace  # useful for test
115           
[502]116################################ test ##################################################
[317]117
118if __name__ == '__main__':
119
[589]120    vspace = extend( Mapping( 'test', 2, 2, 4 ) )
[317]121    print vspace.xml()
122
123
124# Local Variables:
125# tab-width: 4;
126# c-basic-offset: 4;
127# c-file-offsets:((innamespace . 0)(inline-open . 0));
128# indent-tabs-mode: nil;
129# End:
130#
131# vim: filetype=python:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
132
Note: See TracBrowser for help on using the repository browser.