From 01717ce32042c55bc49e5a483b6152fa3f642f01 Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Sun, 28 Apr 2024 01:40:45 +0000 Subject: [PATCH] ENH: Use the kernel style Necessary to extend this to L2/L3 --- kernel/meson.build | 503 +++++++++++++-------------------------------- 1 file changed, 144 insertions(+), 359 deletions(-) diff --git a/kernel/meson.build b/kernel/meson.build index 0f60f3d01..11c731054 100644 --- a/kernel/meson.build +++ b/kernel/meson.build @@ -12,390 +12,171 @@ endif # addl --> passed AS IS base_kops = [ # Level 1 BLAS - { - 'base': 'rot', + { 'base': 'rot', 'modes': { - 's' : { - 'dir': 'arm', - 'kernel': 'rot.c', - 'addl': [fma3_flag], - 'exts': ['_k'], - }, - 'd' : { - 'dir': 'arm', - 'kernel': 'rot.c', - 'addl': [fma3_flag], - 'exts': ['_k'], - }, - 'q' : { - 'dir': 'arm', - 'kernel': 'zrot.c', - 'exts': ['_k'], - }, - 'cs' : { - 'dir': 'arm', - 'kernel': 'zrot.c', - 'exts': ['_k'], - }, - 'zd' : { - 'dir': 'arm', - 'kernel': 'zrot.c', - 'exts': ['_k'], - }, - 'xq' : { - 'dir': 'arm', - 'kernel': 'zrot.c', - 'exts': ['_k'], - }, + 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'rot.c', 'addl': [fma3_flag]}}}, + 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'rot.c', 'addl': [fma3_flag]}}}, + 'q': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zrot.c'}}}, + 'cs': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zrot.c'}}}, + 'zd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zrot.c'}}}, + 'xq': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zrot.c'}}}, }, }, - {'base': 'swap', + { 'base': 'swap', 'modes': { - 's' : { - 'dir': 'arm', - 'kernel': 'swap.c', - 'exts': ['_k'], - }, - 'd' : { - 'dir': 'arm', - 'kernel': 'swap.c', - 'exts': ['_k'], - }, - 'q' : { - 'dir': 'x86_64', - 'kernel': 'swap.S', - 'exts': ['_k'], - }, - 'c' : { - 'dir': 'arm', - 'kernel': 'zswap.c', - 'exts': ['_k'], - }, - 'z' : { - 'dir': 'arm', - 'kernel': 'zswap.c', - 'exts': ['_k'], - }, - 'x' : { - 'dir': 'arm', - 'kernel': 'zswap.c', - 'exts': ['_k'], - }, + 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'swap.c'}}}, + 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'swap.c'}}}, + 'q': {'exts': {'_k': {'dir': 'x86_64', 'kernel': 'swap.S'}}}, + 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zswap.c'}}}, + 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zswap.c'}}}, + 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zswap.c'}}}, }, }, - {'base': 'scal', + { 'base': 'scal', 'modes': { - 's' : { - 'dir': 'arm', - 'kernel': 'scal.c', - 'exts': ['_k'], - }, - 'd' : { - 'dir': 'arm', - 'kernel': 'scal.c', - 'exts': ['_k'], - }, - 'q' : { - 'dir': 'x86_64', - 'kernel': 'scal.S', - 'exts': ['_k'], - }, - 'c' : { - 'dir': 'arm', - 'kernel': 'zscal.c', - 'exts': ['_k'], - }, - 'z' : { - 'dir': 'arm', - 'kernel': 'zscal.c', - 'exts': ['_k'], - }, - 'x' : { - 'dir': 'arm', - 'kernel': 'zscal.c', - 'exts': ['_k'], - }, + 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'scal.c'}}}, + 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'scal.c'}}}, + 'q': {'exts': {'_k': {'dir': 'x86_64', 'kernel': 'scal.S'}}}, + 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zscal.c'}}}, + 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zscal.c'}}}, + 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zscal.c'}}}, }, }, - {'base': 'copy', + { 'base': 'copy', 'modes': { - 's' : { - 'dir': 'arm', - 'kernel': 'copy.c', - 'exts': ['_k'], - }, - 'd' : { - 'dir': 'arm', - 'kernel': 'copy.c', - 'exts': ['_k'], - }, - 'q' : { - 'dir': 'arm', - 'kernel': 'zcopy.c', - 'exts': ['_k'], - }, - 'c' : { - 'dir': 'arm', - 'kernel': 'zcopy.c', - 'exts': ['_k'], - }, - 'z' : { - 'dir': 'arm', - 'kernel': 'zcopy.c', - 'exts': ['_k'], - }, - 'x' : { - 'dir': 'arm', - 'kernel': 'zcopy.c', - 'exts': ['_k'], - }, + 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'copy.c'}}}, + 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'copy.c'}}}, + 'q': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zcopy.c'}}}, + 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zcopy.c'}}}, + 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zcopy.c'}}}, + 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zcopy.c'}}}, }, }, - {'base': 'axpy', + { 'base': 'axpy', 'modes': { - 's' : { - 'dir': 'arm', - 'kernel': 'axpy.c', - 'exts': ['_k'], - }, - 'd' : { - 'dir': 'arm', - 'kernel': 'axpy.c', - 'exts': ['_k'], - }, - 'q' : { - 'dir': 'x86_64', - 'kernel': 'axpy.S', - 'exts': ['_k'], - }, - 'c' : { - 'dir': 'arm', - 'kernel': 'zaxpy.c', - 'exts': ['_k'], - }, - 'z' : { - 'dir': 'arm', - 'kernel': 'zaxpy.c', - 'exts': ['_k'], - }, - 'x' : { - 'dir': 'arm', - 'kernel': 'zaxpy.c', - 'exts': ['_k'], - }, + 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'axpy.c'}}}, + 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'axpy.c'}}}, + 'q': {'exts': {'_k': {'dir': 'x86_64', 'kernel': 'axpy.S'}}}, + 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zaxpy.c'}}}, + 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zaxpy.c'}}}, + 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zaxpy.c'}}}, }, }, - {'base': 'dot', + { 'base': 'dot', 'modes': { - 's' : { - 'dir': 'arm', - 'kernel': 'dot.c', - 'exts': ['_k'], - }, - 'd' : { - 'dir': 'arm', - 'kernel': 'dot.c', - 'exts': ['_k'], - }, - 'q' : { - 'dir': 'x86_64', - 'kernel': 'dot.S', - 'exts': ['_k'], - }, - 'c' : { - 'dir': 'arm', - 'kernel': 'zdot.c', - 'exts': ['_k'], - }, - 'z' : { - 'dir': 'arm', - 'kernel': 'zdot.c', - 'exts': ['_k'], - }, - 'x' : { - 'dir': 'arm', - 'kernel': 'zdot.c', - 'exts': ['_k'], - }, + 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'dot.c'}}}, + 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'dot.c'}}}, + 'q': {'exts': {'_k': {'dir': 'x86_64', 'kernel': 'dot.S'}}}, + 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zdot.c'}}}, + 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zdot.c'}}}, + 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zdot.c'}}}, }, }, # xDOTU xDOTC xxDOT aren't present - {'base': 'nrm2', + { 'base': 'nrm2', 'modes': { - 's' : { - 'dir': 'arm', - 'kernel': 'nrm2.c', - 'exts': ['_k'], - }, - 'd' : { - 'dir': 'arm', - 'kernel': 'nrm2.c', - 'exts': ['_k'], - }, - 'q' : { - 'dir': 'arm', - 'kernel': 'znrm2.c', - 'exts': ['_k'], - }, - 'c' : { - 'dir': 'arm', - 'kernel': 'znrm2.c', - 'exts': ['_k'], - }, - 'z' : { - 'dir': 'arm', - 'kernel': 'znrm2.c', - 'exts': ['_k'], - }, - 'x' : { - 'dir': 'arm', - 'kernel': 'znrm2.c', - 'exts': ['_k'], - }, + 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'nrm2.c'}}}, + 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'nrm2.c'}}}, + 'q': {'exts': {'_k': {'dir': 'arm', 'kernel': 'znrm2.c'}}}, + 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'znrm2.c'}}}, + 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'znrm2.c'}}}, + 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'znrm2.c'}}}, }, }, - {'base': 'asum', + { 'base': 'asum', 'modes': { - 's' : { - 'dir': 'arm', - 'kernel': 'asum.c', - 'exts': ['_k'], - }, - 'd' : { - 'dir': 'arm', - 'kernel': 'asum.c', - 'exts': ['_k'], - }, - 'q' : { - 'dir': 'arm', - 'kernel': 'zasum.c', - 'exts': ['_k'], - }, - 'c' : { - 'dir': 'arm', - 'kernel': 'zasum.c', - 'exts': ['_k'], - }, - 'z' : { - 'dir': 'arm', - 'kernel': 'zasum.c', - 'exts': ['_k'], - }, - 'x' : { - 'dir': 'arm', - 'kernel': 'zasum.c', - 'exts': ['_k'], - }, + 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'asum.c'}}}, + 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'asum.c'}}}, + 'q': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zasum.c'}}}, + 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zasum.c'}}}, + 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zasum.c'}}}, + 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zasum.c'}}}, }, }, - {'base': 'amax', + { 'base': 'amax', 'modes': { - 's' : { - 'dir': 'arm', - 'kernel': 'amax.c', - 'exts': ['_k'], - }, - 'd' : { - 'dir': 'arm', - 'kernel': 'amax.c', - 'exts': ['_k'], - }, - 'q' : { - 'dir': 'arm', - 'kernel': 'zamax.c', - 'exts': ['_k'], - }, - 'c' : { - 'dir': 'arm', - 'kernel': 'zamax.c', - 'exts': ['_k'], - }, - 'z' : { - 'dir': 'arm', - 'kernel': 'zamax.c', - 'exts': ['_k'], - }, - 'x' : { - 'dir': 'arm', - 'kernel': 'zamax.c', - 'exts': ['_k'], - }, + 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'amax.c'}}}, + 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'amax.c'}}}, + 'q': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zamax.c'}}}, + 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zamax.c'}}}, + 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zamax.c'}}}, + 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zamax.c'}}}, }, }, - # # 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 = [] @@ -405,7 +186,6 @@ foreach _kop : base_kops foreach mode, details : modes __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'] @@ -417,8 +197,8 @@ foreach _kop : base_kops __cargs += ('-U' + _u) endforeach endif - # Now the rest, one run for each ext - foreach ext : details['exts'] + # Now the rest, one run for each ext, to get the final symbols + foreach ext, extdat : details['exts'] extmap = ext_mappings[ext] if extmap.has_key('def') foreach _d : extmap['def'] @@ -430,6 +210,11 @@ foreach _kop : base_kops __cargs += ('-U' + _u) endforeach endif + # Construct the final paths + src = join_paths(extdat['dir'], extdat['kernel']) + if extdat.has_key('addl') + __cargs += extdat['addl'] + endif message(mode + base + ext) sym_name = mode + base + ext sym_underscored = f'@sym_name@_'