Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

blasfeo_dtrmm_rltn not implemented #162

Open
markisus opened this issue Jun 9, 2022 · 1 comment
Open

blasfeo_dtrmm_rltn not implemented #162

markisus opened this issue Jun 9, 2022 · 1 comment

Comments

@markisus
Copy link

markisus commented Jun 9, 2022

I don't believe blasfeo_dtrmm_rltn declared in blasfeo_d_blasfeo_api.h is actually implemented?

Here are the relevant build variables I used for compilation, taken from CMakeCache.txt

//Reference blas to use
EXTERNAL_BLAS:STRING=0

//Compile external dependencies in BLASFEO
EXT_DEP:BOOL=ON

//Standard fortran BLAS API
FORTRAN_BLAS_API:BOOL=OFF

//Maximum k value using stack memory
K_MAX_STACK:STRING=300

//Linear algebra backend
LA:STRING=HIGH_PERFORMANCE

//Matrix Format internally used in blasfeo_{d,s}mat struct
MF:STRING=PANELMAJ

//Target architecture
TARGET:STRING=GENERIC

//Use C99 extension to math library
USE_C99_MATH:BOOL=ON

Running nm on the resulting library reveals no code for the function in question. There is, however, the "ref" version.

nm libblasfeo.a | grep dtrmm_rltn

000000000000fb30 T blasfeo_ref_dtrmm_rltn
                 U blasfeo_cm_dtrmm_rltn
000000000000a730 T blasfeo_cm_dtrmm_rltn
0000000000006a70 T blasfeo_hp_cm_dtrmm_rltn
@giaf
Copy link
Owner

giaf commented Jun 29, 2022

Yes you are correct, all 16 versions of dtrmm are implemented for the reference back end (so they are there is you choose LA=REFERENCE), and they are also all implemented for the column-major matrix format (so when MF=COLMAJ), but only two of them are actually implemented when the high-performance back end and the panel-major matrix format are selected.

What is usually done in these cases is to implement a fallback to the reference back end when this is available, and exit when not.
Or clearly to implement and optimize all routines for all targets, but this is a lot of work and rather done when something is needed :p

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants