TMP: Focus on getting a single test example up
Use: nm -gC bbdir/libopenblas.a | grep drot ❯ gcc trial.c -o trail -I$(pwd)/tmpmake/include -L$(pwd)/bbdir -lopenblas -Wl,--verbose | grep openblas ❯ ./trail Resulting vectors: x: 3.000000 4.000000 5.000000 6.000000 y: 2.000000 2.000000 2.000000 2.000000
This commit is contained in:
parent
523a57f985
commit
5a1dba3346
|
@ -63,15 +63,62 @@ endforeach
|
|||
# sblas3_srcs += files(['sbgemm.c', 'sbgemmt.c'])
|
||||
# endif
|
||||
|
||||
interface_confs += {
|
||||
'name': 'cblas_drot',
|
||||
'defs': ['-DCBLAS'],
|
||||
'src': files('rot.c')
|
||||
}
|
||||
|
||||
_static_libs = []
|
||||
foreach conf: interface_confs
|
||||
# foreach conf: interface_confs
|
||||
# _static_libs += static_library(
|
||||
# conf['name'],
|
||||
# conf['src'],
|
||||
# include_directories: _inc,
|
||||
# c_args: conf['defs'],
|
||||
# )
|
||||
# endforeach
|
||||
_static_libs += static_library(
|
||||
conf['name'],
|
||||
conf['src'],
|
||||
'cblas_drot',
|
||||
'rot.c',
|
||||
include_directories: _inc,
|
||||
c_args: conf['defs'],
|
||||
c_args: [ '-O2',
|
||||
'-DSMALL_MATRIX_OPT',
|
||||
'-DMAX_STACK_ALLOC=2048',
|
||||
'-Wall',
|
||||
'-m64',
|
||||
'-DF_INTERFACE_GFORT',
|
||||
'-fPIC',
|
||||
'-DSMP_SERVER',
|
||||
'-DNO_WARMUP',
|
||||
'-DMAX_CPU_NUMBER=12',
|
||||
'-DMAX_PARALLEL_NUMBER=1',
|
||||
'-DBUILD_SINGLE=1',
|
||||
'-DBUILD_DOUBLE=1',
|
||||
'-DBUILD_COMPLEX=1',
|
||||
'-DBUILD_COMPLEX16=1',
|
||||
'-msse3',
|
||||
'-mssse3',
|
||||
'-msse4.1',
|
||||
'-mavx',
|
||||
'-mavx2',
|
||||
'-UASMNAME',
|
||||
'-UASMFNAME',
|
||||
'-UNAME',
|
||||
'-UCNAME',
|
||||
'-UCHAR_NAME',
|
||||
'-UCHAR_CNAME',
|
||||
'-DASMNAME=cblas_drot',
|
||||
'-DASMFNAME=cblas_drot_',
|
||||
'-DNAME=cblas_drot_',
|
||||
'-DCNAME=cblas_drot',
|
||||
'-DCHAR_NAME="cblas_drot_"',
|
||||
'-DCHAR_CNAME="cblas_drot"',
|
||||
'-DNO_AFFINITY',
|
||||
'-DDOUBLE',
|
||||
'-UCOMPLEX',
|
||||
'-DCBLAS',],
|
||||
)
|
||||
endforeach
|
||||
|
||||
_interface = static_library('_interface',
|
||||
link_whole: _static_libs)
|
||||
|
|
|
@ -397,363 +397,493 @@ base_kops = [
|
|||
},
|
||||
]
|
||||
|
||||
# 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']},
|
||||
# },
|
||||
# }
|
||||
# ]
|
||||
|
||||
_configs = [
|
||||
# {'name': 'saxpby_k', 'undef': ['COMPLEX', 'DOUBLE'], 'def': [], 'addl': []},
|
||||
# {'name': 'daxpby_k', 'undef': ['COMPLEX'], 'def': ['DOUBLE'], 'addl': []},
|
||||
# {'name': 'caxpby_k', 'undef': ['CONJ', 'DOUBLE'], 'def': ['COMPLEX'], 'addl': []},
|
||||
# {'name': 'zaxpby_k', 'undef': ['CONJ'], 'def': ['COMPLEX', 'DOUBLE'], 'addl': []},
|
||||
# {'name': 'sswap_k', 'undef': ['COMPLEX', 'DOUBLE'], 'def': [], 'addl': []},
|
||||
# {'name': 'dswap_k', 'undef': ['COMPLEX'], 'def': ['DOUBLE'], 'addl': []},
|
||||
# {'name': 'qswap_k', 'undef': ['COMPLEX'], 'def': ['XDOUBLE'], 'addl': []},
|
||||
# {'name': 'cswap_k', 'undef': ['DOUBLE'], 'def': ['COMPLEX'], 'addl': []},
|
||||
# {'name': 'zswap_k', 'undef': [], 'def': ['COMPLEX', 'DOUBLE'], 'addl': []},
|
||||
# {'name': 'xswap_k', 'undef': [], 'def': ['COMPLEX', 'XDOUBLE'], 'addl': []},
|
||||
# {'name': 'srot_k',
|
||||
# 'undef': ['COMPLEX', 'COMPLEX', 'DOUBLE'],
|
||||
# 'def': [],
|
||||
# 'addl': [fma3_flag]},
|
||||
{'name': 'drot_k',
|
||||
'undef': ['COMPLEX', 'COMPLEX'],
|
||||
'def': ['DOUBLE'],
|
||||
'addl': [fma3_flag,
|
||||
'-DSMALL_MATRIX_OPT',
|
||||
'-DMAX_STACK_ALLOC=2048',
|
||||
'-Wall',
|
||||
'-m64',
|
||||
'-DF_INTERFACE_GFORT',
|
||||
'-fPIC',
|
||||
'-DSMP_SERVER',
|
||||
'-DNO_WARMUP',
|
||||
'-DMAX_CPU_NUMBER=12',
|
||||
'-DMAX_PARALLEL_NUMBER=1',
|
||||
'-DBUILD_SINGLE=1',
|
||||
'-DBUILD_DOUBLE=1',
|
||||
'-DBUILD_COMPLEX=1',
|
||||
'-DBUILD_COMPLEX16=1',
|
||||
'-msse3',
|
||||
'-mssse3',
|
||||
'-msse4.1',
|
||||
'-mavx',
|
||||
'-mavx2',
|
||||
'-UASMNAME',
|
||||
'-UASMFNAME',
|
||||
'-UNAME',
|
||||
'-UCNAME',
|
||||
'-UCHAR_NAME',
|
||||
'-UCHAR_CNAME',
|
||||
'-DASMNAME=drot_k',
|
||||
'-DASMFNAME=drot_k_',
|
||||
'-DNAME=drot_k_',
|
||||
'-DCNAME=drot_k',
|
||||
'-DCHAR_NAME="drot_k_"',
|
||||
'-DCHAR_CNAME="drot_k"',
|
||||
'-DNO_AFFINITY',
|
||||
'-DDOUBLE',
|
||||
'-UCOMPLEX',
|
||||
'-DCBLAS',
|
||||
]},
|
||||
# {'name': 'qrot_k',
|
||||
# 'undef': ['COMPLEX', 'COMPLEX'],
|
||||
# 'def': ['XDOUBLE'],
|
||||
# 'addl': []},
|
||||
# {'name': 'csrot_k',
|
||||
# 'undef': ['DOUBLE'],
|
||||
# 'def': ['COMPLEX', 'COMPLEX'],
|
||||
# 'addl': []},
|
||||
# {'name': 'zdrot_k',
|
||||
# 'undef': [],
|
||||
# 'def': ['COMPLEX', 'COMPLEX', 'DOUBLE'],
|
||||
# 'addl': []},
|
||||
# {'name': 'xqrot_k',
|
||||
# 'undef': [],
|
||||
# 'def': ['COMPLEX', 'COMPLEX', 'XDOUBLE'],
|
||||
# 'addl': []}
|
||||
]
|
||||
|
||||
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']
|
||||
}
|
||||
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 : _configs
|
||||
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
|
||||
current_def = {'c_args': _cargs, 'name': cfg['name'], 'src': src}
|
||||
message(current_def)
|
||||
kernel_confs += current_def
|
||||
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
|
||||
_kern_libs = []
|
||||
foreach conf: kernel_confs
|
||||
_kern_libs += static_library(
|
||||
conf['name'],
|
||||
conf['src'],
|
||||
include_directories: _inc,
|
||||
c_args: conf['c_args'],
|
||||
)
|
||||
endforeach
|
||||
|
||||
# _static_libs = []
|
||||
# foreach conf: kernel_confs
|
||||
# _static_libs += static_library(
|
||||
# conf['name'],
|
||||
# conf['src'],
|
||||
# include_directories: _inc,
|
||||
# c_args: conf['defs'],
|
||||
# )
|
||||
# endforeach
|
||||
_kern = static_library('_kern',
|
||||
link_whole: _kern_libs)
|
||||
|
|
|
@ -139,5 +139,8 @@ configure_file(output : 'getarch_conf.h',
|
|||
# Ignoring all the hostarch checks and conflicts for arch in BSD for now
|
||||
_inc = include_directories('.')
|
||||
# subdir('lapack-netlib')
|
||||
# subdir('interface')
|
||||
# subdir('kernel')
|
||||
subdir('interface')
|
||||
subdir('kernel')
|
||||
|
||||
_openblas = static_library('openblas',
|
||||
link_whole: [ _interface, _kern])
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
#include <cblas.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main() {
|
||||
int n = 4;
|
||||
double x[] = {1, 2, 3, 4};
|
||||
double y[] = {5, 6, 7, 8};
|
||||
double c = 0.5; // cosine of the angle
|
||||
double s = 0.5; // sine of the angle
|
||||
|
||||
// Apply the rotation
|
||||
cblas_drot(n, x, 1, y, 1, c, s);
|
||||
|
||||
// Print the results
|
||||
printf("Resulting vectors:\n");
|
||||
printf("x: ");
|
||||
for (int i = 0; i < n; i++) {
|
||||
printf("%f ", x[i]);
|
||||
}
|
||||
printf("\n");
|
||||
printf("y: ");
|
||||
for (int i = 0; i < n; i++) {
|
||||
printf("%f ", y[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue