作者:hrautil
项目:goma
func vinvscal(X *cmat.FloatMatrix, alpha float64, N int) {
var x C.mvec_t
xr, _ := X.Size()
x.md = (*C.double)(unsafe.Pointer(&X.Data()[0]))
x.inc = C.int(1)
if xr == 1 {
x.inc = C.int(X.Stride())
}
C.__d_vec_invscal(
(*C.mvec_t)(unsafe.Pointer(&x)), C.double(alpha), C.int(N))
return
}
作者:hrautil
项目:goma
func axpby(Y, X *cmat.FloatMatrix, alpha, beta float64, N int) {
var x, y C.mvec_t
xr, _ := X.Size()
x.md = (*C.double)(unsafe.Pointer(&X.Data()[0]))
x.inc = C.int(1)
if xr == 1 {
x.inc = C.int(X.Stride())
}
yr, _ := Y.Size()
y.md = (*C.double)(unsafe.Pointer(&Y.Data()[0]))
y.inc = C.int(1)
if yr == 1 {
y.inc = C.int(Y.Stride())
}
if beta == 1.0 {
C.__d_vec_axpy(
(*C.mvec_t)(unsafe.Pointer(&y)),
(*C.mvec_t)(unsafe.Pointer(&x)),
C.double(alpha), C.int(N))
} else {
C.__d_vec_axpby(
(*C.mvec_t)(unsafe.Pointer(&y)),
(*C.mvec_t)(unsafe.Pointer(&x)),
C.double(alpha), C.double(beta), C.int(N))
}
return
}
作者:hrautil
项目:goma
func updtrmv(A, X, Y *cmat.FloatMatrix, alpha float64, bits, N, M int) error {
var Am C.mdata_t
var Xm, Ym C.mvec_t
xr, _ := X.Size()
yr, _ := Y.Size()
Am.md = (*C.double)(unsafe.Pointer(&A.Data()[0]))
Am.step = C.int(A.Stride())
Xm.md = (*C.double)(unsafe.Pointer(&X.Data()[0]))
Ym.md = (*C.double)(unsafe.Pointer(&Y.Data()[0]))
Ym.inc = C.int(1)
Xm.inc = C.int(1)
// if row vectors, change increment
if xr == 1 {
Xm.inc = C.int(X.Stride())
}
if yr == 1 {
Ym.inc = C.int(Y.Stride())
}
C.__d_update_trmv_unb(
(*C.mdata_t)(unsafe.Pointer(&Am)),
(*C.mvec_t)(unsafe.Pointer(&Xm)),
(*C.mvec_t)(unsafe.Pointer(&Ym)),
C.double(alpha), C.int(bits), C.int(N), C.int(M))
return nil
}
作者:hrautil
项目:goma
func sum(X *cmat.FloatMatrix, N int) float64 {
var x C.mvec_t
var dc C.double
xr, _ := X.Size()
x.md = (*C.double)(unsafe.Pointer(&X.Data()[0]))
x.inc = C.int(1)
if xr == 1 {
x.inc = C.int(X.Stride())
}
dc = C.__d_vec_sum_recursive(
(*C.mvec_t)(unsafe.Pointer(&x)), C.int(N))
return float64(dc)
}
作者:sguzw
项目:algorith
// scaling: X = alpha*X
func DScal(X []float64, alpha float64, incX, N int) {
var Xv C.mvec_t
if X == nil || N <= 0 {
return
}
Xv.md = (*C.double)(unsafe.Pointer(&X[0]))
Xv.inc = C.int(incX)
C.dvec_scal(
(*C.mvec_t)(unsafe.Pointer(&Xv)),
C.double(alpha), C.int(N))
}
作者:hrautil
项目:goma
func gemv(Y, A, X *cmat.FloatMatrix, alpha, beta float64, bits, S, L, R, E int) {
var Am C.mdata_t
var Xm, Ym C.mvec_t
xr, _ := X.Size()
yr, _ := Y.Size()
Am.md = (*C.double)(unsafe.Pointer(&A.Data()[0]))
Am.step = C.int(A.Stride())
Xm.md = (*C.double)(unsafe.Pointer(&X.Data()[0]))
Ym.md = (*C.double)(unsafe.Pointer(&Y.Data()[0]))
Ym.inc = C.int(1)
Xm.inc = C.int(1)
// if row vectors, change increment
if xr == 1 {
Xm.inc = C.int(X.Stride())
}
if yr == 1 {
Ym.inc = C.int(Y.Stride())
}
C.__d_gemv_unb(
(*C.mvec_t)(unsafe.Pointer(&Ym)),
(*C.mdata_t)(unsafe.Pointer(&Am)),
(*C.mvec_t)(unsafe.Pointer(&Xm)),
C.double(alpha),
/*C.double(beta),*/
C.int(bits),
C.int(S), C.int(L), C.int(R), C.int(E))
}
作者:hrautil
项目:goma
func iamax(X *cmat.FloatMatrix, N int) int {
var x C.mvec_t
var ix C.int
xr, _ := X.Size()
x.md = (*C.double)(unsafe.Pointer(&X.Data()[0]))
x.inc = C.int(1)
if xr == 1 {
x.inc = C.int(X.Stride())
}
ix = C.__d_vec_iamax(
(*C.mvec_t)(unsafe.Pointer(&x)), C.int(N))
return int(ix)
}
作者:sguzw
项目:algorith
// return: sum (abs(X[i]))^2; Euclidaen norm
func DNorm2(X []float64, incX, N int) float64 {
var nrm C.double
var Xv C.mvec_t
if X == nil || N <= 0 {
return 0.0
}
Xv.md = (*C.double)(unsafe.Pointer(&X[0]))
Xv.inc = C.int(incX)
nrm = C.dvec_nrm2(
(*C.mvec_t)(unsafe.Pointer(&Xv)),
C.int(N))
return float64(nrm)
}
作者:sguzw
项目:algorith
// return: index of max absolute value
func DIAMax(X []float64, incX, N int) int {
var ix C.int
var Xv C.mvec_t
if X == nil || N <= 0 {
return -1
}
Xv.md = (*C.double)(unsafe.Pointer(&X[0]))
Xv.inc = C.int(incX)
ix = C.dvec_iamax(
(*C.mvec_t)(unsafe.Pointer(&Xv)),
C.int(N))
return int(ix)
}
作者:sguzw
项目:algorith
// return: sum (abs(X[i]))
func DAsum(X []float64, incX, N int) float64 {
var asum C.double
var Xv C.mvec_t
if X == nil || N <= 0 {
return 0.0
}
Xv.md = (*C.double)(unsafe.Pointer(&X[0]))
Xv.inc = C.int(incX)
asum = C.dvec_asum(
(*C.mvec_t)(unsafe.Pointer(&Xv)),
C.int(N))
return float64(asum)
}
作者:sguzw
项目:algorith
func DTrimvLowerTransA(X, A []float64, unit bool, incX, ldA, N, NB int) {
var Xv C.mvec_t
var Am C.mdata_t
Xv.md = (*C.double)(unsafe.Pointer(&X[0]))
Xv.inc = C.int(incX)
Am.md = (*C.double)(unsafe.Pointer(&A[0]))
Am.step = C.int(ldA)
var flags Flags = LOWER | TRANSA
if unit {
flags |= UNIT
}
C.dmvec_trid_unb(
(*C.mvec_t)(unsafe.Pointer(&Xv)),
(*C.mdata_t)(unsafe.Pointer(&Am)),
C.int(flags), C.int(N))
}
作者:sguzw
项目:algorith
// blas TSMV; blocked version
func DSolveBlkMV(X, A []float64, flags Flags, incX, ldA, N, NB int) {
var Xv C.mvec_t
var Am C.mdata_t
if A == nil || X == nil {
return
}
Xv.md = (*C.double)(unsafe.Pointer(&X[0]))
Xv.inc = C.int(incX)
Am.md = (*C.double)(unsafe.Pointer(&A[0]))
Am.step = C.int(ldA)
C.dmvec_solve_blocked(
(*C.mvec_t)(unsafe.Pointer(&Xv)),
(*C.mdata_t)(unsafe.Pointer(&Am)),
C.int(flags), C.int(N), C.int(NB))
}
作者:sguzw
项目:algorith
// blas SYR; blocked version
func DSymmRankMV(A, X []float64, alpha float64, flags Flags, ldA, incX, S, L, NB int) {
var Xv C.mvec_t
var Am C.mdata_t
if A == nil || X == nil {
return
}
Xv.md = (*C.double)(unsafe.Pointer(&X[0]))
Xv.inc = C.int(incX)
Am.md = (*C.double)(unsafe.Pointer(&A[0]))
Am.step = C.int(ldA)
C.dmvec_symv_rank(
(*C.mdata_t)(unsafe.Pointer(&Am)),
(*C.mvec_t)(unsafe.Pointer(&Xv)),
C.double(alpha), C.int(flags),
C.int(S), C.int(L), C.int(NB))
}
作者:sguzw
项目:algorith
// blas TRMV; unblocked
func DTrimvUnblkMV(X, A []float64, flags Flags, incX, ldA, N int) {
var Xv C.mvec_t
var Am C.mdata_t
if A == nil || X == nil {
return
}
Xv.md = (*C.double)(unsafe.Pointer(&X[0]))
Xv.inc = C.int(incX)
Am.md = (*C.double)(unsafe.Pointer(&A[0]))
Am.step = C.int(ldA)
C.dmvec_trid_unb(
(*C.mvec_t)(unsafe.Pointer(&Xv)),
(*C.mdata_t)(unsafe.Pointer(&Am)),
C.int(flags), C.int(N))
}
作者:sguzw
项目:algorith
func DSolveLowerBlocked(X, A []float64, unit bool, incX, ldA, N, NB int) {
var Xv C.mvec_t
var Am C.mdata_t
Xv.md = (*C.double)(unsafe.Pointer(&X[0]))
Xv.inc = C.int(incX)
Am.md = (*C.double)(unsafe.Pointer(&A[0]))
Am.step = C.int(ldA)
var flags Flags = LOWER
if unit {
flags |= UNIT
}
C.dmvec_solve_blocked(
(*C.mvec_t)(unsafe.Pointer(&Xv)),
(*C.mdata_t)(unsafe.Pointer(&Am)),
C.int(flags), C.int(N), C.int(NB))
}
作者:hrautil
项目:goma
func trmv(X, A *cmat.FloatMatrix, alpha float64, bits, N int) error {
var Am C.mdata_t
var Xm C.mvec_t
xr, _ := X.Size()
Am.md = (*C.double)(unsafe.Pointer(&A.Data()[0]))
Am.step = C.int(A.Stride())
Xm.md = (*C.double)(unsafe.Pointer(&X.Data()[0]))
Xm.inc = C.int(1)
// if row vectors, change increment
if xr == 1 {
Xm.inc = C.int(X.Stride())
}
C.__d_trmv_unb(
(*C.mvec_t)(unsafe.Pointer(&Xm)),
(*C.mdata_t)(unsafe.Pointer(&Am)),
C.double(alpha), C.int(bits), C.int(N))
return nil
}
作者:sguzw
项目:algorith
// Z[0] = beta*Z[0] + alpha * X * Y
func DDotSum(Z, X, Y []float64, alpha, beta float64, incZ, incX, incY, N int) {
var Zv C.mvec_t
var Xv C.mvec_t
var Yv C.mvec_t
if Z == nil || X == nil || Y == nil || N <= 0 {
return
}
Xv.md = (*C.double)(unsafe.Pointer(&X[0]))
Xv.inc = C.int(incX)
Zv.md = (*C.double)(unsafe.Pointer(&Z[0]))
Zv.inc = C.int(incZ)
Yv.md = (*C.double)(unsafe.Pointer(&Y[0]))
Yv.inc = C.int(incY)
C.dvec_dots(
(*C.mvec_t)(unsafe.Pointer(&Zv)),
(*C.mvec_t)(unsafe.Pointer(&Xv)),
(*C.mvec_t)(unsafe.Pointer(&Yv)),
C.double(alpha), C.double(beta),
C.int(N))
}
作者:hrautil
项目:goma
func vswap(X, Y *cmat.FloatMatrix, N int) {
var x, y C.mvec_t
xr, _ := X.Size()
x.md = (*C.double)(unsafe.Pointer(&X.Data()[0]))
x.inc = C.int(1)
if xr == 1 {
x.inc = C.int(X.Stride())
}
yr, _ := Y.Size()
y.md = (*C.double)(unsafe.Pointer(&Y.Data()[0]))
y.inc = C.int(1)
if yr == 1 {
y.inc = C.int(Y.Stride())
}
C.__d_vec_swap(
(*C.mvec_t)(unsafe.Pointer(&x)),
(*C.mvec_t)(unsafe.Pointer(&y)), C.int(N))
return
}
作者:hrautil
项目:goma
func dot(X, Y *cmat.FloatMatrix, N int) float64 {
var x, y C.mvec_t
var dc C.double
xr, _ := X.Size()
x.md = (*C.double)(unsafe.Pointer(&X.Data()[0]))
x.inc = C.int(1)
if xr == 1 {
x.inc = C.int(X.Stride())
}
yr, _ := Y.Size()
y.md = (*C.double)(unsafe.Pointer(&Y.Data()[0]))
y.inc = C.int(1)
if yr == 1 {
y.inc = C.int(Y.Stride())
}
dc = C.__d_vec_dot_recursive(
(*C.mvec_t)(unsafe.Pointer(&x)),
(*C.mvec_t)(unsafe.Pointer(&y)), C.int(N))
return float64(dc)
}
作者:sguzw
项目:algorith
// copying: X := Y
func DCopy(X, Y []float64, incX, incY, N int) {
var Xv C.mvec_t
var Yv C.mvec_t
if X == nil || Y == nil || N <= 0 {
return
}
Xv.md = (*C.double)(unsafe.Pointer(&X[0]))
Xv.inc = C.int(incX)
Yv.md = (*C.double)(unsafe.Pointer(&Y[0]))
Yv.inc = C.int(incY)
C.dvec_copy(
(*C.mvec_t)(unsafe.Pointer(&Xv)),
(*C.mvec_t)(unsafe.Pointer(&Yv)),
C.int(N))
}