ENH: Use the kernel style

Necessary to extend this to L2/L3
This commit is contained in:
Rohit Goswami 2024-04-28 01:40:45 +00:00 committed by Mateusz Sokół
parent cced76830e
commit 01717ce320
1 changed files with 144 additions and 359 deletions

View File

@ -12,390 +12,171 @@ endif
# addl --> passed AS IS # addl --> passed AS IS
base_kops = [ base_kops = [
# Level 1 BLAS # Level 1 BLAS
{ { 'base': 'rot',
'base': 'rot',
'modes': { 'modes': {
's' : { 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'rot.c', 'addl': [fma3_flag]}}},
'dir': 'arm', 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'rot.c', 'addl': [fma3_flag]}}},
'kernel': 'rot.c', 'q': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zrot.c'}}},
'addl': [fma3_flag], 'cs': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zrot.c'}}},
'exts': ['_k'], 'zd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zrot.c'}}},
}, 'xq': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zrot.c'}}},
'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'],
},
}, },
}, },
{'base': 'swap', { 'base': 'swap',
'modes': { 'modes': {
's' : { 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'swap.c'}}},
'dir': 'arm', 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'swap.c'}}},
'kernel': 'swap.c', 'q': {'exts': {'_k': {'dir': 'x86_64', 'kernel': 'swap.S'}}},
'exts': ['_k'], 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zswap.c'}}},
}, 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zswap.c'}}},
'd' : { 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zswap.c'}}},
'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'],
},
}, },
}, },
{'base': 'scal', { 'base': 'scal',
'modes': { 'modes': {
's' : { 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'scal.c'}}},
'dir': 'arm', 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'scal.c'}}},
'kernel': 'scal.c', 'q': {'exts': {'_k': {'dir': 'x86_64', 'kernel': 'scal.S'}}},
'exts': ['_k'], 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zscal.c'}}},
}, 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zscal.c'}}},
'd' : { 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zscal.c'}}},
'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'],
},
}, },
}, },
{'base': 'copy', { 'base': 'copy',
'modes': { 'modes': {
's' : { 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'copy.c'}}},
'dir': 'arm', 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'copy.c'}}},
'kernel': 'copy.c', 'q': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zcopy.c'}}},
'exts': ['_k'], 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zcopy.c'}}},
}, 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zcopy.c'}}},
'd' : { 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zcopy.c'}}},
'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'],
},
}, },
}, },
{'base': 'axpy', { 'base': 'axpy',
'modes': { 'modes': {
's' : { 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'axpy.c'}}},
'dir': 'arm', 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'axpy.c'}}},
'kernel': 'axpy.c', 'q': {'exts': {'_k': {'dir': 'x86_64', 'kernel': 'axpy.S'}}},
'exts': ['_k'], 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zaxpy.c'}}},
}, 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zaxpy.c'}}},
'd' : { 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zaxpy.c'}}},
'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'],
},
}, },
}, },
{'base': 'dot', { 'base': 'dot',
'modes': { 'modes': {
's' : { 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'dot.c'}}},
'dir': 'arm', 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'dot.c'}}},
'kernel': 'dot.c', 'q': {'exts': {'_k': {'dir': 'x86_64', 'kernel': 'dot.S'}}},
'exts': ['_k'], 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zdot.c'}}},
}, 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zdot.c'}}},
'd' : { 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zdot.c'}}},
'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'],
},
}, },
}, },
# xDOTU xDOTC xxDOT aren't present # xDOTU xDOTC xxDOT aren't present
{'base': 'nrm2', { 'base': 'nrm2',
'modes': { 'modes': {
's' : { 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'nrm2.c'}}},
'dir': 'arm', 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'nrm2.c'}}},
'kernel': 'nrm2.c', 'q': {'exts': {'_k': {'dir': 'arm', 'kernel': 'znrm2.c'}}},
'exts': ['_k'], 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'znrm2.c'}}},
}, 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'znrm2.c'}}},
'd' : { 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'znrm2.c'}}},
'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'],
},
}, },
}, },
{'base': 'asum', { 'base': 'asum',
'modes': { 'modes': {
's' : { 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'asum.c'}}},
'dir': 'arm', 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'asum.c'}}},
'kernel': 'asum.c', 'q': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zasum.c'}}},
'exts': ['_k'], 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zasum.c'}}},
}, 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zasum.c'}}},
'd' : { 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zasum.c'}}},
'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'],
},
}, },
}, },
{'base': 'amax', { 'base': 'amax',
'modes': { 'modes': {
's' : { 's': {'exts': {'_k': {'dir': 'arm', 'kernel': 'amax.c'}}},
'dir': 'arm', 'd': {'exts': {'_k': {'dir': 'arm', 'kernel': 'amax.c'}}},
'kernel': 'amax.c', 'q': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zamax.c'}}},
'exts': ['_k'], 'c': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zamax.c'}}},
}, 'z': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zamax.c'}}},
'd' : { 'x': {'exts': {'_k': {'dir': 'arm', 'kernel': 'zamax.c'}}},
'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'],
},
}, },
}, },
# # TODO: Handle the i*amax style # # # TODO: Handle the i*amax style
# {'base': 'axpby', # # {'base': 'axpby',
# 'modes': {'s': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, # # 'modes': {'s': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']},
# 'd': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, # # 'd': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']},
# 'c': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, # # 'c': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']},
# 'z': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']}, # # 'z': {'dir': 'arm', 'kernel': 'axpby.c', 'exts': ['_k']},
# }, # # },
# }, # # },
# # Level 2 BLAS # # # Level 2 BLAS
# # There are additional sources so now we have srcs # # # There are additional sources so now we have srcs
# # Ordered as per KERNEL.generic and Makefile.L2 # # # Ordered as per KERNEL.generic and Makefile.L2
# # exts are used to find the flags for each modality # # # exts are used to find the flags for each modality
# # ext is attached to base (only useful from Level 2) # # # ext is attached to base (only useful from Level 2)
# # i.e. baseext (e.g., gemv_n, gemv_t, cgeru_k, cgerc_k) # # # i.e. baseext (e.g., gemv_n, gemv_t, cgeru_k, cgerc_k)
# {'base': 'gemv', # # {'base': 'gemv',
# 'modes': {'s': {'dir': 'arm', 'kernel': 'gemv_n.c', 'exts': ['_n', '_t']}, # # 'modes': {'s': {'dir': 'arm', 'kernel': 'gemv_n.c', 'exts': ['_n', '_t']},
# 'd': {'dir': 'arm', 'kernel': 'gemv_n.c', # # 'd': {'dir': 'arm', 'kernel': 'gemv_n.c',
# # TODO: _t should take fmaflag, but then we need a dictionary.. # # # TODO: _t should take fmaflag, but then we need a dictionary..
# # From Makefile.L2 # # # From Makefile.L2
# 'exts': ['_n', '_t']}, # # 'exts': ['_n', '_t']},
# 'q': {'dir': 'arm', 'kernel': 'gemv_n.c', 'exts': ['_n', '_t']}, # # 'q': {'dir': 'arm', 'kernel': 'gemv_n.c', 'exts': ['_n', '_t']},
# 'c': {'dir': 'arm', 'kernel': 'zgemv_n.c', # # 'c': {'dir': 'arm', 'kernel': 'zgemv_n.c',
# 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']}, # # 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']},
# 'z': {'dir': 'arm', 'kernel': 'zgemv_n.c', # # 'z': {'dir': 'arm', 'kernel': 'zgemv_n.c',
# 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']}, # # 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']},
# 'x': {'dir': 'arm', 'kernel': 'zgemv_n.c', # # 'x': {'dir': 'arm', 'kernel': 'zgemv_n.c',
# 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']}, # # 'exts': ['_n', '_t', '_r', '_c', '_o', '_u', '_s', '_d']},
# }, # # },
# }, # # },
# {'base': 'symv', # # {'base': 'symv',
# 'modes': {'s': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, # # 'modes': {'s': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']},
# 'd': {'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']}, # # 'q': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']},
# 'c': {'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']}, # # 'z': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']},
# 'x': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']}, # # 'x': {'dir': 'generic', 'kernel': 'symv_k.c', 'exts': ['_U', '_L']},
# }, # # },
# }, # # },
# {'base': 'ger', # # {'base': 'ger',
# 'modes': {'s': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']}, # # 'modes': {'s': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']},
# 'd': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']}, # # 'd': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']},
# 'q': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']} # # 'q': {'dir': 'generic', 'kernel': 'ger.c', 'exts': ['_k']}
# }, # # },
# }, # # },
# {'base': 'geru', # # {'base': 'geru',
# 'modes': {'c': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, # # 'modes': {'c': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']},
# 'z': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, # # 'z': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']},
# 'x': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']} # # 'x': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}
# } # # }
# }, # # },
# {'base': 'gerc', # # {'base': 'gerc',
# 'modes': {'c': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, # # 'modes': {'c': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']},
# 'z': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, # # 'z': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']},
# 'x': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']}, # # 'x': {'dir': 'generic', 'kernel': 'zger.c', 'exts': ['_k']},
# }, # # },
# }, # # },
# {'base': 'hemv', # # {'base': 'hemv',
# 'modes': {'c': {'dir': 'generic', # # 'modes': {'c': {'dir': 'generic',
# 'kernel': 'zhemv_k.c', # # 'kernel': 'zhemv_k.c',
# 'exts': ['_U', '_L', '_V', '_M']}, # # 'exts': ['_U', '_L', '_V', '_M']},
# 'z': {'dir': 'generic', # # 'z': {'dir': 'generic',
# 'kernel': 'zhemv_k.c', # # 'kernel': 'zhemv_k.c',
# 'exts': ['_U', '_L', '_V', '_M']}, # # 'exts': ['_U', '_L', '_V', '_M']},
# 'x': {'dir': 'generic', # # 'x': {'dir': 'generic',
# 'kernel': 'zhemv_k.c', # # 'kernel': 'zhemv_k.c',
# 'exts': ['_U', '_L', '_V', '_M']}, # # 'exts': ['_U', '_L', '_V', '_M']},
# }, # # },
# }, # # },
# {'base': 'bgemv', # # {'base': 'bgemv',
# 'modes': {'s': {'dir': 'x86_64', # # 'modes': {'s': {'dir': 'x86_64',
# 'kernel': 'sbgemv_n.c', # # 'kernel': 'sbgemv_n.c',
# 'exts': ['_n', '_t']} # # 'exts': ['_n', '_t']}
# }, # # },
# }, # # },
] ]
kernel_confs = [] kernel_confs = []
@ -405,7 +186,6 @@ foreach _kop : base_kops
foreach mode, details : modes foreach mode, details : modes
__cargs = _cargs __cargs = _cargs
prec_mode = precision_mappings[mode] prec_mode = precision_mappings[mode]
src = join_paths(details['dir'], details['kernel'])
# Generate the mapping for the type # Generate the mapping for the type
if prec_mode.has_key('def') if prec_mode.has_key('def')
foreach _d : prec_mode['def'] foreach _d : prec_mode['def']
@ -417,8 +197,8 @@ foreach _kop : base_kops
__cargs += ('-U' + _u) __cargs += ('-U' + _u)
endforeach endforeach
endif endif
# Now the rest, one run for each ext # Now the rest, one run for each ext, to get the final symbols
foreach ext : details['exts'] foreach ext, extdat : details['exts']
extmap = ext_mappings[ext] extmap = ext_mappings[ext]
if extmap.has_key('def') if extmap.has_key('def')
foreach _d : extmap['def'] foreach _d : extmap['def']
@ -430,6 +210,11 @@ foreach _kop : base_kops
__cargs += ('-U' + _u) __cargs += ('-U' + _u)
endforeach endforeach
endif 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) message(mode + base + ext)
sym_name = mode + base + ext sym_name = mode + base + ext
sym_underscored = f'@sym_name@_' sym_underscored = f'@sym_name@_'