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'])
|
# sblas3_srcs += files(['sbgemm.c', 'sbgemmt.c'])
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
interface_confs += {
|
||||||
|
'name': 'cblas_drot',
|
||||||
|
'defs': ['-DCBLAS'],
|
||||||
|
'src': files('rot.c')
|
||||||
|
}
|
||||||
|
|
||||||
_static_libs = []
|
_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(
|
_static_libs += static_library(
|
||||||
conf['name'],
|
'cblas_drot',
|
||||||
conf['src'],
|
'rot.c',
|
||||||
include_directories: _inc,
|
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',
|
_interface = static_library('_interface',
|
||||||
link_whole: _static_libs)
|
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 = []
|
kernel_confs = []
|
||||||
|
|
||||||
# For the modes array, the following mapping is used for c_args:
|
|
||||||
# undef --> -Uwhatever
|
|
||||||
# def --> -Dwhatever
|
|
||||||
foreach _kop : base_kops
|
foreach _kop : base_kops
|
||||||
foreach pkey, pval : _kop['modes']
|
base = _kop['base']
|
||||||
# TODO: This srcs should be in files() after this is ready
|
modes = _kop['modes']
|
||||||
# dictionaries with files can't be printed with message
|
foreach mode, details : modes
|
||||||
kcfg = {
|
dir = details['dir']
|
||||||
'src': pval['dir'] + '/' + pval['kernel'],
|
kernel = details['kernel']
|
||||||
}
|
exts = details['exts']
|
||||||
if pval.has_key('addl')
|
foreach ext : exts
|
||||||
kcfg += {'addl': pval['addl']}
|
src = join_paths(dir, kernel)
|
||||||
endif
|
foreach cfg : _configs
|
||||||
if 's' == pkey
|
if mode + base + ext == cfg['name']
|
||||||
foreach ext : pval['exts']
|
defs = cfg.get('def', [])
|
||||||
kcfg += {'name': pkey + _kop['base'] + ext}
|
undefs = cfg.get('undef', [])
|
||||||
# Level 1
|
addl = cfg.get('addl', [])
|
||||||
if '_k' == ext
|
_cargs = []
|
||||||
kcfg += {
|
foreach _d : defs
|
||||||
'undef': ['COMPLEX', 'DOUBLE']
|
_cargs += ('-D' + _d)
|
||||||
}
|
endforeach
|
||||||
endif
|
foreach _u : undefs
|
||||||
# Level 2
|
_cargs += ('-U' + _u)
|
||||||
if '_n' == ext
|
endforeach
|
||||||
kcfg += {
|
foreach _addl : addl
|
||||||
'undef': ['DOUBLE', 'COMPLEX', 'TRANS'],
|
_cargs += addl
|
||||||
}
|
endforeach
|
||||||
endif
|
current_def = {'c_args': _cargs, 'name': cfg['name'], 'src': src}
|
||||||
if '_t' == ext
|
message(current_def)
|
||||||
kcfg += {
|
kernel_confs += current_def
|
||||||
'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
|
endif
|
||||||
endforeach
|
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
|
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
|
||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
# foreach root : blas1_roots
|
_kern_libs = []
|
||||||
# fname = root + '.S'
|
foreach conf: kernel_confs
|
||||||
# defs = []
|
_kern_libs += static_library(
|
||||||
# foreach prec : real_kinds
|
conf['name'],
|
||||||
# name = prec + fname + '_k'
|
conf['src'],
|
||||||
# kernel_confs += {'defs': defs, 'name': name, 'src': fname}
|
include_directories: _inc,
|
||||||
# endforeach
|
c_args: conf['c_args'],
|
||||||
# endforeach
|
)
|
||||||
|
endforeach
|
||||||
|
|
||||||
# _static_libs = []
|
_kern = static_library('_kern',
|
||||||
# foreach conf: kernel_confs
|
link_whole: _kern_libs)
|
||||||
# _static_libs += static_library(
|
|
||||||
# conf['name'],
|
|
||||||
# conf['src'],
|
|
||||||
# include_directories: _inc,
|
|
||||||
# c_args: conf['defs'],
|
|
||||||
# )
|
|
||||||
# endforeach
|
|
||||||
|
|
|
@ -139,5 +139,8 @@ configure_file(output : 'getarch_conf.h',
|
||||||
# Ignoring all the hostarch checks and conflicts for arch in BSD for now
|
# Ignoring all the hostarch checks and conflicts for arch in BSD for now
|
||||||
_inc = include_directories('.')
|
_inc = include_directories('.')
|
||||||
# subdir('lapack-netlib')
|
# subdir('lapack-netlib')
|
||||||
# subdir('interface')
|
subdir('interface')
|
||||||
# subdir('kernel')
|
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