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:
Rohit Goswami 2024-03-31 23:11:28 +00:00 committed by Mateusz Sokół
parent 523a57f985
commit 5a1dba3346
4 changed files with 575 additions and 366 deletions

View File

@ -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
_static_libs += static_library(
conf['name'],
conf['src'],
# foreach conf: interface_confs
# _static_libs += static_library(
# conf['name'],
# conf['src'],
# include_directories: _inc,
# c_args: conf['defs'],
# )
# endforeach
_static_libs += static_library(
'cblas_drot',
'rot.c',
include_directories: _inc,
c_args: conf['defs'],
)
endforeach
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',],
)
_interface = static_library('_interface',
link_whole: _static_libs)

View File

@ -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)

View File

@ -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])

29
trial.c Normal file
View File

@ -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;
}