BLD: `test` port

This commit is contained in:
Mateusz Sokół 2024-07-25 22:03:30 +00:00
parent fa7ba3121c
commit 3bc55f15f0
5 changed files with 253 additions and 20 deletions

View File

@ -143,6 +143,11 @@ driver_kops = [
'_LN', '_LT', '']},
}
},
{ 'base': 'syrk_thread',
'sources': {
'syrk_thread.c': {'mode': [''], 'exts': ['']}
}
},
{ 'base': '?syrk_kernel',
'sources': {
'syrk_kernel.c': {'mode': ['s', 'd', # 'q'],
@ -158,6 +163,12 @@ driver_kops = [
'_LN', '_LT']},
}
},
{ 'base': '?syr2k_kernel',
'sources': {
'syr2k_kernel.c': {'mode': ['s', 'd', 'c', 'z'],
'exts': ['_U', '_L']},
}
},
{ 'base': '?hemm',
'sources': {
'zhemm_k.c': {'mode': ['c', 'z'], # 'x'],

View File

@ -638,37 +638,163 @@ base_kops = [
's': {'exts': {
# TODO(rg): These actually use $(SGEMM_UNROLL_M) to choose the size
'_iunucopy': {'dir': 'generic', 'kernel': 'trmm_uncopy_8.c',
'addl': ['-UOUTER', '-ULOWER', '-DUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-UOUTER', '-ULOWER', '-DUNIT']},
'_iunncopy': {'dir': 'generic', 'kernel': 'trmm_uncopy_8.c',
'addl': ['-UOUTER', '-ULOWER', '-UUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-UOUTER', '-ULOWER', '-UUNIT']},
'_ilnucopy': {'dir': 'generic', 'kernel': 'trmm_lncopy_8.c',
'addl': ['-UOUTER', '-DLOWER', '-DUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-UOUTER', '-DLOWER', '-DUNIT']},
'_ilnncopy': {'dir': 'generic', 'kernel': 'trmm_lncopy_8.c',
'addl': ['-UOUTER', '-DLOWER', '-UUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-UOUTER', '-DLOWER', '-UUNIT']},
'_iutucopy': {'dir': 'generic', 'kernel': 'trmm_utcopy_8.c',
'addl': ['-UOUTER', '-ULOWER', '-DUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-UOUTER', '-ULOWER', '-DUNIT']},
'_iutncopy': {'dir': 'generic', 'kernel': 'trmm_utcopy_8.c',
'addl': ['-UOUTER', '-ULOWER', '-UUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-UOUTER', '-ULOWER', '-UUNIT']},
'_iltucopy': {'dir': 'generic', 'kernel': 'trmm_ltcopy_8.c',
'addl': ['-UOUTER', '-DLOWER', '-DUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-UOUTER', '-DLOWER', '-DUNIT']},
'_iltncopy': {'dir': 'generic', 'kernel': 'trmm_ltcopy_8.c',
'addl': ['-UOUTER', '-DLOWER', '-UUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-UOUTER', '-DLOWER', '-UUNIT']},
'_ounucopy': {'dir': 'generic', 'kernel': 'trmm_uncopy_4.c',
'addl': ['-DOUTER', '-ULOWER', '-DUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-DOUTER', '-ULOWER', '-DUNIT']},
'_ounncopy': {'dir': 'generic', 'kernel': 'trmm_uncopy_4.c',
'addl': ['-DOUTER', '-ULOWER', '-UUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-DOUTER', '-ULOWER', '-UUNIT']},
'_olnucopy': {'dir': 'generic', 'kernel': 'trmm_lncopy_4.c',
'addl': ['-DOUTER', '-DLOWER', '-DUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-DOUTER', '-DLOWER', '-DUNIT']},
'_olnncopy': {'dir': 'generic', 'kernel': 'trmm_lncopy_4.c',
'addl': ['-DOUTER', '-DLOWER', '-UUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-DOUTER', '-DLOWER', '-UUNIT']},
'_outucopy': {'dir': 'generic', 'kernel': 'trmm_utcopy_4.c',
'addl': ['-DOUTER', '-ULOWER', '-DUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-DOUTER', '-ULOWER', '-DUNIT']},
'_outncopy': {'dir': 'generic', 'kernel': 'trmm_utcopy_4.c',
'addl': ['-DOUTER', '-ULOWER', '-UUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-DOUTER', '-ULOWER', '-UUNIT']},
'_oltucopy': {'dir': 'generic', 'kernel': 'trmm_ltcopy_4.c',
'addl': ['-DOUTER', '-DLOWER', '-DUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-DOUTER', '-DLOWER', '-DUNIT']},
'_oltncopy': {'dir': 'generic', 'kernel': 'trmm_ltcopy_4.c',
'addl': ['-DOUTER', '-DLOWER', '-UUNIT']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-DOUTER', '-DLOWER', '-UUNIT']},
}},
'd': {'exts': {
'_iunucopy': {'dir': 'generic', 'kernel': 'trmm_uncopy_8.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-UOUTER', '-ULOWER', '-DUNIT']},
'_iunncopy': {'dir': 'generic', 'kernel': 'trmm_uncopy_8.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-UOUTER', '-ULOWER', '-UUNIT']},
'_ilnucopy': {'dir': 'generic', 'kernel': 'trmm_lncopy_8.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-UOUTER', '-DLOWER', '-DUNIT']},
'_ilnncopy': {'dir': 'generic', 'kernel': 'trmm_lncopy_8.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-UOUTER', '-DLOWER', '-UUNIT']},
'_iutucopy': {'dir': 'generic', 'kernel': 'trmm_utcopy_8.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-UOUTER', '-ULOWER', '-DUNIT']},
'_iutncopy': {'dir': 'generic', 'kernel': 'trmm_utcopy_8.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-UOUTER', '-ULOWER', '-UUNIT']},
'_iltucopy': {'dir': 'generic', 'kernel': 'trmm_ltcopy_8.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-UOUTER', '-DLOWER', '-DUNIT']},
'_iltncopy': {'dir': 'generic', 'kernel': 'trmm_ltcopy_8.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-UOUTER', '-DLOWER', '-UUNIT']},
'_ounucopy': {'dir': 'generic', 'kernel': 'trmm_uncopy_4.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-DOUTER', '-ULOWER', '-DUNIT']},
'_ounncopy': {'dir': 'generic', 'kernel': 'trmm_uncopy_4.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-DOUTER', '-ULOWER', '-UUNIT']},
'_olnucopy': {'dir': 'generic', 'kernel': 'trmm_lncopy_4.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-DOUTER', '-DLOWER', '-DUNIT']},
'_olnncopy': {'dir': 'generic', 'kernel': 'trmm_lncopy_4.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-DOUTER', '-DLOWER', '-UUNIT']},
'_outucopy': {'dir': 'generic', 'kernel': 'trmm_utcopy_4.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-DOUTER', '-ULOWER', '-DUNIT']},
'_outncopy': {'dir': 'generic', 'kernel': 'trmm_utcopy_4.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-DOUTER', '-ULOWER', '-UUNIT']},
'_oltucopy': {'dir': 'generic', 'kernel': 'trmm_ltcopy_4.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-DOUTER', '-DLOWER', '-DUNIT']},
'_oltncopy': {'dir': 'generic', 'kernel': 'trmm_ltcopy_4.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-DOUTER', '-DLOWER', '-UUNIT']},
}},
'c': {'exts': {
'_iunucopy': {'dir': 'generic', 'kernel': 'ztrmm_uncopy_8.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER', '-DUNIT']},
'_iunncopy': {'dir': 'generic', 'kernel': 'ztrmm_uncopy_8.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER', '-UUNIT']},
'_ilnucopy': {'dir': 'generic', 'kernel': 'ztrmm_lncopy_8.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER', '-DUNIT']},
'_ilnncopy': {'dir': 'generic', 'kernel': 'ztrmm_lncopy_8.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER', '-UUNIT']},
'_iutucopy': {'dir': 'generic', 'kernel': 'ztrmm_utcopy_8.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER', '-DUNIT']},
'_iutncopy': {'dir': 'generic', 'kernel': 'ztrmm_utcopy_8.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER', '-UUNIT']},
'_iltucopy': {'dir': 'generic', 'kernel': 'ztrmm_ltcopy_8.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER', '-DUNIT']},
'_iltncopy': {'dir': 'generic', 'kernel': 'ztrmm_ltcopy_8.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER', '-UUNIT']},
'_ounucopy': {'dir': 'generic', 'kernel': 'ztrmm_uncopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER', '-DUNIT']},
'_ounncopy': {'dir': 'generic', 'kernel': 'ztrmm_uncopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER', '-UUNIT']},
'_olnucopy': {'dir': 'generic', 'kernel': 'ztrmm_lncopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER', '-DUNIT']},
'_olnncopy': {'dir': 'generic', 'kernel': 'ztrmm_lncopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER', '-UUNIT']},
'_outucopy': {'dir': 'generic', 'kernel': 'ztrmm_utcopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER', '-DUNIT']},
'_outncopy': {'dir': 'generic', 'kernel': 'ztrmm_utcopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER', '-UUNIT']},
'_oltucopy': {'dir': 'generic', 'kernel': 'ztrmm_ltcopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER', '-DUNIT']},
'_oltncopy': {'dir': 'generic', 'kernel': 'ztrmm_ltcopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER', '-UUNIT']},
}},
'z': {'exts': {
'_iunucopy': {'dir': 'generic', 'kernel': 'ztrmm_uncopy_8.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER', '-DUNIT']},
'_iunncopy': {'dir': 'generic', 'kernel': 'ztrmm_uncopy_8.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER', '-UUNIT']},
'_ilnucopy': {'dir': 'generic', 'kernel': 'ztrmm_lncopy_8.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER', '-DUNIT']},
'_ilnncopy': {'dir': 'generic', 'kernel': 'ztrmm_lncopy_8.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER', '-UUNIT']},
'_iutucopy': {'dir': 'generic', 'kernel': 'ztrmm_utcopy_8.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER', '-DUNIT']},
'_iutncopy': {'dir': 'generic', 'kernel': 'ztrmm_utcopy_8.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER', '-UUNIT']},
'_iltucopy': {'dir': 'generic', 'kernel': 'ztrmm_ltcopy_8.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER', '-DUNIT']},
'_iltncopy': {'dir': 'generic', 'kernel': 'ztrmm_ltcopy_8.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER', '-UUNIT']},
'_ounucopy': {'dir': 'generic', 'kernel': 'ztrmm_uncopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER', '-DUNIT']},
'_ounncopy': {'dir': 'generic', 'kernel': 'ztrmm_uncopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER', '-UUNIT']},
'_olnucopy': {'dir': 'generic', 'kernel': 'ztrmm_lncopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER', '-DUNIT']},
'_olnncopy': {'dir': 'generic', 'kernel': 'ztrmm_lncopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER', '-UUNIT']},
'_outucopy': {'dir': 'generic', 'kernel': 'ztrmm_utcopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER', '-DUNIT']},
'_outncopy': {'dir': 'generic', 'kernel': 'ztrmm_utcopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER', '-UUNIT']},
'_oltucopy': {'dir': 'generic', 'kernel': 'ztrmm_ltcopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER', '-DUNIT']},
'_oltncopy': {'dir': 'generic', 'kernel': 'ztrmm_ltcopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER', '-UUNIT']},
}},
},
},
{ 'base': '?hemm',
'modes': {
'c': {'exts': {
'_iutcopy': {'dir': 'generic', 'kernel': 'zhemm_utcopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER']},
'_iltcopy': {'dir': 'generic', 'kernel': 'zhemm_utcopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER']},
'_outcopy': {'dir': 'generic', 'kernel': 'zhemm_utcopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER']},
'_oltcopy': {'dir': 'generic', 'kernel': 'zhemm_utcopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER']},
}},
'z': {'exts': {
'_iutcopy': {'dir': 'generic', 'kernel': 'zhemm_utcopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER']},
'_iltcopy': {'dir': 'generic', 'kernel': 'zhemm_utcopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER']},
'_outcopy': {'dir': 'generic', 'kernel': 'zhemm_utcopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER']},
'_oltcopy': {'dir': 'generic', 'kernel': 'zhemm_utcopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER']},
}},
},
},
@ -856,13 +982,43 @@ base_kops = [
's': {'exts': {
# TODO(rg): These actually use $(SGEMM_UNROLL_M) to choose the size
'_iutcopy': {'dir': 'generic', 'kernel': 'symm_ucopy_8.c',
'addl': ['-UOUTER', '-ULOWER']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-UOUTER', '-ULOWER']},
'_iltcopy': {'dir': 'generic', 'kernel': 'symm_lcopy_8.c',
'addl': ['-UOUTER', '-DLOWER']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-UOUTER', '-DLOWER']},
'_outcopy': {'dir': 'generic', 'kernel': 'symm_ucopy_4.c',
'addl': ['-DOUTER', '-ULOWER']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-DOUTER', '-ULOWER']},
'_oltcopy': {'dir': 'generic', 'kernel': 'symm_lcopy_4.c',
'addl': ['-DOUTER', '-DLOWER']},
'addl': ['-UDOUBLE', '-UCOMPLEX', '-DOUTER', '-DLOWER']},
}},
'd': {'exts': {
'_iutcopy': {'dir': 'generic', 'kernel': 'symm_ucopy_8.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-UOUTER', '-ULOWER']},
'_iltcopy': {'dir': 'generic', 'kernel': 'symm_lcopy_8.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-UOUTER', '-DLOWER']},
'_outcopy': {'dir': 'generic', 'kernel': 'symm_ucopy_4.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-DOUTER', '-ULOWER']},
'_oltcopy': {'dir': 'generic', 'kernel': 'symm_lcopy_4.c',
'addl': ['-DDOUBLE', '-UCOMPLEX', '-DOUTER', '-DLOWER']},
}},
'c': {'exts': {
'_iutcopy': {'dir': 'generic', 'kernel': 'zsymm_ucopy_8.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER']},
'_iltcopy': {'dir': 'generic', 'kernel': 'zsymm_lcopy_8.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER']},
'_outcopy': {'dir': 'generic', 'kernel': 'zsymm_ucopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER']},
'_oltcopy': {'dir': 'generic', 'kernel': 'zsymm_lcopy_4.c',
'addl': ['-UDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER']},
}},
'z': {'exts': {
'_iutcopy': {'dir': 'generic', 'kernel': 'zsymm_ucopy_8.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-ULOWER']},
'_iltcopy': {'dir': 'generic', 'kernel': 'zsymm_lcopy_8.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-UOUTER', '-DLOWER']},
'_outcopy': {'dir': 'generic', 'kernel': 'zsymm_ucopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-ULOWER']},
'_oltcopy': {'dir': 'generic', 'kernel': 'zsymm_lcopy_4.c',
'addl': ['-DDOUBLE', '-DCOMPLEX', '-DOUTER', '-DLOWER']},
}},
},
},

View File

@ -552,5 +552,6 @@ pkg.generate(_openblas,
)
if build_testing
subdir('test')
subdir('utest')
endif

40
test/meson.build Normal file
View File

@ -0,0 +1,40 @@
_test_input_array = [
{'id': 'sblat1', 'has_dat': false},
{'id': 'sblat2', 'has_dat': true},
{'id': 'sblat3', 'has_dat': true},
{'id': 'dblat1', 'has_dat': false},
{'id': 'dblat2', 'has_dat': true},
{'id': 'dblat3', 'has_dat': true},
{'id': 'cblat1', 'has_dat': false},
{'id': 'cblat2', 'has_dat': true},
{'id': 'cblat3', 'has_dat': true},
{'id': 'cblat3_3m', 'has_dat': true},
{'id': 'zblat1', 'has_dat': false},
{'id': 'zblat2', 'has_dat': true},
{'id': 'zblat3', 'has_dat': true},
{'id': 'zblat3_3m', 'has_dat': true},
]
_test_runner = executable('test_runner', sources: ['test_runner.c'], install: false)
foreach _test : _test_input_array
test_id = _test['id']
executable(
test_id,
sources: f'@test_id@.f',
link_with: [_openblas],
dependencies: [dependency('threads')],
)
_args = [f'./@test_id@']
if _test['has_dat']
_args += [ meson.current_source_dir() / f'@test_id@.dat']
endif
test(
test_id,
_test_runner,
args: _args,
workdir: meson.current_build_dir(),
)
endforeach

25
test/test_runner.c Normal file
View File

@ -0,0 +1,25 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc != 2 && argc != 3) {
fprintf(stderr, "Usage: %s <executable> <optional_input_file>\n", argv[0]);
return EXIT_FAILURE;
}
char command[1024];
if (argc == 2) {
snprintf(command, sizeof(command), "%s", argv[1]);
} else {
snprintf(command, sizeof(command), "%s < %s", argv[1], argv[2]);
}
int result = system(command);
if (result != 0) {
fprintf(stderr, "Error: Command '%s' failed with return code %d.\n", command, result);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}