const CBLAS_COL_MAJOR: i32 = 102;
const CBLAS_NO_TRANS: i32 = 111;
extern "C" {
fn cblas_sgemm(
order: i32,
transa: i32,
transb: i32,
m: i32,
n: i32,
k: i32,
alpha: f32,
a: *const f32,
lda: i32,
b: *const f32,
ldb: i32,
beta: f32,
c: *mut f32,
ldc: i32,
);
fn cblas_dgemm(
order: i32,
transa: i32,
transb: i32,
m: i32,
n: i32,
k: i32,
alpha: f64,
a: *const f64,
lda: i32,
b: *const f64,
ldb: i32,
beta: f64,
c: *mut f64,
ldc: i32,
);
fn cblas_sgemv(
order: i32,
trans: i32,
m: i32,
n: i32,
alpha: f32,
a: *const f32,
lda: i32,
x: *const f32,
incx: i32,
beta: f32,
y: *mut f32,
incy: i32,
);
fn cblas_dgemv(
order: i32,
trans: i32,
m: i32,
n: i32,
alpha: f64,
a: *const f64,
lda: i32,
x: *const f64,
incx: i32,
beta: f64,
y: *mut f64,
incy: i32,
);
}
#[inline]
pub unsafe fn sgemm(
a: *const f32,
b: *const f32,
c: *mut f32,
m: i32,
n: i32,
k: i32,
) {
cblas_sgemm(
CBLAS_COL_MAJOR,
CBLAS_NO_TRANS,
CBLAS_NO_TRANS,
m, n, k,
1.0,
a, m,
b, k,
0.0,
c, m,
);
}
#[inline]
pub unsafe fn dgemm(
a: *const f64,
b: *const f64,
c: *mut f64,
m: i32,
n: i32,
k: i32,
) {
cblas_dgemm(
CBLAS_COL_MAJOR,
CBLAS_NO_TRANS,
CBLAS_NO_TRANS,
m, n, k,
1.0,
a, m,
b, k,
0.0,
c, m,
);
}
#[inline]
pub unsafe fn sgemv(
a: *const f32,
x: *const f32,
y: *mut f32,
m: i32,
n: i32,
) {
cblas_sgemv(
CBLAS_COL_MAJOR,
CBLAS_NO_TRANS,
m, n,
1.0,
a, m,
x, 1,
0.0,
y, 1,
);
}
#[inline]
pub unsafe fn dgemv(
a: *const f64,
x: *const f64,
y: *mut f64,
m: i32,
n: i32,
) {
cblas_dgemv(
CBLAS_COL_MAJOR,
CBLAS_NO_TRANS,
m, n,
1.0,
a, m,
x, 1,
0.0,
y, 1,
);
}