CBLAS/include/cblas.h(3)
๐ CBLAS/include/cblas.h โ Library Functions Manual ๐
okay so bestie, buckle up, because this is the header that runs the whole CBLAS show โจ It lives in the Library Functions Manual, and it's basically the blueprint where every type, macro and enum gets defined before the actual BLAS functions get to do their thing. No cap.
๐ธ NAME ๐ธ
CBLAS/include/cblas.h โ the one, the only, the header file herself ๐
๐ SYNOPSIS ๐
So when you wanna pull this whole vibe into your code, you do:
#include <stddef.h>
#include <stdint.h>
#include <inttypes.h>
#include 'cblas_mangling.h'
(the last one is literally in single quotes in the original, yes, and we're keeping it exactly like that โ character for character, periodt ๐ซถ)
โจ Macros โจ
These are the little shortcuts that make everything else work. Obsessed with them honestly:
#define CBLAS_INDEX size_t /* this may vary between platforms */โ this is the index type, and heads up, it'ssize_tbut it may vary between platforms, so don't go assuming it's always the same everywhere ๐ฅ#define CBLAS_INT int32_tโ the integer type CBLAS rolls with. It'sint32_t, no debate.#define CBLAS_IFMT PRId32โ the matching format specifier forCBLAS_INT, so yourprintfcalls don't get weird on you ๐#define CBLAS_ORDER CBLAS_LAYOUTโ and the comment on this one literally says it's "this for backward compatibility with CBLAS_ORDER" โ so it's the old name hanging around like that one friend who never left the group chat. Keep it for compat, bestie ๐ซถ#define API_SUFFIX(a)โ an empty macro, just sitting there doing its thing. It takesaand expands to... nothing. Iconic minimalism honestly.
๐ฆ Typedefs ๐ฆ
The typedefs are basically just the enums wearing a nicer outfit โ they let you write the type name without the enum keyword. Very main character energy:
typedef enum CBLAS_LAYOUT CBLAS_LAYOUTtypedef enum CBLAS_TRANSPOSE CBLAS_TRANSPOSEtypedef enum CBLAS_UPLO CBLAS_UPLOtypedef enum CBLAS_DIAG CBLAS_DIAGtypedef enum CBLAS_SIDE CBLAS_SIDE
Same name on both sides, yes, that's intentional, don't @ me ๐ญ
๐ Enumerations ๐
now THIS is where the actual values live. Every single one, with its exact number, because numbers are sacred here โญ
๐ enum CBLAS_LAYOUT
Tells CBLAS how your matrix is laid out in memory. Two options, and they're lowkey the whole personality of your data:
CblasRowMajor = 101โ rows first, one after another ๐CblasColMajor = 102โ columns first, slay ๐
enum CBLAS_LAYOUT { CblasRowMajor =101, CblasColMajor =102 }
๐ธ enum CBLAS_TRANSPOSE
Do you want your matrix as-is, transposed, or transposed and conjugated? Yes, all three are real:
CblasNoTrans = 111โ leave it alone, don't touch it ๐CblasTrans = 112โ flip it ๐CblasConjTrans = 113โ flip it and conjugate it, fancy โจ
enum CBLAS_TRANSPOSE { CblasNoTrans =111, CblasTrans =112, CblasConjTrans =113 }
๐ง enum CBLAS_UPLO
Which triangle of the matrix are we even talking about? Because bestie, sometimes it's only half:
CblasUpper = 121โ the upper triangle ๐CblasLower = 122โ the lower triangle ๐ซถ
enum CBLAS_UPLO { CblasUpper =121, CblasLower =122 }
๐ enum CBLAS_DIAG
Is the diagonal all ones, or is it whatever you actually put there? Big question:
CblasNonUnit = 131โ the diagonal is not all ones, it's real values ๐CblasUnit = 132โ the diagonal is assumed to be all ones, so don't bother storing it โจ
enum CBLAS_DIAG { CblasNonUnit =131, CblasUnit =132 }
๐ฅ enum CBLAS_SIDE
For the operations that take a matrix from the left or the right โ which side are we multiplying on?
CblasLeft = 141โ left side ๐CblasRight = 142โ right side ๐
enum CBLAS_SIDE { CblasLeft =141, CblasRight =142 }
and that's part one bestie โ the types are all set up, the values are all locked in, and the vibe check passed with flying colors ๐ more coming, don't go anywhere ๐ฆ
๐ the tiny magnitude helpers
double cblas_dcabs1 (const void *z)
float cblas_scabs1 (const void *c)
okay so these two are the littest helpers on the whole page fr fr. Both take a const void * โ one's named z, one's named c โ and hand you back a real number: a double for cblas_dcabs1, a float for cblas_scabs1. That's the whole personality. Iconic, minimal, no notes. ๐
โจ dot dot dot (the products)
float cblas_sdsdot (const CBLAS_INT N, const float alpha, const float *X, const CBLAS_INT incX, const float *Y, const CBLAS_INT incY)
double cblas_dsdot (const CBLAS_INT N, const float *X, const CBLAS_INT incX, const float *Y, const CBLAS_INT incY)
float cblas_sdot (const CBLAS_INT N, const float *X, const CBLAS_INT incX, const float *Y, const CBLAS_INT incY)
double cblas_ddot (const CBLAS_INT N, const double *X, const CBLAS_INT incX, const double *Y, const CBLAS_INT incY)
void cblas_cdotu_sub (const CBLAS_INT N, const void *X, const CBLAS_INT incX, const void *Y, const CBLAS_INT incY, void *dotu)
void cblas_cdotc_sub (const CBLAS_INT N, const void *X, const CBLAS_INT incX, const void *Y, const CBLAS_INT incY, void *dotc)
void cblas_zdotu_sub (const CBLAS_INT N, const void *X, const CBLAS_INT incX, const void *Y, const CBLAS_INT incY, void *dotu)
void cblas_zdotc_sub (const CBLAS_INT N, const void *X, const CBLAS_INT incX, const void *Y, const CBLAS_INT incY, void *dotc)
the way there are like eight of these ๐ญ bestie, the family tree is thriving. Notice how the first four literally just return your answer (a float or a double) โ so casual of them โ while the four _sub ones make you pass in dotu / dotc and write the result out through the pointer. different vibe, same job.
oh and cblas_sdsdot is the extra one: it's got that bonus alpha (a float) sitting there in position two, plus X and Y are both const float * even though it hands back a double. cblas_dsdot has the same float inputs and double output but no alpha. not me noticing that detail immediately ๐
๐ฆ norms and absolute-value sums
float cblas_snrm2 (const CBLAS_INT N, const float *X, const CBLAS_INT incX)
float cblas_sasum (const CBLAS_INT N, const float *X, const CBLAS_INT incX)
double cblas_dnrm2 (const CBLAS_INT N, const double *X, const CBLAS_INT incX)
double cblas_dasum (const CBLAS_INT N, const double *X, const CBLAS_INT incX)
float cblas_scnrm2 (const CBLAS_INT N, const void *X, const CBLAS_INT incX)
float cblas_scasum (const CBLAS_INT N, const void *X, const CBLAS_INT incX)
double cblas_dznrm2 (const CBLAS_INT N, const void *X, const CBLAS_INT incX)
double cblas_dzasum (const CBLAS_INT N, const void *X, const CBLAS_INT incX)
eight of them, all matching the same shape: N, then your vector, then incX. the nrm2 girlies and the asum girlies. real versions (s, d) take typed pointers, complex versions (sc, dz) take const void * because they're mysterious and too good for a normal type ๐
๐ฅ index of the biggest one
CBLAS_INDEX cblas_isamax (const CBLAS_INT N, const float *X, const CBLAS_INT incX)
CBLAS_INDEX cblas_idamax (const CBLAS_INT N, const double *X, const CBLAS_INT incX)
CBLAS_INDEX cblas_icamax (const CBLAS_INT N, const void *X, const CBLAS_INT incX)
CBLAS_INDEX cblas_izamax (const CBLAS_INT N, const void *X, const CBLAS_INT incX)
these four hand you back a CBLAS_INDEX instead of a float, which is so them. same three args every time: N, X, incX. slay. ๐ซถ
๐ swap, copy, axpy (a.k.a. the level-1 workhorses)
void cblas_sswap (const CBLAS_INT N, float *X, const CBLAS_INT incX, float *Y, const CBLAS_INT incY)
void cblas_scopy (const CBLAS_INT N, const float *X, const CBLAS_INT incX, float *Y, const CBLAS_INT incY)
void cblas_saxpy (const CBLAS_INT N, const float alpha, const float *X, const CBLAS_INT incX, float *Y, const CBLAS_INT incY)
void cblas_dswap (const CBLAS_INT N, double *X, const CBLAS_INT incX, double *Y, const CBLAS_INT incY)
void cblas_dcopy (const CBLAS_INT N, const double *X, const CBLAS_INT incX, double *Y, const CBLAS_INT incY)
void cblas_daxpy (const CBLAS_INT N, const double alpha, const double *X, const CBLAS_INT incX, double *Y, const CBLAS_INT incY)
void cblas_cswap (const CBLAS_INT N, void *X, const CBLAS_INT incX, void *Y, const CBLAS_INT incY)
void cblas_ccopy (const CBLAS_INT N, const void *X, const CBLAS_INT incX, void *Y, const CBLAS_INT incY)
void cblas_caxpy (const CBLAS_INT N, const void *alpha, const void *X, const CBLAS_INT incX, void *Y, const CBLAS_INT incY)
void cblas_zswap (const CBLAS_INT N, void *X, const CBLAS_INT incX, void *Y, const CBLAS_INT incY)
void cblas_zcopy (const CBLAS_INT N, const void *X, const CBLAS_INT incX, void *Y, const CBLAS_INT incY)
void cblas_zaxpy (const CBLAS_INT N, const void *alpha, const void *X, const CBLAS_INT incX, void *Y, const CBLAS_INT incY)
look at the consts bestie. in the copy and axpy rows, X is const and Y is not โ that's the code literally telling you which one is the input and which one gets written to ๐ meanwhile in swap neither is const, because both get rewritten. the audacity. also notice the complex ones (c, z) use void * for everything and alpha is a void * too, while the real ones use plain float / double alphas. consistent queen behaviour ๐
๐ธ modified rotations
void cblas_srotmg (float *d1, float *d2, float *b1, const float b2, float *P)
void cblas_srotm (const CBLAS_INT N, float *X, const CBLAS_INT incX, float *Y, const CBLAS_INT incY, const float *P)
void cblas_drotmg (double *d1, double *d2, double *b1, const double b2, double *P)
void cblas_drotm (const CBLAS_INT N, double *X, const CBLAS_INT incX, double *Y, const CBLAS_INT incY, const double *P)
the *mg ones are the setup girls โ three pointers, one lone const scalar (b2), and P at the end. the *m ones are the apply girls โ N, X, incX, Y, incY, and P again but const this time. see how they pair up? so cute. ๐ง
โญ scaling
void cblas_sscal (const CBLAS_INT N, const float alpha, float *X, const CBLAS_INT incX)
void cblas_dscal (const CBLAS_INT N, const double alpha, double *X, const CBLAS_INT incX)
void cblas_cscal (const CBLAS_INT N, const void *alpha, void *X, const CBLAS_INT incX)
void cblas_zscal (const CBLAS_INT N, const void *alpha, void *X, const CBLAS_INT incX)
void cblas_csscal (const CBLAS_INT N, const float alpha, void *X, const CBLAS_INT incX)
void cblas_zdscal (const CBLAS_INT N, const double alpha, void *X, const CBLAS_INT incX)
the regular cscal / zscal take a const void *alpha, but the double-letter ones (csscal, zdscal) switch alpha to a real type โ float and double respectively โ while X stays void *. tiny detail, huge difference, iykyk ๐
๐ givens rotations (the setup)
void cblas_srotg (float *a, float *b, float *c, float *s)
void cblas_drotg (double *a, double *b, double *c, double *s)
void cblas_crotg (void *a, void *b, float *c, void *s)
void cblas_zrotg (void *a, void *b, double *c, void *s)
four pointers, no return value, vibes immaculate. and look โ in the complex ones (crotg, zrotg), c is a real pointer (float * / double *) while everything else is void *. that's not a typo, that's just how she is ๐
๐ givens rotations (the apply)
void cblas_srot (const CBLAS_INT N, float *X, const CBLAS_INT incX, float *Y, const CBLAS_INT incY, const float c, const float s)
void cblas_drot (const CBLAS_INT N, double *X, const CBLAS_INT incX, double *Y, const CBLAS_INT incY, const double c, const double s)
void cblas_csrot (const CBLAS_INT N, void *X, const CBLAS_INT incX, void *Y, const CBLAS_INT incY, const float c, const float s)
void cblas_zdrot (const CBLAS_INT N, void *X, const CBLAS_INT incX, void *Y, const CBLAS_INT incY, const double c, const double s)
N, X, incX, Y, incY, then c and s as plain const scalars. note csrot and zdrot are the mixed-precision cuties โ void * vectors but real float / double rotation scalars. periodt. ๐ฅ
๐ level-2 BLAS, single precision
void cblas_sgemv (const CBLAS_LAYOUT layout, const CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const float alpha, const float *A, const CBLAS_INT lda, const float *X, const CBLAS_INT incX, const float beta, float *Y, const CBLAS_INT incY)
void cblas_sgbmv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const CBLAS_INT KL, const CBLAS_INT KU, const float alpha, const float *A, const CBLAS_INT lda, const float *X, const CBLAS_INT incX, const float beta, float *Y, const CBLAS_INT incY)
void cblas_strmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const float *A, const CBLAS_INT lda, float *X, const CBLAS_INT incX)
void cblas_stbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const float *A, const CBLAS_INT lda, float *X, const CBLAS_INT incX)
void cblas_stpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const float *Ap, float *X, const CBLAS_INT incX)
void cblas_strsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const float *A, const CBLAS_INT lda, float *X, const CBLAS_INT incX)
void cblas_stbsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const float *A, const CBLAS_INT lda, float *X, const CBLAS_INT incX)
void cblas_stpsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const float *Ap, float *X, const CBLAS_INT incX)
okay inhale โ this is the level-2 friend group and they're all serving structured-argument realness. ๐ซถ
the gemv / gbmv branch keeps the same skeleton: layout, TransA, M, N, then alpha, const float *A, lda, const float *X, incX, beta, float *Y, incY. gbmv slid in extra KL and KU right after N because she's got bandwidth needs, and her layout / TransA params lost their const compared to sgemv. not me spotting that ๐ญ
the trmv / trsv / tbmv / tbsv / tpmv / tpsv branch swaps in Uplo and Diag alongside TransA, drops alpha and beta entirely, and passes A as const float * with float *X as the thing being poked. the tb* ones take that extra K; the tp* ones use const float *Ap and no lda at all. see the pattern? she's consistent. ๐
โญ level-2 BLAS, double precision
void cblas_dgemv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const double alpha, const double *A, const CBLAS_INT lda, const double *X, const CBLAS_INT incX, const double beta, double *Y, const CBLAS_INT incY)
void cblas_dgbmv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const CBLAS_INT KL, const CBLAS_INT KU, const double alpha, const double *A, const CBLAS_INT lda, const double *X, const CBLAS_INT incX, const double beta, double *Y, const CBLAS_INT incY)
void cblas_dtrmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const double *A, const CBLAS_INT lda, double *X, const CBLAS_INT incX)
void cblas_dtbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const double *A, const CBLAS_INT lda, double *X, const CBLAS_INT incX)
void cblas_dtpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const double *Ap, double *X, const CBLAS_INT incX)
void cblas_dtrsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const double *A, const CBLAS_INT lda, double *X, const CBLAS_INT incX)
void cblas_dtbsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const double *A, const CBLAS_INT lda, double *X, const CBLAS_INT incX)
void cblas_dtpsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const double *Ap, double *X, const CBLAS_INT incX)
literally the exact same eight, but every float got upgraded to double and every s became a d. no cap, that's the whole diff. she ate and left zero crumbs. ๐
๐ง level-2 BLAS, complex (the c girlies)
void cblas_cgemv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const void *alpha, const void *A, const CBLAS_INT lda, const void *X, const CBLAS_INT incX, const void *beta, void *Y, const CBLAS_INT incY)
void cblas_cgbmv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const CBLAS_INT KL, const CBLAS_INT KU, const void *alpha, const void *A, const CBLAS_INT lda, const void *X, const CBLAS_INT incX, const void *beta, void *Y, const CBLAS_INT incY)
void cblas_ctrmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void *A, const CBLAS_INT lda, void *X, const CBLAS_INT incX)
void cblas_ctbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const void *A, const CBLAS_INT lda, void *X, const CBLAS_INT incX)
void cblas_ctpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void *Ap, void *X, const CBLAS_INT incX)
void cblas_ctrsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void *A, const CBLAS_INT lda, void *X, const CBLAS_INT incX)
void cblas_ctbsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const void *A, const CBLAS_INT lda, void *X, const CBLAS_INT incX)
void cblas_ctpsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void *Ap, void *X, const CBLAS_INT incX)
same lineup, but now alpha, A, X, beta, Y, Ap are all void * โ with A, X, Ap, alpha, beta holding onto their const where they had it and Y / X staying mutable where they're outputs. the ints (layout, TransA, Uplo, Diag, M, N, K, KL, KU, lda, incX, incY) are untouched by all this void-pointer drama, bless them. ๐
๐ level-2 BLAS, double-complex (the z girlies)
void cblas_zgemv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const void *alpha, const void *A, const CBLAS_INT lda, const void *X, const CBLAS_INT incX, const void *beta, void *Y, const CBLAS_INT incY)
void cblas_zgbmv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const
and that's where this part runs out of page ๐ญ the zgbmv prototype literally gets cut off mid-sentence โ she's mid-slay and we gotta wait for the next chunk. the z versions are gonna mirror the c ones exactly, but bestie, do not go assuming the rest of that signature into your code, okay? wait for the actual page. ๐
heads up: every prototype above is quoted exactly as it appears in the header, so you can copy-paste straight into your #include <cblas.h> life without me messing with a single character. the vibes are mine, the signatures are hers. ๐ซถ
okay bestie we are still in the synopsis and it is a long one ๐ญ this stretch is all about the triangular girlies, the symmetric squad, the Hermitian icons and then a big glowy finale with the gemm family ๐ every prototype stays exactly as written, so keep your eyes on the code blocks ๐ซถ
first up, the tail end of a prototype from the last part โ she got cut off mid-argument-list and is just vibing here on her own, no cap ๐
CBLAS_INT M, const CBLAS_INT N, const CBLAS_INT KL, const CBLAS_INT
KU, const void *alpha, const void *A, const CBLAS_INT lda, const
void *X, const CBLAS_INT incX, const void *beta, void *Y, const
CBLAS_INT incY)
๐ the z triangular crew
complex double triangular vibes โ and notice every scalar and array is a void * in here, that's just how she's spelled:
void cblas_ztrmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void *A, const
CBLAS_INT lda, void *X, const CBLAS_INT incX)
void cblas_ztbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const
void *A, const CBLAS_INT lda, void *X, const CBLAS_INT incX)
void cblas_ztpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void *Ap, void *X,
const CBLAS_INT incX)
void cblas_ztrsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void *A, const
CBLAS_INT lda, void *X, const CBLAS_INT incX)
void cblas_ztbsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const
void *A, const CBLAS_INT lda, void *X, const CBLAS_INT incX)
void cblas_ztpsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void *Ap, void *X,
const CBLAS_INT incX)
๐ธ single precision, symmetric + rank updates
the float girlies ate this section, honestly โ alpha and beta are plain float values in here, no pointers, super chill:
void cblas_ssymv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const float alpha, const float *A, const CBLAS_INT lda, const
float *X, const CBLAS_INT incX, const float beta, float *Y, const
CBLAS_INT incY)
void cblas_ssbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const CBLAS_INT K, const float alpha, const float *A, const
CBLAS_INT lda, const float *X, const CBLAS_INT incX, const float
beta, float *Y, const CBLAS_INT incY)
void cblas_sspmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const float alpha, const float *Ap, const float *X, const
CBLAS_INT incX, const float beta, float *Y, const CBLAS_INT incY)
void cblas_sger (CBLAS_LAYOUT layout, const CBLAS_INT M, const CBLAS_INT
N, const float alpha, const float *X, const CBLAS_INT incX, const
float *Y, const CBLAS_INT incY, float *A, const CBLAS_INT lda)
void cblas_ssyr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const float alpha, const float *X, const CBLAS_INT incX, float
*A, const CBLAS_INT lda)
void cblas_sspr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const float alpha, const float *X, const CBLAS_INT incX, float
*Ap)
void cblas_ssyr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const float alpha, const float *X, const CBLAS_INT incX, const
float *Y, const CBLAS_INT incY, float *A, const CBLAS_INT lda)
void cblas_sspr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const float alpha, const float *X, const CBLAS_INT incX, const
float *Y, const CBLAS_INT incY, float *A)
โจ double precision, same energy
literally the exact same lineup but double everywhere โ she's the glow-up edition ๐:
void cblas_dsymv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const double alpha, const double *A, const CBLAS_INT lda, const
double *X, const CBLAS_INT incX, const double beta, double *Y, const
CBLAS_INT incY)
void cblas_dsbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const CBLAS_INT K, const double alpha, const double *A, const
CBLAS_INT lda, const double *X, const CBLAS_INT incX, const double
beta, double *Y, const CBLAS_INT incY)
void cblas_dspmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const double alpha, const double *Ap, const double *X, const
CBLAS_INT incX, const double beta, double *Y, const CBLAS_INT incY)
void cblas_dger (CBLAS_LAYOUT layout, const CBLAS_INT M, const CBLAS_INT
N, const double alpha, const double *X, const CBLAS_INT incX, const
double *Y, const CBLAS_INT incY, double *A, const CBLAS_INT lda)
void cblas_dsyr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const double alpha, const double *X, const CBLAS_INT incX, double
*A, const CBLAS_INT lda)
void cblas_dspr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const double alpha, const double *X, const CBLAS_INT incX, double
*Ap)
void cblas_dsyr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const double alpha, const double *X, const CBLAS_INT incX, const
double *Y, const CBLAS_INT incY, double *A, const CBLAS_INT lda)
void cblas_dspr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const double alpha, const double *X, const CBLAS_INT incX, const
double *Y, const CBLAS_INT incY, double *A)
๐ฆ complex single, Hermitian edition
back to void * land โ and yes, there's both cblas_cgeru and cblas_cgerc sitting right there next to each other, so please don't just skim and grab the wrong one ๐:
void cblas_chemv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const void *alpha, const void *A, const CBLAS_INT lda, const void
*X, const CBLAS_INT incX, const void *beta, void *Y, const CBLAS_INT
incY)
void cblas_chbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const CBLAS_INT K, const void *alpha, const void *A, const
CBLAS_INT lda, const void *X, const CBLAS_INT incX, const void
*beta, void *Y, const CBLAS_INT incY)
void cblas_chpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const void *alpha, const void *Ap, const void *X, const CBLAS_INT
incX, const void *beta, void *Y, const CBLAS_INT incY)
void cblas_cgeru (CBLAS_LAYOUT layout, const CBLAS_INT M, const
CBLAS_INT N, const void *alpha, const void *X, const CBLAS_INT incX,
const void *Y, const CBLAS_INT incY, void *A, const CBLAS_INT lda)
void cblas_cgerc (CBLAS_LAYOUT layout, const CBLAS_INT M, const
CBLAS_INT N, const void *alpha, const void *X, const CBLAS_INT incX,
const void *Y, const CBLAS_INT incY, void *A, const CBLAS_INT lda)
void cblas_cher (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const float alpha, const void *X, const CBLAS_INT incX, void *A,
const CBLAS_INT lda)
void cblas_chpr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const float alpha, const void *X, const CBLAS_INT incX, void *A)
void cblas_cher2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const void *alpha, const void *X, const CBLAS_INT incX, const
void *Y, const CBLAS_INT incY, void *A, const CBLAS_INT lda)
void cblas_chpr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const void *alpha, const void *X, const CBLAS_INT incX, const
void *Y, const CBLAS_INT incY, void *Ap)
heads up bestie:cblas_cherandcblas_chprtake aconst float alphawhile everything around them takesconst void *alphaโ that's genuinely how she's written, don't "fix" it ๐
๐ complex double, the z twins
every single one of the above, but z โ and same deal with cblas_zgeru vs cblas_zgerc ๐ฅ:
void cblas_zhemv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const void *alpha, const void *A, const CBLAS_INT lda, const void
*X, const CBLAS_INT incX, const void *beta, void *Y, const CBLAS_INT
incY)
void cblas_zhbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const CBLAS_INT K, const void *alpha, const void *A, const
CBLAS_INT lda, const void *X, const CBLAS_INT incX, const void
*beta, void *Y, const CBLAS_INT incY)
void cblas_zhpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const void *alpha, const void *Ap, const void *X, const CBLAS_INT
incX, const void *beta, void *Y, const CBLAS_INT incY)
void cblas_zgeru (CBLAS_LAYOUT layout, const CBLAS_INT M, const
CBLAS_INT N, const void *alpha, const void *X, const CBLAS_INT incX,
const void *Y, const CBLAS_INT incY, void *A, const CBLAS_INT lda)
void cblas_zgerc (CBLAS_LAYOUT layout, const CBLAS_INT M, const
CBLAS_INT N, const void *alpha, const void *X, const CBLAS_INT incX,
const void *Y, const CBLAS_INT incY, void *A, const CBLAS_INT lda)
void cblas_zher (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const double alpha, const void *X, const CBLAS_INT incX, void *A,
const CBLAS_INT lda)
void cblas_zhpr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const double alpha, const void *X, const CBLAS_INT incX, void *A)
void cblas_zher2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const void *alpha, const void *X, const CBLAS_INT incX, const
void *Y, const CBLAS_INT incY, void *A, const CBLAS_INT lda)
void cblas_zhpr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT
N, const void *alpha, const void *X, const CBLAS_INT incX, const
void *Y, const CBLAS_INT incY, void *Ap)
๐ level 3, single precision โ main character energy
okay this is the part everyone actually came for, the matrix-matrix headliners ๐ and yes cblas_sgemmtr is real, she's right there between gemm and symm:
void cblas_sgemm (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA,
CBLAS_TRANSPOSE TransB, const CBLAS_INT M, const CBLAS_INT N, const
CBLAS_INT K, const float alpha, const float *A, const CBLAS_INT lda,
const float *B, const CBLAS_INT ldb, const float beta, float *C,
const CBLAS_INT ldc)
void cblas_sgemmtr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_TRANSPOSE TransB, const CBLAS_INT N,
const CBLAS_INT K, const float alpha, const float *A, const
CBLAS_INT lda, const float *B, const CBLAS_INT ldb, const float
beta, float *C, const CBLAS_INT ldc)
void cblas_ssymm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
const CBLAS_INT M, const CBLAS_INT N, const float alpha, const float
*A, const CBLAS_INT lda, const float *B, const CBLAS_INT ldb, const
float beta, float *C, const CBLAS_INT ldc)
void cblas_ssyrk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const float alpha,
const float *A, const CBLAS_INT lda, const float beta, float *C,
const CBLAS_INT ldc)
void cblas_ssyr2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const float alpha,
const float *A, const CBLAS_INT lda, const float *B, const CBLAS_INT
ldb, const float beta, float *C, const CBLAS_INT ldc)
void cblas_strmm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const
CBLAS_INT N, const float alpha, const float *A, const CBLAS_INT lda,
float *B, const CBLAS_INT ldb)
void cblas_strsm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const
CBLAS_INT N, const float alpha, const float *A, const CBLAS_INT lda,
float *B, const CBLAS_INT ldb)
note the vibe shift:cblas_strmmandcblas_strsmtakefloat *B(notconst) because they write into it, whileAstaysconst float *๐ซถ
๐ฅ level 3, double precision
same lineup, double glow-up โ and heads up, cblas_dsymm gets cut off right at the edge of this chunk, so don't panic when the code block just ends mid-signature ๐ she carries on in the next part:
void cblas_dgemm (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA,
CBLAS_TRANSPOSE TransB, const CBLAS_INT M, const CBLAS_INT N, const
CBLAS_INT K, const double alpha, const double *A, const CBLAS_INT
lda, const double *B, const CBLAS_INT ldb, const double beta, double
*C, const CBLAS_INT ldc)
void cblas_dgemmtr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_TRANSPOSE TransB, const CBLAS_INT N,
const CBLAS_INT K, const double alpha, const double *A, const
CBLAS_INT lda, const double *B, const CBLAS_INT ldb, const double
beta, double *C, const CBLAS_INT ldc)
void cblas_dsymm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
...and the synopsis scroll continues, bestie โ same energy, just more prototypes ๐
const CBLAS_INT M, const CBLAS_INT N, const double alpha, const
double *A, const CBLAS_INT lda, const double *B, const CBLAS_INT
ldb, const double beta, double *C, const CBLAS_INT ldc)
void cblas_dsyrk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const double alpha,
const double *A, const CBLAS_INT lda, const double beta, double *C,
const CBLAS_INT ldc)
void cblas_dsyr2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const double alpha,
const double *A, const CBLAS_INT lda, const double *B, const
CBLAS_INT ldb, const double beta, double *C, const CBLAS_INT ldc)
void cblas_dtrmm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const
CBLAS_INT N, const double alpha, const double *A, const CBLAS_INT
lda, double *B, const CBLAS_INT ldb)
void cblas_dtrsm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const
CBLAS_INT N, const double alpha, const double *A, const CBLAS_INT
lda, double *B, const CBLAS_INT ldb)
void cblas_cgemm (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA,
CBLAS_TRANSPOSE TransB, const CBLAS_INT M, const CBLAS_INT N, const
CBLAS_INT K, const void *alpha, const void *A, const CBLAS_INT lda,
const void *B, const CBLAS_INT ldb, const void *beta, void *C, const
CBLAS_INT ldc)
void cblas_cgemmtr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_TRANSPOSE TransB, const CBLAS_INT N,
const CBLAS_INT K, const void *alpha, const void *A, const CBLAS_INT
lda, const void *B, const CBLAS_INT ldb, const void *beta, void *C,
const CBLAS_INT ldc)
void cblas_csymm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
const CBLAS_INT M, const CBLAS_INT N, const void *alpha, const void
*A, const CBLAS_INT lda, const void *B, const CBLAS_INT ldb, const
void *beta, void *C, const CBLAS_INT ldc)
void cblas_csyrk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const void *alpha,
const void *A, const CBLAS_INT lda, const void *beta, void *C, const
CBLAS_INT ldc)
void cblas_csyr2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const void *alpha,
const void *A, const CBLAS_INT lda, const void *B, const CBLAS_INT
ldb, const void *beta, void *C, const CBLAS_INT ldc)
void cblas_ctrmm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const
CBLAS_INT N, const void *alpha, const void *A, const CBLAS_INT lda,
void *B, const CBLAS_INT ldb)
void cblas_ctrsm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const
CBLAS_INT N, const void *alpha, const void *A, const CBLAS_INT lda,
void *B, const CBLAS_INT ldb)
void cblas_zgemm (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA,
CBLAS_TRANSPOSE TransB, const CBLAS_INT M, const CBLAS_INT N, const
CBLAS_INT K, const void *alpha, const void *A, const CBLAS_INT lda,
const void *B, const CBLAS_INT ldb, const void *beta, void *C, const
CBLAS_INT ldc)
void cblas_zgemmtr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_TRANSPOSE TransB, const CBLAS_INT N,
const CBLAS_INT K, const void *alpha, const void *A, const CBLAS_INT
lda, const void *B, const CBLAS_INT ldb, const void *beta, void *C,
const CBLAS_INT ldc)
void cblas_zsymm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
const CBLAS_INT M, const CBLAS_INT N, const void *alpha, const void
*A, const CBLAS_INT lda, const void *B, const CBLAS_INT ldb, const
void *beta, void *C, const CBLAS_INT ldc)
void cblas_zsyrk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const void *alpha,
const void *A, const CBLAS_INT lda, const void *beta, void *C, const
CBLAS_INT ldc)
void cblas_zsyr2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const void *alpha,
const void *A, const CBLAS_INT lda, const void *B, const CBLAS_INT
ldb, const void *beta, void *C, const CBLAS_INT ldc)
void cblas_ztrmm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const
CBLAS_INT N, const void *alpha, const void *A, const CBLAS_INT lda,
void *B, const CBLAS_INT ldb)
void cblas_ztrsm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const
CBLAS_INT N, const void *alpha, const void *A, const CBLAS_INT lda,
void *B, const CBLAS_INT ldb)
void cblas_chemm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
const CBLAS_INT M, const CBLAS_INT N, const void *alpha, const void
*A, const CBLAS_INT lda, const void *B, const CBLAS_INT ldb, const
void *beta, void *C, const CBLAS_INT ldc)
void cblas_cherk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const float alpha,
const void *A, const CBLAS_INT lda, const float beta, void *C, const
CBLAS_INT ldc)
void cblas_cher2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const void *alpha,
const void *A, const CBLAS_INT lda, const void *B, const CBLAS_INT
ldb, const float beta, void *C, const CBLAS_INT ldc)
void cblas_zhemm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
const CBLAS_INT M, const CBLAS_INT N, const void *alpha, const void
*A, const CBLAS_INT lda, const void *B, const CBLAS_INT ldb, const
void *beta, void *C, const CBLAS_INT ldc)
void cblas_zherk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const double alpha,
const void *A, const CBLAS_INT lda, const double beta, void *C,
const CBLAS_INT ldc)
void cblas_zher2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const void *alpha,
const void *A, const CBLAS_INT lda, const void *B, const CBLAS_INT
ldb, const double beta, void *C, const CBLAS_INT ldc)
void cblas_xerbla (CBLAS_INT p, const char *rout, const char *form,...)
okay that's the whole prototype parade ๐ and now we get into the good stuff โ the actual definitions. buckle up ๐ฆ
๐ Macro Definition Documentation ๐
these are the little #defines sprinkled through the header. tiny but iconic โจ
#define API_SUFFIX( a)โ its value is literally justa:
a
defined at line 57 of file cblas.h ๐
#define CBLAS_IFMT PRId32โ defined at line 35 of filecblas.h.#define CBLAS_INDEX size_t /* this may vary between platforms */โ defined at line 15 of filecblas.h. bestie note the comment: it may vary between platforms ๐ญ so don't go assuming it's always the exact same type everywhere.#define CBLAS_INT int32_tโ defined at line 24 of filecblas.h.#define CBLAS_ORDER CBLAS_LAYOUT /* this for backward compatibility with CBLAS_ORDER */โ defined at line 45 of filecblas.h. and yes the comment says the whole reason it exists is backward compatibility withCBLAS_ORDER๐ respect the elders.
๐ธ Typedef Documentation ๐ธ
five lil' enum aliases, all living their best life ๐
typedef enum CBLAS_DIAG CBLAS_DIAGtypedef enum CBLAS_LAYOUT CBLAS_LAYOUTtypedef enum CBLAS_SIDE CBLAS_SIDEtypedef enum CBLAS_TRANSPOSE CBLAS_TRANSPOSEtypedef enum CBLAS_UPLO CBLAS_UPLO
๐ฆ Enumeration Type Documentation ๐ฆ
the actual enumerators, one enum at a time, no gatekeeping ๐
enum CBLAS_DIAG
enumerators:
CblasNonUnitCblasUnit
defined at line 42 of file cblas.h ๐
enum CBLAS_LAYOUT
enumerators:
CblasRowMajorCblasColMajor
defined at line 39 of file cblas.h โจ
enum CBLAS_SIDE
enumerators:
CblasLeftCblasRight
defined at line 43 of file cblas.h ๐
enum CBLAS_TRANSPOSE
enumerators:
CblasNoTransCblasTransCblasConjTrans
defined at line 40 of file cblas.h ๐ซถ
enum CBLAS_UPLO
enumerators:
CblasUpperCblasLower
defined at line 41 of file cblas.h ๐ธ
๐ Function Documentation ๐
here's where each function actually lives โ file and line, receipts and all ๐งพ lowkey this is the most useful part, ngl.
void cblas_caxpy (const CBLAS_INT N, const void * alpha, const void * X, const CBLAS_INT incX, void * Y, const CBLAS_INT incY)
definition at line 11 of file cblas_caxpy.c ๐
void cblas_ccopy (const CBLAS_INT N, const void * X, const CBLAS_INT incX, void * Y, const CBLAS_INT incY)
definition at line 11 of file cblas_ccopy.c.
void cblas_cdotc_sub (const CBLAS_INT N, const void * X, const CBLAS_INT incX, const void * Y, const CBLAS_INT incY, void * dotc)
definition at line 12 of file cblas_cdotc_sub.c.
void cblas_cdotu_sub (const CBLAS_INT N, const void * X, const CBLAS_INT incX, const void * Y, const CBLAS_INT incY, void * dotu)
definition at line 12 of file cblas_cdotu_sub.c.
void cblas_cgbmv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const CBLAS_INT KL, const CBLAS_INT KU, const void * alpha, const void * A, const CBLAS_INT lda, const void * X, const CBLAS_INT incX, const void * beta, void * Y, const CBLAS_INT incY)
definition at line 12 of file cblas_cgbmv.c.
void cblas_cgemm (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, CBLAS_TRANSPOSE TransB, const CBLAS_INT M, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const void * A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb, const void * beta, void * C, const CBLAS_INT ldc)
definition at line 12 of file cblas_cgemm.c ๐ฅ
void cblas_cgemmtr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_TRANSPOSE TransB, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const void * A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb, const void * beta, void * C, const CBLAS_INT ldc)
definition at line 12 of file cblas_cgemmtr.c.
void cblas_cgemv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void * A, const CBLAS_INT lda, const void * X, const CBLAS_INT incX, const void * beta, void * Y, const CBLAS_INT incY)
definition at line 12 of file cblas_cgemv.c.
void cblas_cgerc (CBLAS_LAYOUT layout, const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void * X, const CBLAS_INT incX, const void * Y, const CBLAS_INT incY, void * A, const CBLAS_INT lda)
definition at line 12 of file cblas_cgerc.c ๐
void cblas_cgeru (CBLAS_LAYOUT layout, const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void * X, const CBLAS_INT incX, const void * Y, const CBLAS_INT incY, void * A, const CBLAS_INT lda)
definition at line 10 of file cblas_cgeru.c โ yes, line 10, everybody else was line 12, this one's just different like that ๐
void cblas_chbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const void * A, const CBLAS_INT lda, const void * X, const CBLAS_INT incX, const void * beta, void * Y, const CBLAS_INT incY)
definition at line 12 of file cblas_chbmv.c โญ
๐
cblas_chemm
void cblas_chemm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void *
A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb, const void
* beta, void * C, const CBLAS_INT ldc)
Definition at line 12 of file cblas_chemm.c.
Ok so the c-girlies are up first and they are serving void pointer realness โ everything's const void * because complex numbers don't do labels. Respect.
โจ cblas_chemv
void cblas_chemv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N,
const void * alpha, const void * A, const CBLAS_INT lda, const void * X,
const CBLAS_INT incX, const void * beta, void * Y, const CBLAS_INT incY)
Definition at line 12 of file cblas_chemv.c.
Notice X is const void * but Y is just void * โ one's read-only, one's getting written to. Character development, honestly.
๐ cblas_cher
void cblas_cher (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N,
const float alpha, const void * X, const CBLAS_INT incX, void * A, const
CBLAS_INT lda)
Definition at line 12 of file cblas_cher.c.
Bestie the alpha here is a plain const float while everything else is const void * โ no cap, that's just how this one is built. ๐ซถ
๐ฆ cblas_cher2
void cblas_cher2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N,
const void * alpha, const void * X, const CBLAS_INT incX, const void *
Y, const CBLAS_INT incY, void * A, const CBLAS_INT lda)
Definition at line 12 of file cblas_cher2.c.
Two vectors this time (X and Y), and alpha is back to being a const void *. It's giving glow-up.
๐ธ cblas_cher2k
void cblas_cher2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const
void * A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb,
const float beta, void * C, const CBLAS_INT ldc)
Definition at line 12 of file cblas_cher2k.c.
Trans is a CBLAS_TRANSPOSE, alpha is const void *, beta is const float โ the mixed-type chaos is iconic, keep up.
๐ cblas_cherk
void cblas_cherk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const float alpha, const
void * A, const CBLAS_INT lda, const float beta, void * C, const
CBLAS_INT ldc)
Definition at line 12 of file cblas_cherk.c.
Here alpha and beta are both const float and the matrices are const void *. Slay, consistency.
โญ cblas_chpmv
void cblas_chpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N,
const void * alpha, const void * Ap, const void * X, const CBLAS_INT
incX, const void * beta, void * Y, const CBLAS_INT incY)
Definition at line 12 of file cblas_chpmv.c.
See that Ap with no lda next to it? That's the whole vibe of this signature โ no leading dimension, just Ap out here living its life.
๐ cblas_chpr
void cblas_chpr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N,
const float alpha, const void * X, const CBLAS_INT incX, void * A)
Definition at line 12 of file cblas_chpr.c.
Short and sweet: layout, Uplo, N, a const float alpha, X with incX, and then A. That's it, that's the whole function signature. ๐
๐ง cblas_chpr2
void cblas_chpr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N,
const void * alpha, const void * X, const CBLAS_INT incX, const void *
Y, const CBLAS_INT incY, void * Ap)
Definition at line 12 of file cblas_chpr2.c.
Two vectors, one Ap, alpha as const void *. Main character energy from the packed-storage girlies.
๐ฅ cblas_crotg
void cblas_crotg (void * a, void * b, float * c, void * s)
Definition at line 9 of file cblas_crotg.c.
No layout, no N, no incX โ this one just rolls up with four pointers and no context whatsoever. We stan a mysterious queen. ๐
๐ cblas_cscal
void cblas_cscal (const CBLAS_INT N, const void * alpha, void * X, const
CBLAS_INT incX)
Definition at line 11 of file cblas_cscal.c.
Four args, alpha is const void *, X is void *. Lowkey the most unbothered signature on this page.
๐ฆ cblas_csrot
void cblas_csrot (const CBLAS_INT N, void * X, const CBLAS_INT incX, void *
Y, const CBLAS_INT incY, const float c, const float s)
Definition at line 9 of file cblas_csrot.c.
c and s are const float here, and yes those are the actual parameter names โ single letters, zero notes, no explanation. Fr fr.
๐ cblas_csscal
void cblas_csscal (const CBLAS_INT N, const float alpha, void * X, const
CBLAS_INT incX)
Definition at line 11 of file cblas_csscal.c.
Same shape as cblas_cscal but alpha is a const float instead of const void *. One tiny glyph of difference, bestie.
๐ซ cblas_cswap
void cblas_cswap (const CBLAS_INT N, void * X, const CBLAS_INT incX, void *
Y, const CBLAS_INT incY)
Definition at line 11 of file cblas_cswap.c.
Both X and Y are plain void * โ nobody's const here, everybody's got something to say. ๐
๐ cblas_csymm
void cblas_csymm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void *
A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb, const void
* beta, void * C, const CBLAS_INT ldc)
Definition at line 12 of file cblas_csymm.c.
Full house: layout, Side, Uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc. Thirteen parameters and not a single one wasted. โจ
๐บ cblas_csyr2k
void cblas_csyr2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const
void * A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb,
const void * beta, void * C, const CBLAS_INT ldc)
Definition at line 12 of file cblas_csyr2k.c.
alpha and beta are both const void * on this one โ unlike its cher2k cousin, no float in sight. ๐
๐ cblas_csyrk
void cblas_csyrk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
Trans, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const
void * A, const CBLAS_INT lda, const void * beta, void * C, const
CBLAS_INT ldc)
Definition at line 12 of file cblas_csyrk.c.
Only one matrix in (A + lda), output goes to C + ldc. Minimalist but make it complex.
๐ฟ cblas_ctbmv
void cblas_ctbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const
void * A, const CBLAS_INT lda, void * X, const CBLAS_INT incX)
Definition at line 10 of file cblas_ctbmv.c.
TransA AND Diag both showing up โ the enum duo we didn't know we needed. Note it's line 10, not 12, bestie, stay awake. ๐ญ
๐ cblas_ctbsv
void cblas_ctbsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const
void * A, const CBLAS_INT lda, void * X, const CBLAS_INT incX)
Definition at line 10 of file cblas_ctbsv.c.
Exact same parameter list as cblas_ctbmv above โ the only thing that changes is the name and the file. Twins, but make it separate.
๐ซง cblas_ctpmv
void cblas_ctpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void * Ap, void * X,
const CBLAS_INT incX)
Definition at line 10 of file cblas_ctpmv.c.
Ap and no K, no lda โ the packed version dropped the leading dimension and honestly? Good for her.
๐ง cblas_ctpsv
void cblas_ctpsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void * Ap, void * X,
const CBLAS_INT incX)
Definition at line 10 of file cblas_ctpsv.c.
Same story as cblas_ctpmv โ Ap, X, incX, and the two enums doing all the personality work.
๐ฎ cblas_ctrmm
void cblas_ctrmm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const
CBLAS_INT N, const void * alpha, const void * A, const CBLAS_INT lda,
void * B, const CBLAS_INT ldb)
Definition at line 12 of file cblas_ctrmm.c.
Four enums before a single number โ Side, Uplo, TransA, Diag โ then M, N, alpha, A, lda, B, ldb. The enum backlog is real. ๐ซถ
๐ cblas_ctrmv
void cblas_ctrmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void * A, const
CBLAS_INT lda, void * X, const CBLAS_INT incX)
Definition at line 10 of file cblas_ctrmv.c.
A comes with lda, X comes with incX, and N is just there vibing in the middle.
๐ cblas_ctrsm
void cblas_ctrsm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const
CBLAS_INT N, const void * alpha, const void * A, const CBLAS_INT lda,
void * B, const CBLAS_INT ldb)
Definition at line 12 of file cblas_ctrsm.c.
void cblas_ctrmm and void cblas_ctrsm literally share a parameter list, character for character. Not a typo on my end, bestie, that's just the page.
๐ธ cblas_ctrsv
void cblas_ctrsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void * A, const
CBLAS_INT lda, void * X, const CBLAS_INT incX)
Definition at line 10 of file cblas_ctrsv.c.
And that's the last of the c crew. Line 10 again โ ctrsv, we see you. ๐
โญ cblas_dasum
double cblas_dasum (const CBLAS_INT N, const double * X, const CBLAS_INT
incX)
Definition at line 12 of file cblas_dasum.c.
Plot twist: this one returns a double instead of void. Everyone say congrats to cblas_dasum for having a return type. ๐
๐ฅ cblas_daxpy
void cblas_daxpy (const CBLAS_INT N, const double alpha, const double * X,
const CBLAS_INT incX, double * Y, const CBLAS_INT incY)
Definition at line 11 of file `cblas_daxpy.c.
alpha is a plain const double โ no void * in sight, the d functions keep it simple. X is const, Y is not, and that's the whole dynamic.
๐ cblas_dcabs1
double cblas_dcabs1 (const void * z)
Definition at line 9 of file `cblas_dcabs1.c.
One argument. const void * z. Returns a double. That is the entire function. Short king behavior, honestly.
๐ cblas_dcopy
void cblas_dcopy (const CBLAS_INT N, const double * X, const CBLAS_INT incX,
double * Y, const CBLAS_INT incY)
Definition at line 11 of file cblas_dcopy.c.
X with incX, Y with incY, N up front. The classic layout, no notes. ๐
๐ cblas_ddot
double cblas_ddot (const CBLAS_INT N, const double * X, const CBLAS_INT
incX, const double * Y, const CBLAS_INT incY)
Definition at line 12 of file cblas_ddot.c.
Both X and Y are const double * โ nobody's getting modified, this one's just here to return a double and leave.
๐ cblas_dgbmv
void cblas_dgbmv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const
CBLAS_INT M, const CBLAS_INT N, const CBLAS_INT KL, const CBLAS_INT KU,
const double alpha, const double * A, const CBLAS_INT lda, const double
* X, const CBLAS_INT incX, const double beta, double * Y, const
CBLAS_INT incY)
Definition at line 11 of file cblas_dgbmv.c.
The widest signature so far and it brought both KL and KU to the party. Obsessed with the dedication. โจ
๐ cblas_dgemm
void cblas_dgemm (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA,
CBLAS_TRANSPOSE TransB, const CBLAS_INT M, const CBLAS_INT N, const
CBLAS_INT K, const double alpha, const double * A, const CBLAS_INT lda,
const double * B, const CBLAS_INT ldb, const double beta, double * C,
const CBLAS_INT ldc)
Definition at line 12 of file cblas_dgemm.c.
Fourteen parameters. TransA and TransB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc. This is the main character of the page, no cap. ๐
๐ฆ cblas_dgemmtr
void cblas_dgemmtr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE
TransA, CBLAS_TRANSPOSE TransB, const CBLAS_INT N, const CBLAS_INT K,
const double alpha, const double * A, const CBLAS_INT lda, const double
* B, const CBLAS_INT ldb, const double beta, double * C, const CBLAS_INT
ldc)
Definition at line 12 of file cblas_dgemmtr.c.
Don't skip her!! She's got Uplo where dgemm has M, and a single N where dgemm has M and N. Different girl, different signature. ๐ซถ
๐ cblas_dgemv
void cblas_dgemv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const
CBLAS_INT M, const CBLAS_INT N, const double alpha, const double * A,
const CBLAS_INT lda, const double * X, const CBLAS_INT incX, const
double beta, double * Y, const CBLAS_INT incY)
Definition at line 11 of file cblas_dgemv.c.
One TransA instead of two, X/incX where the gemm had B, Y where it had C. The matrix-vector remix. ๐ถ
๐ cblas_dger
void cblas_dger (CBLAS_LAYOUT layout, const CBLAS_INT M, const CBLAS_INT N,
const double alpha, const double * X, const CBLAS_INT incX, const double
* Y, const CBLAS_INT incY, double * A, const CBLAS_INT lda)
Definition at line 12 of file cblas_dger.c.
No Trans anything โ just layout, M, N, alpha, X, incX, Y, incY, A, lda. Refreshingly undramatic.
๐ cblas_dnrm2
double cblas_dnrm2 (const CBLAS_INT N, const double * X, const CBLAS_INT
incX)
Definition at line 12 of file cblas_dnrm2.c.
Three parameters, returns a double, done. A little minimalist moment for us. ๐
๐ธ cblas_drot
void cblas_drot (const CBLAS_INT N, double * X, const CBLAS_INT incX, double
* Y, const CBLAS_INT incY, const double c, const double s)
Definition at line 11 of file cblas_drot.c.
X and Y are both writable double *, and c and s ride in as const double at the end. Balanced. ๐
๐ฅ cblas_drotg
void cblas_drotg (double * a, double * b, double * c, double * s)
Definition at line 11 of file cblas_drotg.c.
Four double *, zero const, zero context. She said "figure it out." ๐
โญ cblas_drotm
void cblas_drotm (const CBLAS_INT N, double * X, const CBLAS_INT incX,
double * Y, const CBLAS_INT incY, const double * P)
Definition at line 3 of file cblas_drotm.c.
Line 3, bestie!! Everyone else is line 10, 11, or 12 and this one showed up early. Also: P is a const double * out here all by itself.
๐ง cblas_drotmg
void cblas_drotmg (double * d1, double * d2, double * b1, const double b2,
double * P)
Definition at line 11 of file cblas_drotmg.c.
Three writable pointers, then b2 as a plain const double (not a pointer!!), then P. The way b2 is the only non-pointer โ icon behavior.
๐ cblas_dsbmv
void cblas_dsbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N,
const CBLAS_INT K, const double alpha, const double * A, const CBLAS_INT
lda, const double * X, const CBLAS_INT incX, const double beta, double *
Y, const CBLAS_INT incY)
Definition at line 12 of file cblas_dsbmv.c.
N and K up front, alpha before A, beta right before Y. Order matters, babes, don't shuffle. โจ
๐ซง cblas_dscal
void cblas_dscal (const CBLAS_INT N, const double alpha, double * X, const
CBLAS_INT incX)
Definition at line 11 of file cblas_dscal.c.
Four args, shortest d function on the page. Also the c version of her exists with a const void * alpha โ compare and contrast, iykyk.
๐ cblas_dsdot
double cblas_dsdot (const CBLAS_INT N, const float * X, const CBLAS_INT
incX, const float * Y, const CBLAS_INT incY)
Definition at line 12 of file cblas_dsdot.c.
Wait โ the float!! X and Y here are const float * and it still returns a double. The mixed-type moment of the century. ๐ฅ
๐ cblas_dspmv
void cblas_dspmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N,
const double alpha, const double * Ap, const double * X, const CBLAS_INT
incX, const double beta, double * Y, const CBLAS_INT incY)
Definition at line 13 of file cblas_dspmv.c.
Line 13! One whole line later than the usual 12. Ap again with no lda following it โ packed storage stays packed. ๐
๐ cblas_dspr
void cblas_dspr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N,
const double alpha, const double * X, const CBLAS_INT incX, double * Ap)
Definition at line 12 of file cblas_dspr.c.
Seven parameters and the last one, Ap, is the writable one. Everybody before it gets const treatment. Queen of boundaries.
๐ซ cblas_dspr2
void cblas_dspr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N,
const double alpha, const double * X, const CBLAS_INT incX, const double
* Y, const CBLAS_INT incY, double * A)
Definition at line 10 of file cblas_dspr2.c.
Heads up โ the trailing output is called A here, not Ap. Same slot, different name. Don't let that sneak past you. ๐ Also line 10, the early riser.
๐บ cblas_dswap
void cblas_dswap (const CBLAS_INT N, double * X, const CBLAS_INT incX,
double * Y, const CBLAS_INT incY)
Definition at line 11 of file cblas_dswap.c.
No const on X or Y, because everybody's getting rewritten, bestie. Equal opportunity modification. ๐
๐ cblas_dsymm
void cblas_dsymm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo,
const CBLAS_INT M, const CBLAS_INT N, const double alpha, const double *
A, const CBLAS_INT lda, const double * B, const CBLAS_INT ldb, const
double beta, double * C, const CBLAS_INT ldc)
Definition at line 12 of file `cblas_dsymm.c.
Side + Uplo combo, M and N, then alpha/A/lda, beta/B/ldb, and C/ldc waiting at the end. Thirteen parameters of pure structure. โจ
๐ฆ cblas_dsymv
void cblas_dsymv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N,
const double alpha, const double * A, const CBLAS_INT lda, const double
* X, const CBLAS_INT incX, const double beta, double * Y, const
CBLAS_INT incY)
Definition at line 12 of file cblas_dsymv.c.
dsymm minus the Side plus X/incX โ the symmetry saga continues and we are sat for the rest of it, no cap. ๐ซถ
okay so we're still in the function list and honestly bestie we're thriving โ the d squad is wrapping up, then it's the s girlies all the way down. buckle up ๐
cblas_dsyr๐ โvoid cblas_dsyr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const double alpha, const double * X, const CBLAS_INT incX, double * A, const CBLAS_INT lda)โ defined at line 12 of filecblas_dsyr.c.cblas_dsyr2โจ โvoid cblas_dsyr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const double alpha, const double * X, const CBLAS_INT incX, const double * Y, const CBLAS_INT incY, double * A, const CBLAS_INT lda)โ defined at line 12 of filecblas_dsyr2.c.cblas_dsyr2k๐ โvoid cblas_dsyr2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE Trans, const CBLAS_INT N, const CBLAS_INT K, const double alpha, const double * A, const CBLAS_INT lda, const double * B, const CBLAS_INT ldb, const double beta, double * C, const CBLAS_INT ldc)โ defined at line 12 of filecblas_dsyr2k.c.cblas_dsyrk๐ธ โvoid cblas_dsyrk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE Trans, const CBLAS_INT N, const CBLAS_INT K, const double alpha, const double * A, const CBLAS_INT lda, const double beta, double * C, const CBLAS_INT ldc)โ defined at line 12 of filecblas_dsyrk.c.cblas_dtbmvโvoid cblas_dtbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const double * A, const CBLAS_INT lda, double * X, const CBLAS_INT incX)โ defined at line 10 of filecblas_dtbmv.c.cblas_dtbsvโvoid cblas_dtbsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const double * A, const CBLAS_INT lda, double * X, const CBLAS_INT incX)โ defined at line 10 of filecblas_dtbsv.c.cblas_dtpmv๐ฆ โvoid cblas_dtpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const double * Ap, double * X, const CBLAS_INT incX)โ defined at line 10 of filecblas_dtpmv.c.cblas_dtpsv๐ฆ โvoid cblas_dtpsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const double * Ap, double * X, const CBLAS_INT incX)โ defined at line 10 of filecblas_dtpsv.c.
notice howdtpmvanddtpsvare literally twins except for one letter โ the packed-storage girlies said "same energy, differentAp" and they ate ๐ (also both live at line 10, matching outfits, iconic).
cblas_dtrmm๐ฅ โvoid cblas_dtrmm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const CBLAS_INT N, const double alpha, const double * A, const CBLAS_INT lda, double * B, const CBLAS_INT ldb)โ defined at line 12 of filecblas_dtrmm.c.cblas_dtrmvโvoid cblas_dtrmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const double * A, const CBLAS_INT lda, double * X, const CBLAS_INT incX)โ defined at line 12 of filecblas_dtrmv.c.cblas_dtrsm๐ฅ โvoid cblas_dtrsm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const CBLAS_INT N, const double alpha, const double * A, const CBLAS_INT lda, double * B, const CBLAS_INT ldb)โ defined at line 12 of filecblas_dtrsm.c.cblas_dtrsvโvoid cblas_dtrsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const double * A, const CBLAS_INT lda, double * X, const CBLAS_INT incX)โ defined at line 10 of filecblas_dtrsv.c.
okay quick vibe check: the trmm/trsm pair both take CBLAS_SIDE Side plus M and N and two matrices (A and B), while the trmv/trsv pair keeps it to one matrix A and one vector X. no cap, that's the whole shape of it ๐
cblas_dzasumโญ โdouble cblas_dzasum (const CBLAS_INT N, const void * X, const CBLAS_INT incX)โ defined at line 12 of filecblas_dzasum.c.cblas_dznrm2โญ โdouble cblas_dznrm2 (const CBLAS_INT N, const void * X, const CBLAS_INT incX)โ defined at line 12 of filecblas_dznrm2.c.
both of these returndoublebut take aconst void * Xโ bestie,void *is giving "we're not gonna talk about the type, just trust us" ๐ and yes, thezin the name is literally in there, iykyk.
cblas_icamax๐ โCBLAS_INDEX cblas_icamax (const CBLAS_INT N, const void * X, const CBLAS_INT incX)โ defined at line 12 of filecblas_icamax.c.cblas_idamax๐ โCBLAS_INDEX cblas_idamax (const CBLAS_INT N, const double * X, const CBLAS_INT incX)โ defined at line 12 of filecblas_idamax.c.cblas_isamax๐ โCBLAS_INDEX cblas_isamax (const CBLAS_INT N, const float * X, const CBLAS_INT incX)โ defined at line 12 of filecblas_isamax.c.cblas_izamax๐ โCBLAS_INDEX cblas_izamax (const CBLAS_INT N, const void * X, const CBLAS_INT incX)โ defined at line 12 of filecblas_izamax.c.
the four amax girlies all return CBLAS_INDEX and they all live at line 12 โ synchronized, choreographed, ate ๐ note the difference though: idamax takes const double *, isamax takes const float *, and icamax/izamax take const void *. do not mix them up, that's all I'm saying ๐ญ
and now, the s section begins. say hi to the single-precision squad ๐
cblas_sasum๐ โfloat cblas_sasum (const CBLAS_INT N, const float * X, const CBLAS_INT incX)โ defined at line 12 of filecblas_sasum.c.cblas_saxpy๐ โvoid cblas_saxpy (const CBLAS_INT N, const float alpha, const float * X, const CBLAS_INT incX, float * Y, const CBLAS_INT incY)โ defined at line 12 of filecblas_saxpy.c.cblas_scabs1๐ โfloat cblas_scabs1 (const void * c)โ defined at line 9 of filecblas_scabs1.c.
hello??cblas_scabs1takes exactly ONE argument, aconst void * c, returns afloat, and sits all the way up at line 9. she's the shortest little icon in this whole list and honestly? main character energy, no notes โจ
cblas_scasumโfloat cblas_scasum (const CBLAS_INT N, const void * X, const CBLAS_INT incX)โ defined at line 12 of filecblas_scasum.c.cblas_scnrm2โfloat cblas_scnrm2 (const CBLAS_INT N, const void * X, const CBLAS_INT incX)โ defined at line 12 of filecblas_scnrm2.c.cblas_scopy๐ง โvoid cblas_scopy (const CBLAS_INT N, const float * X, const CBLAS_INT incX, float * Y, const CBLAS_INT incY)โ defined at line 11 of filecblas_scopy.c.cblas_sdot๐ โfloat cblas_sdot (const CBLAS_INT N, const float * X, const CBLAS_INT incX, const float * Y, const CBLAS_INT incY)โ defined at line 12 of filecblas_sdot.c.cblas_sdsdot๐ โfloat cblas_sdsdot (const CBLAS_INT N, const float alpha, const float * X, const CBLAS_INT incX, const float * Y, const CBLAS_INT incY)โ defined at line 12 of filecblas_sdsdot.c.
okay scopy is at line 11 while sdot and sdsdot are at line 12, and sdsdot is the one with the extra alpha in the middle. yes I'm counting line numbers, yes I have a spreadsheet, mind your business ๐
cblas_sgbmv๐ โvoid cblas_sgbmv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const CBLAS_INT KL, const CBLAS_INT KU, const float alpha, const float * A, const CBLAS_INT lda, const float * X, const CBLAS_INT incX, const float beta, float * Y, const CBLAS_INT incY)โ defined at line 12 of filecblas_sgbmv.c.cblas_sgemm๐ฅ๐ โvoid cblas_sgemm (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, CBLAS_TRANSPOSE TransB, const CBLAS_INT M, const CBLAS_INT N, const CBLAS_INT K, const float alpha, const float * A, const CBLAS_INT lda, const float * B, const CBLAS_INT ldb, const float beta, float * C, const CBLAS_INT ldc)โ defined at line 12 of filecblas_sgemm.c.
the waycblas_sgemmgets twoCBLAS_TRANSPOSEparams (TransAandTransB), three sizes (M,N,K),alphaandbeta, and two output-ish matricesBandC... it's giving "I have a lot going on but I'm handling it" ๐ iconic, periodt.
cblas_sgemmtrโญ โvoid cblas_sgemmtr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_TRANSPOSE TransB, const CBLAS_INT N, const CBLAS_INT K, const float alpha, const float * A, const CBLAS_INT lda, const float * B, const CBLAS_INT ldb, const float beta, float * C, const CBLAS_INT ldc)โ defined at line 13 of filecblas_sgemmtr.c.
not to be dramatic butcblas_sgemmtris the ONLY one in this whole batch defined at line 13 ๐ everyone else is line 9, 10, 11 or 12 and this girl said "I need one extra line, I'm built different". also note she swappedMout forUploโ compare withsgemmbefore you assume anything, bestie ๐
cblas_sgemv๐ธ โvoid cblas_sgemv (const CBLAS_LAYOUT layout, const CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const float alpha, const float * A, const CBLAS_INT lda, const float * X, const CBLAS_INT incX, const float beta, float * Y, const CBLAS_INT incY)โ defined at line 11 of filecblas_sgemv.c.
tiny detail that matters, fr fr:cblas_sgemvhasconstonlayoutandTransAtoo โconst CBLAS_LAYOUT layout, const CBLAS_TRANSPOSE TransAโ and again, line 11, not 12. copy it exactly, don't "clean it up" ๐ญ
cblas_sger๐บ โvoid cblas_sger (CBLAS_LAYOUT layout, const CBLAS_INT M, const CBLAS_INT N, const float alpha, const float * X, const CBLAS_INT incX, const float * Y, const CBLAS_INT incY, float * A, const CBLAS_INT lda)โ defined at line 12 of filecblas_sger.c.cblas_snrm2โญ โfloat cblas_snrm2 (const CBLAS_INT N, const float * X, const CBLAS_INT incX)โ defined at line 12 of filecblas_snrm2.c.cblas_srot๐ โvoid cblas_srot (const CBLAS_INT N, float * X, const CBLAS_INT incX, float * Y, const CBLAS_INT incY, const float c, const float s)โ defined at line 11 of filecblas_srot.c.cblas_srotg๐ โvoid cblas_srotg (float * a, float * b, float * c, float * s)โ defined at line 11 of filecblas_srotg.c.cblas_srotm๐ โvoid cblas_srotm (const CBLAS_INT N, float * X, const CBLAS_INT incX, float * Y, const CBLAS_INT incY, const float * P)โ defined at line 11 of filecblas_srotm.c.cblas_srotmg๐ โvoid cblas_srotmg (float * d1, float * d2, float * b1, const float b2, float * P)โ defined at line 11 of filecblas_srotmg.c.
okay the whole rot family is at line 11 and they're all a little unhinged in their own way: srot passes plain c and s by value, srotg passes pointers a, b, c, s, srotm takes a const float * P, and srotmg takes d1, d2, b1 as pointers plus b2 by value and P. ngl that's a lot of little letters, just copy them character for character ๐
cblas_ssbmv๐ฆ โvoid cblas_ssbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const CBLAS_INT K, const float alpha, const float * A, const CBLAS_INT lda, const float * X, const CBLAS_INT incX, const float beta, float * Y, const CBLAS_INT incY)โ defined at line 11 of filecblas_ssbmv.c.cblas_sscal๐ โvoid cblas_sscal (const CBLAS_INT N, const float alpha, float * X, const CBLAS_INT incX)โ defined at line 11 of filecblas_sscal.c.cblas_sspmvโvoid cblas_sspmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const float alpha, const float * Ap, const float * X, const CBLAS_INT incX, const float beta, float * Y, const CBLAS_INT incY)โ defined at line 11 of filecblas_sspmv.c.cblas_ssprโvoid cblas_sspr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const float alpha, const float * X, const CBLAS_INT incX, float * Ap)โ defined at line 12 of filecblas_sspr.c.cblas_sspr2โvoid cblas_sspr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const float alpha, const float * X, const CBLAS_INT incX, const float * Y, const CBLAS_INT incY, float * A)โ defined at line 12 of filecblas_sspr2.c.
watch out on this one bestie ๐ญcblas_sspr2takesfloat * Aas its last param โ NOTAp, even though its siblingcblas_ssprright above it takesfloat * Ap. different letter, different parameter, do not "fix" it, I'm begging ๐
cblas_sswap๐ โvoid cblas_sswap (const CBLAS_INT N, float * X, const CBLAS_INT incX, float * Y, const CBLAS_INT incY)โ defined at line 11 of filecblas_sswap.c.cblas_ssymm๐ โvoid cblas_ssymm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo, const CBLAS_INT M, const CBLAS_INT N, const float alpha, const float * A, const CBLAS_INT lda, const float * B, const CBLAS_INT ldb, const float beta, float * C, const CBLAS_INT ldc)โ defined at line 12 of filecblas_ssymm.c.cblas_ssymv๐ โvoid cblas_ssymv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const float alpha, const float * A, const CBLAS_INT lda, const float * X, const CBLAS_INT incX, const float beta, float * Y, const CBLAS_INT incY)โ defined at line 12 of filecblas_ssymv.c.cblas_ssyr๐ท โvoid cblas_ssyr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const float alpha, const float * X, const CBLAS_INT incX, float * A, const CBLAS_INT lda)โ defined at line 11 of filecblas_ssyr.c.cblas_ssyr2๐ท โvoid cblas_ssyr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const float alpha, const float * X, const CBLAS_INT incX, const float * Y, const CBLAS_INT incY, float * A, const CBLAS_INT lda)โ defined at line 12 of filecblas_ssyr2.c.
btw ssyr is line 11 and ssyr2 is line 12 โ one extra vector, one extra line, that's the pattern and I'm obsessed with the consistency ๐ซถ
cblas_ssyr2k๐ โvoid cblas_ssyr2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE Trans, const CBLAS_INT N, const CBLAS_INT K, const float alpha, const float * A, const CBLAS_INT lda, const float * B, const CBLAS_INT ldb, const float beta, float * C, const CBLAS_INT ldc)โ defined at line 12 of filecblas_ssyr2k.c.cblas_ssyrk๐ โvoid cblas_ssyrk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE Trans, const CBLAS_INT N, const CBLAS_INT K, const float alpha, const float * A, const CBLAS_INT lda, const float beta, float * C, const CBLAS_INT ldc)โ defined at line 12 of filecblas_ssyrk.c.cblas_stbmvโvoid cblas_stbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const float * A, const CBLAS_INT lda, float * X, const CBLAS_INT incX)โ defined at line 10 of filecblas_stbmv.c.cblas_stbsvโvoid cblas_stbsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const float * A, const CBLAS_INT lda, float * X, const CBLAS_INT incX)โ defined at line 10 of filecblas_stbsv.c.cblas_stpmv๐ฆ โvoid cblas_stpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const float * Ap, float * X, const CBLAS_INT incX)โ defined at line 11 of filecblas_stpmv.c.
and that's where this chunk lands bestie โ stbmv and stbsv are identical-looking twins down at line 10, then stpmv switches from A/lda/K to plain Ap and hops to line 11. the s girlies really said "we contain multitudes" ๐๐
void cblas_stpsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const float * Ap, float * X, const CBLAS_INT incX)โ packed triangular solve, single precision ๐ defined at line 10 ofcblas_stpsv.c.void cblas_strmm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const CBLAS_INT N, const float alpha, const float * A, const CBLAS_INT lda, float * B, const CBLAS_INT ldb)โ triangular matrix-matrix multiply, single precision โจ defined at line 12 ofcblas_strmm.c.void cblas_strmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const float * A, const CBLAS_INT lda, float * X, const CBLAS_INT incX)โ triangular matrix-vector multiply, single precision ๐ธ defined at line 11 ofcblas_strmv.c.void cblas_strsm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const CBLAS_INT N, const float alpha, const float * A, const CBLAS_INT lda, float * B, const CBLAS_INT ldb)โ triangular solve with multiple right-hand sides, single precision ๐ defined at line 12 ofcblas_strsm.c.void cblas_strsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const float * A, const CBLAS_INT lda, float * X, const CBLAS_INT incX)โ triangular solve, single precision ๐ defined at line 10 ofcblas_strsv.c.void cblas_xerbla (CBLAS_INT p, const char * rout, const char * form, ...)โ the error-reporting bestie ๐ญ defined at line 12 ofcblas_xerbla.c.void cblas_zaxpy (const CBLAS_INT N, const void * alpha, const void * X, const CBLAS_INT incX, void * Y, const CBLAS_INT incY)โ double-complexy := alpha*x + y, the glow-up of the century ๐ฅ defined at line 11 ofcblas_zaxpy.c.void cblas_zcopy (const CBLAS_INT N, const void * X, const CBLAS_INT incX, void * Y, const CBLAS_INT incY)โ double-complex copy,y := xno cap ๐ฆ defined at line 11 ofcblas_zcopy.c.void cblas_zdotc_sub (const CBLAS_INT N, const void * X, const CBLAS_INT incX, const void * Y, const CBLAS_INT incY, void * dotc)โ double-complex conjugated dot product, result intodotc๐ defined at line 12 ofcblas_zdotc_sub.c.void cblas_zdotu_sub (const CBLAS_INT N, const void * X, const CBLAS_INT incX, const void * Y, const CBLAS_INT incY, void * dotu)โ double-complex unconjugated dot product, result intodotu๐ defined at line 12 ofcblas_zdotu_sub.c.void cblas_zdrot (const CBLAS_INT N, void * X, const CBLAS_INT incX, void * Y, const CBLAS_INT incY, const double c, const double s)โ double-complex plane rotation, bestie โจ defined at line 9 ofcblas_zdrot.c.void cblas_zdscal (const CBLAS_INT N, const double alpha, void * X, const CBLAS_INT incX)โ double-complex vector scaled by a realdouble, iconic ๐ defined at line 11 ofcblas_zdscal.c.void cblas_zgbmv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const CBLAS_INT KL, const CBLAS_INT KU, const void * alpha, const void * A, const CBLAS_INT lda, const void * X, const CBLAS_INT incX, const void * beta, void * Y, const CBLAS_INT incY)โ double-complex general banded matrix-vector multiply ๐ซถ defined at line 12 ofcblas_zgbmv.c.void cblas_zgemm (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, CBLAS_TRANSPOSE TransB, const CBLAS_INT M, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const void * A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb, const void * beta, void * C, const CBLAS_INT ldc)โ the double-complex general matrix-matrix multiply, main character energy ๐ defined at line 12 ofcblas_zgemm.c.void cblas_zgemmtr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_TRANSPOSE TransB, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const void * A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb, const void * beta, void * C, const CBLAS_INT ldc)โ double-complex triangular matrix-matrix multiply, slay ๐ defined at line 12 ofcblas_zgemmtr.c.void cblas_zgemv (CBLAS_LAYOUT layout, CBLAS_TRANSPOSE TransA, const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void * A, const CBLAS_INT lda, const void * X, const CBLAS_INT incX, const void * beta, void * Y, const CBLAS_INT incY)โ double-complex general matrix-vector multiply ๐ defined at line 12 ofcblas_zgemv.c.void cblas_zgerc (CBLAS_LAYOUT layout, const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void * X, const CBLAS_INT incX, const void * Y, const CBLAS_INT incY, void * A, const CBLAS_INT lda)โ double-complex conjugated rank-1 update ๐ defined at line 12 ofcblas_zgerc.c.void cblas_zgeru (CBLAS_LAYOUT layout, const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void * X, const CBLAS_INT incX, const void * Y, const CBLAS_INT incY, void * A, const CBLAS_INT lda)โ double-complex unconjugated rank-1 update ๐ defined at line 10 ofcblas_zgeru.c.void cblas_zhbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const void * A, const CBLAS_INT lda, const void * X, const CBLAS_INT incX, const void * beta, void * Y, const CBLAS_INT incY)โ double-complex Hermitian banded matrix-vector multiply ๐ defined at line 12 ofcblas_zhbmv.c.void cblas_zhemm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo, const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void * A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb, const void * beta, void * C, const CBLAS_INT ldc)โ double-complex Hermitian matrix-matrix multiply, obsessed ๐ป defined at line 12 ofcblas_zhemm.c.void cblas_zhemv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const void * alpha, const void * A, const CBLAS_INT lda, const void * X, const CBLAS_INT incX, const void * beta, void * Y, const CBLAS_INT incY)โ double-complex Hermitian matrix-vector multiply ๐ defined at line 12 ofcblas_zhemv.c.void cblas_zher (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const double alpha, const void * X, const CBLAS_INT incX, void * A, const CBLAS_INT lda)โ double-complex Hermitian rank-1 update, realalphabestie ๐ธ defined at line 12 ofcblas_zher.c.void cblas_zher2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const void * alpha, const void * X, const CBLAS_INT incX, const void * Y, const CBLAS_INT incY, void * A, const CBLAS_INT lda)โ double-complex Hermitian rank-2 update โจ defined at line 12 ofcblas_zher2.c.void cblas_zher2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE Trans, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const void * A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb, const double beta, void * C, const CBLAS_INT ldc)โ double-complex Hermitian rank-2k update, note the realdouble beta๐ฅ defined at line 12 ofcblas_zher2k.c.void cblas_zherk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE Trans, const CBLAS_INT N, const CBLAS_INT K, const double alpha, const void * A, const CBLAS_INT lda, const double beta, void * C, const CBLAS_INT ldc)โ double-complex Hermitian rank-k update, bothalphaandbetaare realdoubles ๐ defined at line 12 ofcblas_zherk.c.void cblas_zhpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const void * alpha, const void * Ap, const void * X, const CBLAS_INT incX, const void * beta, void * Y, const CBLAS_INT incY)โ double-complex Hermitian packed matrix-vector multiply ๐ฆ defined at line 12 ofcblas_zhpmv.c.void cblas_zhpr (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const double alpha, const void * X, const CBLAS_INT incX, void * A)โ double-complex Hermitian packed rank-1 update, realalphaagain ๐ defined at line 12 ofcblas_zhpr.c.void cblas_zhpr2 (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, const CBLAS_INT N, const void * alpha, const void * X, const CBLAS_INT incX, const void * Y, const CBLAS_INT incY, void * Ap)โ double-complex Hermitian packed rank-2 update ๐บ defined at line 12 ofcblas_zhpr2.c.void cblas_zrotg (void * a, void * b, double * c, void * s)โ double-complex Givens rotation generator, cute little four-arg icon ๐ง defined at line 9 ofcblas_zrotg.c.void cblas_zscal (const CBLAS_INT N, const void * alpha, void * X, const CBLAS_INT incX)โ double-complex vector scale by a complexalpha๐ defined at line 11 ofcblas_zscal.c.void cblas_zswap (const CBLAS_INT N, void * X, const CBLAS_INT incX, void * Y, const CBLAS_INT incY)โ double-complex swap, trading places fr fr ๐ defined at line 11 ofcblas_zswap.c.void cblas_zsymm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo, const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void * A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb, const void * beta, void * C, const CBLAS_INT ldc)โ double-complex symmetric matrix-matrix multiply ๐ defined at line 12 ofcblas_zsymm.c.void cblas_zsyr2k (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE Trans, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const void * A, const CBLAS_INT lda, const void * B, const CBLAS_INT ldb, const void * beta, void * C, const CBLAS_INT ldc)โ double-complex symmetric rank-2k update, complexbetathis time ๐ซถ defined at line 12 ofcblas_zsyr2k.c.void cblas_zsyrk (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE Trans, const CBLAS_INT N, const CBLAS_INT K, const void * alpha, const void * A, const CBLAS_INT lda, const void * beta, void * C, const CBLAS_INT ldc)โ double-complex symmetric rank-k update โจ defined at line 12 ofcblas_zsyrk.c.void cblas_ztbmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const void * A, const CBLAS_INT lda, void * X, const CBLAS_INT incX)โ double-complex triangular banded matrix-vector multiply ๐ defined at line 10 ofcblas_ztbmv.c.void cblas_ztbsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const CBLAS_INT K, const void * A, const CBLAS_INT lda, void * X, const CBLAS_INT incX)โ double-complex triangular banded solve ๐ธ defined at line 10 ofcblas_ztbsv.c.void cblas_ztpmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void * Ap, void * X, const CBLAS_INT incX)โ double-complex triangular packed matrix-vector multiply ๐ defined at line 10 ofcblas_ztpmv.c.void cblas_ztpsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void * Ap, void * X, const CBLAS_INT incX)โ double-complex triangular packed solve ๐ฆ defined at line 10 ofcblas_ztpsv.c.void cblas_ztrmm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void * A, const CBLAS_INT lda, void * B, const CBLAS_INT ldb)โ double-complex triangular matrix-matrix multiply, go off ๐ฅ defined at line 12 ofcblas_ztrmm.c.void cblas_ztrmv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void * A, const CBLAS_INT lda, void * X, const CBLAS_INT incX)โ double-complex triangular matrix-vector multiply ๐ง defined at line 10 ofcblas_ztrmv.c.void cblas_ztrsm (CBLAS_LAYOUT layout, CBLAS_SIDE Side, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT M, const CBLAS_INT N, const void * alpha, const void * A, const CBLAS_INT lda, void * B, const CBLAS_INT ldb)โ double-complex triangular solve with multiple right-hand sides ๐ defined at line 12 ofcblas_ztrsm.c.void cblas_ztrsv (CBLAS_LAYOUT layout, CBLAS_UPLO Uplo, CBLAS_TRANSPOSE TransA, CBLAS_DIAG Diag, const CBLAS_INT N, const void * A, const CBLAS_INT lda, void * X, const CBLAS_INT incX)โ double-complex triangular solve, the final boss of this list ๐ defined at line 10 ofcblas_ztrsv.c.
๐ AUTHOR ๐
Generated automatically by Doxygen for LAPACK from the source code. Not a human, not a vibe, just a tool doing its thing ๐คโจ
Okay bestie, that's the whole page โ every single cblas_ function from s all the way through z, all accounted for, no crumbs left behind ๐
The page you're reading is CBLAS/include/cblas.h(3) from LAPACK Version 3.12.0 โ cite it, love it, link it ๐ซถ Now go forth and call your BLAS routines with confidence, you absolute icon ๐๐
๐ฆ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 ยท custom
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms