source: soft/giet_vm/convol/convol.py @ 356

Last change on this file since 356 was 353, checked in by alain, 11 years ago

Introduce distribution of page tables, kernel code, and user code
in the convol application.

  • Property svn:executable set to *
File size: 4.9 KB
Line 
1#!/usr/bin/env python
2
3from mapping import *
4
5######################################################################################
6#   file   : convol.py  (for the convol application)
7#   date   : may 2014
8#   author : Alain Greiner
9#######################################################################################
10#  This file describes the mapping of the multi-threaded "convol"
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.
14#  This mapping uses 5 platform parameters, (obtained from the "mapping" argument)
15#  - x_size    : number of clusters in a row
16#  - y_size    : number of clusters in a column
17#  - x_width   : number of bits coding x coordinate
18#  - y_width   : number of bits coding y coordinate
19#  - procs_max : number of processors per cluster
20####################################################################################
21
22######################
23def convol( mapping ):
24
25    x_size    = mapping.x_size
26    y_size    = mapping.y_size
27    procs_max = mapping.procs_max
28    x_width   = mapping.x_width
29    y_width   = mapping.y_width
30
31    # define vsegs base & size
32    code_base  = 0x10000000
33    code_size  = 0x00010000     # 64 Kbytes
34   
35    data_base  = 0x20000000
36    data_size  = 0x00010000     # 64 Kbytes
37
38    ptab_base  = 0x30000000
39    ptab_size  = 0x00040000     # 256 Kbytes
40
41    heap_base  = 0x40000000     
42    heap_size  = 0x01000000     # max 16 Mbytes (for all clusters)
43
44    stack_base = 0x50000000     
45    stack_size = 0x02000000     # max 32 Mbytes (for all processors)
46
47    # create Vspace
48    vspace = mapping.addVspace( name = 'convol', startname = 'conv_data' )
49   
50    # data vseg in cluster[0,0] : non local
51    mapping.addVseg( vspace, 'conv_data', data_base , data_size, 'C_WU', vtype = 'ELF',
52                     x = 0, y = 0, pseg = 'RAM', binpath = 'build/convol/convol.elf',
53                     local = False )
54
55    # code vsegs : local (one replicated vseg per cluster)
56    for x in xrange (x_size):
57        for y in xrange (y_size):
58           
59            size       = code_size
60            base       = code_base
61            mapping.addVseg( vspace, 'conv_code_%d_%d' % (x,y), base, size,
62                             'CXWU', vtype = 'ELF', x = x , y = y , pseg = 'RAM', 
63                             binpath = 'build/convol/convol.elf', 
64                             local = True )
65
66    # heap vsegs : non local (one communication buffer per cluster)
67    for x in xrange (x_size):
68        for y in xrange (y_size):
69           
70            cluster_id = (x * y_size) + y
71            size       = heap_size / (x_size * y_size)
72            base       = heap_base + (cluster_id * size)
73            mapping.addVseg( vspace, 'conv_heap_%d_%d' % (x,y), base, size,
74                             'C_WU', vtype = 'BUFFER', x = x , y = y , pseg = 'RAM',
75                             local = False )
76
77    # stack vsegs : local (one stack per processor)
78    for x in xrange (x_size):
79        for y in xrange (y_size):
80            for p in xrange( procs_max ):
81
82                proc_id = (((x * y_size) + y) * procs_max) + p
83                size    = stack_size / (x_size * y_size * procs_max)
84                base    = stack_base + (proc_id * size)
85                mapping.addVseg( vspace, 'conv_stack_%d_%d_%d' % (x,y,p), base, size,
86                                 'C_WU', vtype = 'BUFFER', x = x , y = y , pseg = 'RAM',
87                                 local = True )
88           
89    # ptab vsegs : local (one ptab per cluster)
90    for x in xrange (x_size):
91        for y in xrange (y_size):
92           
93            size       = ptab_size
94            base       = ptab_base
95            mapping.addVseg( vspace, 'conv_ptab_%d_%d' %(x,y), base , size,
96                             'C_WU', vtype = 'PTAB', x = x , y = y , pseg = 'RAM', 
97                             align = 13, 
98                             local = True )
99
100    # distributed tasks : one task per processor
101    for x in xrange (x_size):
102        for y in xrange (y_size):
103            for p in xrange( procs_max ):
104
105                trdid = (((x * y_size) + y) * procs_max) + p
106                mapping.addTask( vspace, 'sort_%d_%d_%d' % (x,y,p), trdid, x, y, p,
107                                 'conv_stack_%d_%d_%d' % (x,y,p),
108                                 'conv_heap_%d_%d' % (x,y), 0 )
109
110    # extend mapping name
111    mapping.name += '_convol'
112
113    return vspace  # useful for test
114           
115################################ test ######################################################
116
117if __name__ == '__main__':
118
119    vspace = convol( Mapping( 'test', 2, 2, 4 ) )
120    print vspace.xml()
121
122
123# Local Variables:
124# tab-width: 4;
125# c-basic-offset: 4;
126# c-file-offsets:((innamespace . 0)(inline-open . 0));
127# indent-tabs-mode: nil;
128# End:
129#
130# vim: filetype=python:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
131
Note: See TracBrowser for help on using the repository browser.