File: generate_buffers.py

package info (click to toggle)
devicexlib 0.8.6-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,364 kB
  • sloc: f90: 77,678; sh: 3,701; fortran: 773; makefile: 268; python: 246; ansic: 69; awk: 36
file content (89 lines) | stat: -rwxr-xr-x 2,851 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/env python3

import os, glob, jinja2
from shutil import copyfile


def render(tpl_path, context):
    path, filename = os.path.split(tpl_path)
    return jinja2.Environment(undefined=jinja2.StrictUndefined,
        loader=jinja2.FileSystemLoader(path or './')
    ).get_template(filename).render(context)


rankmap = {1:'vector', 2:'matrix', 3:'tensor', 4:'four_dimensional'}

def gen_interface_list(types):
    intrfc_list = []
    for t in types:
        for rank in (1,2,3,4):
            intrfc_list.append({
                      'vtype'     : t,
                      'rank'      : rank,
                      'vrankname' : rankmap[rank],
                      'subname'   : t[0]+rankmap[rank][0],
                      'vsize'     : rankmap[rank][0]+'size',
                      'vsizedims' : "({})".format(rank),
                      'ranks'     : ",".join([':']*rank)
                      })
    return intrfc_list


def gen_module(context):
    fname = 'devxlib_buffers.jf90'
    bname, _ = os.path.splitext(fname)
    with open('devxlib_buffer.f90','w') as f:
        f.write(render(fname, context))

def gen_module2(context):
    fname = 'devxlib_buffers.jf90'
    bname, _ = os.path.splitext(fname)
    with open('devxlib_pinned.f90','w') as f:
        f.write(render(fname, context))

def main():
    # clean up
    #open('devxlib_buffer.f90','w').close()

    # Types used in the interface
    interfaces = gen_interface_list(['integer', 'real(real64)', 'complex(real64)'])
    context = {'interfaces'  : interfaces,
               'cudamod'     : 'use cudafor',
               'ompmod'      : 'use omp_lib',
               'attributes'  : 'device',
               'pointer_type': 'c_devptr',
               'modulename'  : 'devxlib_buffer',
               'typename'    : 'devxlib_buffer_t'}
    gen_module(context)

#    context = {'interfaces'  : interfaces,
#               'cudamod'     : 'use cudafor',
#               'ompmod'      : 'use omp_lib',
#               'attributes'  : '',
#               'pointer_type': 'c_ptr',
#               'modulename'  : 'devxlib_pinned',
#               'typename'    : 'devxlib_pinned_t'}
#    gen_module(context)

def main2():
    # clean up
    #open('devxlib_pinned.f90','w').close()

    # Types used in the interface
    interfaces = gen_interface_list(['integer', 'real(real64)', 'complex(real64)'])
    context = {'interfaces'  : interfaces,
               'cudamod'     : 'use cudafor',
               'ompmod'      : 'use omp_lib',
               'attributes'  : '',
               'pointer_type': 'c_ptr',
               'modulename'  : 'devxlib_pinned',
               'typename'    : 'devxlib_pinned_t'}
    gen_module2(context)

    ## set multiple extensions
    #copyfile("device_fbuff.f90","device_fbuff.F")


if __name__ == "__main__":
    main()
    main2()