From cced76830e05bf99a786e6a252c475fec00ca604 Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 28 Apr 2024 00:48:50 +0000 Subject: [PATCH] MAINT: Cleanup kernel meson --- kernel/meson.build | 604 +++++++++------------------------------------ 1 file changed, 119 insertions(+), 485 deletions(-) diff --git a/kernel/meson.build b/kernel/meson.build index f21b72fca..0f60f3d01 100644 --- a/kernel/meson.build +++ b/kernel/meson.build @@ -322,497 +322,132 @@ base_kops = [ }, }, }, - # TODO: Handle the i*amax style - {'base': 'axpby', - 'modes': {'s': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, - 'd': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, - 'c': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, - 'z': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, - }, - }, - # Level 2 BLAS - # There are additional sources so now we have srcs - # Ordered as per KERNEL.generic and Makefile.L2 - # exts are used to find the flags for each modality - # ext is attached to base (only useful from Level 2) - # i.e. baseext (e.g., gemv_n, gemv_t, cgeru_k, cgerc_k) - {'base': 'gemv', - 'modes': {'s': {'dir': 'arm', 'kernel': 'gemv_n.c', 'exts': ['_n', '_t']}, - 'd': {'dir': 'arm', 'kernel': 'gemv_n.c', - # TODO: _t should take fmaflag, but then we need a dictionary.. - # From Makefile.L2 - 'exts': ['_n', '_t']}, - 'q': {'dir': 'arm', 'kernel': 'gemv_n.c', 'exts': ['_n', '_t']}, - 'c': {'dir': 'arm', 'kernel': 'zgemv_n.c', - 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']}, - 'z': {'dir': 'arm', 'kernel': 'zgemv_n.c', - 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']}, - 'x': {'dir': 'arm', 'kernel': 'zgemv_n.c', - 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']}, - }, - }, - {'base': 'symv', - 'modes': {'s': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, - 'd': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, - 'q': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, - 'c': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, - 'z': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, - 'x': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, - }, - }, - {'base': 'ger', - 'modes': {'s': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']}, - 'd': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']}, - 'q': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']} - }, - }, - {'base': 'geru', - 'modes': {'c': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, - 'z': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, - 'x': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']} - } - }, - {'base': 'gerc', - 'modes': {'c': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, - 'z': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, - 'x': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, - }, - }, - {'base': 'hemv', - 'modes': {'c': {'dir': 'generic', - 'kernel': 'zhemv_k.c', - 'exts': ['_U', '_L', '_V', '_M']}, - 'z': {'dir': 'generic', - 'kernel': 'zhemv_k.c', - 'exts': ['_U', '_L', '_V', '_M']}, - 'x': {'dir': 'generic', - 'kernel': 'zhemv_k.c', - 'exts': ['_U', '_L', '_V', '_M']}, - }, - }, - {'base': 'bgemv', - 'modes': {'s': {'dir': 'x86_64', - 'kernel': 'sbgemv_n.c', - 'exts': ['_n', '_t']} - }, - }, + # # TODO: Handle the i*amax style + # {'base': 'axpby', + # 'modes': {'s': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, + # 'd': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, + # 'c': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, + # 'z': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, + # }, + # }, + # # Level 2 BLAS + # # There are additional sources so now we have srcs + # # Ordered as per KERNEL.generic and Makefile.L2 + # # exts are used to find the flags for each modality + # # ext is attached to base (only useful from Level 2) + # # i.e. baseext (e.g., gemv_n, gemv_t, cgeru_k, cgerc_k) + # {'base': 'gemv', + # 'modes': {'s': {'dir': 'arm', 'kernel': 'gemv_n.c', 'exts': ['_n', '_t']}, + # 'd': {'dir': 'arm', 'kernel': 'gemv_n.c', + # # TODO: _t should take fmaflag, but then we need a dictionary.. + # # From Makefile.L2 + # 'exts': ['_n', '_t']}, + # 'q': {'dir': 'arm', 'kernel': 'gemv_n.c', 'exts': ['_n', '_t']}, + # 'c': {'dir': 'arm', 'kernel': 'zgemv_n.c', + # 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']}, + # 'z': {'dir': 'arm', 'kernel': 'zgemv_n.c', + # 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']}, + # 'x': {'dir': 'arm', 'kernel': 'zgemv_n.c', + # 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']}, + # }, + # }, + # {'base': 'symv', + # 'modes': {'s': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, + # 'd': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, + # 'q': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, + # 'c': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, + # 'z': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, + # 'x': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, + # }, + # }, + # {'base': 'ger', + # 'modes': {'s': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']}, + # 'd': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']}, + # 'q': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']} + # }, + # }, + # {'base': 'geru', + # 'modes': {'c': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, + # 'z': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, + # 'x': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']} + # } + # }, + # {'base': 'gerc', + # 'modes': {'c': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, + # 'z': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, + # 'x': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, + # }, + # }, + # {'base': 'hemv', + # 'modes': {'c': {'dir': 'generic', + # 'kernel': 'zhemv_k.c', + # 'exts': ['_U', '_L', '_V', '_M']}, + # 'z': {'dir': 'generic', + # 'kernel': 'zhemv_k.c', + # 'exts': ['_U', '_L', '_V', '_M']}, + # 'x': {'dir': 'generic', + # 'kernel': 'zhemv_k.c', + # 'exts': ['_U', '_L', '_V', '_M']}, + # }, + # }, + # {'base': 'bgemv', + # 'modes': {'s': {'dir': 'x86_64', + # 'kernel': 'sbgemv_n.c', + # 'exts': ['_n', '_t']} + # }, + # }, ] -# kernel_confs = [] - -# # For the modes array, the following mapping is used for c_args: -# # undef --> -Uwhatever -# # def --> -Dwhatever -# foreach _kop : base_kops -# foreach pkey, pval : _kop['modes'] -# # TODO: This srcs should be in files() after this is ready -# # dictionaries with files can't be printed with message -# kcfg = { -# 'src': pval['dir'] + '/' + pval['kernel'], -# } -# if pval.has_key('addl') -# kcfg += {'addl': pval['addl']} -# endif -# if 's' == pkey -# foreach ext : pval['exts'] -# kcfg += {'name': pkey + _kop['base'] + ext} -# # Level 1 -# if '_k' == ext -# kcfg += { -# 'undef': ['COMPLEX', 'DOUBLE'] -# } -# endif -# # Level 2 -# if '_n' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'COMPLEX', 'TRANS'], -# } -# endif -# if '_t' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'COMPLEX'], -# 'def': ['TRANS'] -# } -# endif -# if '_U' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'COMPLEX', 'LOWER'], -# } -# endif -# if '_L' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'COMPLEX'], -# 'def': ['LOWER'] -# } -# endif -# endforeach -# endif -# if 'd' == pkey -# foreach ext : pval['exts'] -# kcfg += {'name': pkey + _kop['base'] + ext} -# # Level 1 -# if '_k' == ext -# kcfg += { -# 'undef': ['COMPLEX'], -# 'def': ['DOUBLE'], -# } -# endif -# # Level 2 -# if '_n' == ext -# kcfg += { -# 'undef': ['COMPLEX', 'TRANS'], -# 'def': ['DOUBLE'] -# } -# endif -# if '_t' == ext -# kcfg += { -# 'undef': ['COMPLEX'], -# 'def': ['DOUBLE', 'TRANS'] -# } -# endif -# if '_U' == ext -# kcfg += { -# 'undef': ['COMPLEX', 'LOWER'], -# 'def': ['DOUBLE'] -# } -# endif -# if '_L' == ext -# kcfg += { -# 'undef': ['COMPLEX'], -# 'def': ['DOUBLE', 'LOWER'] -# } -# endif -# endforeach -# endif -# if 'q' == pkey -# foreach ext : pval['exts'] -# kcfg += {'name': pkey + _kop['base'] + ext} -# # Level 1 -# if '_k' == ext -# kcfg += { -# 'undef': ['COMPLEX'], -# 'def': ['XDOUBLE'], -# } -# endif -# # Level 2 -# if '_n' == ext -# kcfg += { -# 'undef': ['COMPLEX', 'TRANS'], -# 'def': ['XDOUBLE'] -# } -# endif -# if '_t' == ext -# kcfg += { -# 'undef': ['COMPLEX'], -# 'def': ['XDOUBLE', 'TRANS'] -# } -# endif -# if '_U' == ext -# kcfg += { -# 'undef': ['COMPLEX', 'LOWER'], -# 'def': ['XDOUBLE'] -# } -# endif -# if '_L' == ext -# kcfg += { -# 'undef': ['COMPLEX'], -# 'def': ['XDOUBLE', 'LOWER'] -# } -# endif -# endforeach -# endif -# # TODO: rot is nonstandard in this instance, taking cs zd xq -# # The others (scal, swap) take c z x, so we need to use in -# if 'c' in pkey -# foreach ext : pval['exts'] -# kcfg += {'name': pkey + _kop['base'] + ext} -# # Level 1 -# if '_k' == ext -# kcfg += { -# 'undef': ['DOUBLE'], -# 'def': ['COMPLEX'], -# } -# endif -# # Level 2 -# if '_n' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'TRANS', 'CONJ', 'XCONJ'], -# 'def': ['COMPLEX'] -# } -# endif -# if '_t' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'CONJ', 'XCONJ'], -# 'def': ['COMPLEX', 'TRANS'] -# } -# endif -# if '_r' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'TRANS', 'XCONJ'], -# 'def': ['COMPLEX', 'CONJ'] -# } -# endif -# if '_c' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'XCONJ'], -# 'def': ['COMPLEX', 'TRANS', 'CONJ'] -# } -# endif -# if '_o' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'TRANS', 'CONJ'], -# 'def': ['COMPLEX', 'XCONJ'] -# } -# endif -# if '_u' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'CONJ'], -# 'def': ['COMPLEX', 'TRANS', 'XCONJ'] -# } -# endif -# if '_s' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'TRANS'], -# 'def': ['COMPLEX', 'CONJ', 'XCONJ'] -# } -# endif -# if '_d' == ext -# kcfg += { -# 'undef': ['DOUBLE'], -# 'def': ['COMPLEX', 'TRANS', 'CONJ', 'XCONJ'] -# } -# endif -# if '_U' == ext -# kcfg += { -# 'undef': ['DOUBLE', 'LOWER'], -# 'def': ['COMPLEX'] -# } -# endif -# if '_L' == ext -# kcfg += { -# 'undef': ['DOUBLE'], -# 'def': ['COMPLEX', 'LOWER'] -# } -# endif -# endforeach -# endif -# if 'z' in pkey -# foreach ext : pval['exts'] -# kcfg += {'name': pkey + _kop['base'] + ext} -# # Level 1 -# if '_k' == ext -# kcfg += { -# 'def': ['COMPLEX', 'DOUBLE'], -# } -# endif -# # Level 2 -# if '_n' == ext -# kcfg += { -# 'undef': ['CONJ', 'XCONJ', 'TRANS'], -# 'def': ['COMPLEX', 'DOUBLE'], -# } -# endif -# if '_t' == ext -# kcfg += { -# 'undef': ['CONJ', 'XCONJ'], -# 'def': ['COMPLEX', 'DOUBLE', 'TRANS'] -# } -# endif -# if '_r' == ext -# kcfg += { -# 'undef': ['TRANS', 'XCONJ'], -# 'def': ['COMPLEX', 'DOUBLE', 'CONJ'] -# } -# endif -# if '_c' == ext -# kcfg += { -# 'undef': ['XCONJ'], -# 'def': ['COMPLEX', 'DOUBLE', 'TRANS', 'CONJ'] -# } -# endif -# if '_o' == ext -# kcfg += { -# 'undef': ['CONJ', 'TRANS'], -# 'def': ['COMPLEX', 'DOUBLE', 'XCONJ'] -# } -# endif -# if '_u' == ext -# kcfg += { -# 'undef': ['CONJ'], -# 'def': ['COMPLEX', 'DOUBLE', 'TRANS', 'XCONJ'] -# } -# endif -# if '_s' == ext -# kcfg += { -# 'undef': ['TRANS'], -# 'def': ['COMPLEX', 'DOUBLE', 'CONJ', 'XCONJ'] -# } -# endif -# if '_d' == ext -# kcfg += { -# 'def': ['COMPLEX', 'DOUBLE', 'TRANS', 'CONJ', 'XCONJ'] -# } -# endif -# if '_U' == ext -# kcfg += { -# 'undef': ['LOWER'], -# 'def': ['COMPLEX', 'DOUBLE'] -# } -# endif -# if '_L' == ext -# kcfg += { -# 'def': ['COMPLEX', 'DOUBLE', 'LOWER'] -# } -# endif -# endforeach -# endif -# if 'x' in pkey -# foreach ext : pval['exts'] -# kcfg += {'name': pkey + _kop['base'] + ext} -# # Level 1 -# if '_k' == ext -# kcfg += { -# 'def': ['COMPLEX', 'XDOUBLE'], -# } -# endif -# # Level 2 -# if '_n' == ext -# kcfg += { -# 'undef': ['XCONJ', 'CONJ', 'TRANS'], -# 'def': ['XDOUBLE', 'COMPLEX'], -# } -# endif -# if '_t' == ext -# kcfg += { -# 'undef': ['CONJ', 'XCONJ'], -# 'def': ['XDOUBLE', 'COMPLEX', 'TRANS'] -# } -# endif -# if '_r' == ext -# kcfg += { -# 'undef': ['TRANS', 'XCONJ'], -# 'def': ['XDOUBLE', 'COMPLEX', 'CONJ'] -# } -# endif -# if '_c' == ext -# kcfg += { -# 'undef': ['XCONJ'], -# 'def': ['XDOUBLE', 'COMPLEX', 'TRANS', 'CONJ'] -# } -# endif -# if '_o' == ext -# kcfg += { -# 'undef': ['TRANS', 'CONJ'], -# 'def': ['XDOUBLE', 'COMPLEX', 'XCONJ'] -# } -# endif -# if '_u' == ext -# kcfg += { -# 'undef': ['CONJ'], -# 'def': ['XDOUBLE', 'COMPLEX', 'TRANS', 'XCONJ'] -# } -# endif -# if '_s' == ext -# kcfg += { -# 'undef': ['TRANS'], -# 'def': ['XDOUBLE', 'COMPLEX', 'CONJ', 'XCONJ'] -# } -# endif -# if '_d' == ext -# kcfg += { -# 'def': ['XDOUBLE', 'COMPLEX', 'TRANS', 'CONJ', 'XCONJ'] -# } -# endif -# if '_U' == ext -# kcfg += { -# 'undef': ['LOWER'], -# 'def': ['COMPLEX', 'XDOUBLE'] -# } -# endif -# if '_L' == ext -# kcfg += { -# 'def': ['COMPLEX', 'XDOUBLE', 'LOWER'] -# } -# endif -# endforeach -# endif -# message(kcfg) -# endforeach -# endforeach - -# # foreach root : blas1_roots -# # fname = root + '.S' -# # defs = [] -# # foreach prec : real_kinds -# # name = prec + fname + '_k' -# # kernel_confs += {'defs': defs, 'name': name, 'src': fname} -# # endforeach -# # endforeach - -# # _static_libs = [] -# # foreach conf: kernel_confs -# # _static_libs += static_library( -# # conf['name'], -# # conf['src'], -# # include_directories: _inc, -# # c_args: conf['defs'], -# # ) -# # endforeach -# base_kops = [ -# {'base': 'axpby', -# 'modes': {'s': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, -# 'd': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, -# 'c': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, -# 'z': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, -# }, -# } -# ] - kernel_confs = [] - foreach _kop : base_kops base = _kop['base'] modes = _kop['modes'] foreach mode, details : modes - dir = details['dir'] - kernel = details['kernel'] - exts = details['exts'] - foreach ext : exts - src = join_paths(dir, kernel) - foreach cfg : kernel_confs - if mode + base + ext == cfg['name'] - defs = cfg.get('def', []) - undefs = cfg.get('undef', []) - addl = cfg.get('addl', []) - _cargs = [] - foreach _d : defs - _cargs += ('-D' + _d) - endforeach - foreach _u : undefs - _cargs += ('-U' + _u) - endforeach - foreach _addl : addl - _cargs += addl - endforeach - sym_name = cfg['name'] - sym_underscored = f'@sym_name@_' - current_def = { - 'c_args': [ - _cargs, - f'-DASMNAME=@sym_name@', - f'-DASMFNAME=@sym_underscored@', - f'-DNAME=@sym_underscored@', - f'-DCNAME=@sym_name@', - f'-DCHAR_NAME="@sym_underscored@"', - f'-DCHAR_CNAME="@sym_name@"', - ], - 'name': cfg['name'], - 'src': src - } - # message(current_def) - kernel_confs += current_def - endif + __cargs = _cargs + prec_mode = precision_mappings[mode] + src = join_paths(details['dir'], details['kernel']) + # Generate the mapping for the type + if prec_mode.has_key('def') + foreach _d : prec_mode['def'] + __cargs += ('-D' + _d) + endforeach + endif + if prec_mode.has_key('undef') + foreach _u : prec_mode['undef'] + __cargs += ('-U' + _u) endforeach + endif + # Now the rest, one run for each ext + foreach ext : details['exts'] + extmap = ext_mappings[ext] + if extmap.has_key('def') + foreach _d : extmap['def'] + __cargs += ('-D' + _d) + endforeach + endif + if extmap.has_key('undef') + foreach _u : extmap['undef'] + __cargs += ('-U' + _u) + endforeach + endif + message(mode + base + ext) + sym_name = mode + base + ext + sym_underscored = f'@sym_name@_' + __cargs += [ + f'-DASMNAME=@sym_name@', + f'-DASMFNAME=@sym_underscored@', + f'-DNAME=@sym_underscored@', + f'-DCNAME=@sym_name@', + f'-DCHAR_NAME="@sym_underscored@"', + f'-DCHAR_CNAME="@sym_name@"', + ] + current_def = { + 'c_args': __cargs, + 'name': sym_name, + 'src': src + } + message(__cargs) + kernel_confs += current_def endforeach endforeach endforeach @@ -823,10 +458,9 @@ foreach conf: kernel_confs conf['name'], conf['src'], include_directories: _inc, - c_args: [_cargs, conf['c_args']], + c_args: conf['c_args'], ) endforeach _kern = static_library('_kern', - c_args: _cargs, link_whole: _kern_libs)