Skip to content
This repository has been archived by the owner on Dec 9, 2018. It is now read-only.

Commit

Permalink
native: use new internal/asm API
Browse files Browse the repository at this point in the history
  • Loading branch information
kortschak committed Jan 23, 2017
1 parent b7e9c0d commit 34a5cb2
Show file tree
Hide file tree
Showing 13 changed files with 120 additions and 112 deletions.
10 changes: 5 additions & 5 deletions native/dgemm.go
Expand Up @@ -9,7 +9,7 @@ import (
"sync"

"github.com/gonum/blas"
"github.com/gonum/internal/asm"
"github.com/gonum/internal/asm/f64"
)

// Dgemm computes
Expand Down Expand Up @@ -206,7 +206,7 @@ func dgemmSerialNotNot(m, n, k int, a []float64, lda int, b []float64, ldb int,
for l, v := range a[i*lda : i*lda+k] {
tmp := alpha * v
if tmp != 0 {
asm.DaxpyUnitaryTo(ctmp, tmp, b[l*ldb:l*ldb+n], ctmp)
f64.AxpyUnitaryTo(ctmp, tmp, b[l*ldb:l*ldb+n], ctmp)
}
}
}
Expand All @@ -222,7 +222,7 @@ func dgemmSerialTransNot(m, n, k int, a []float64, lda int, b []float64, ldb int
tmp := alpha * v
if tmp != 0 {
ctmp := c[i*ldc : i*ldc+n]
asm.DaxpyUnitaryTo(ctmp, tmp, btmp, ctmp)
f64.AxpyUnitaryTo(ctmp, tmp, btmp, ctmp)
}
}
}
Expand All @@ -236,7 +236,7 @@ func dgemmSerialNotTrans(m, n, k int, a []float64, lda int, b []float64, ldb int
atmp := a[i*lda : i*lda+k]
ctmp := c[i*ldc : i*ldc+n]
for j := 0; j < n; j++ {
ctmp[j] += alpha * asm.DdotUnitary(atmp, b[j*ldb:j*ldb+k])
ctmp[j] += alpha * f64.DotUnitary(atmp, b[j*ldb:j*ldb+k])
}
}
}
Expand All @@ -250,7 +250,7 @@ func dgemmSerialTransTrans(m, n, k int, a []float64, lda int, b []float64, ldb i
tmp := alpha * v
if tmp != 0 {
ctmp := c[i*ldc : i*ldc+n]
asm.DaxpyInc(tmp, b[l:], ctmp, uintptr(n), uintptr(ldb), 1, 0, 0)
f64.AxpyInc(tmp, b[l:], ctmp, uintptr(n), uintptr(ldb), 1, 0, 0)
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions native/level1double.go
Expand Up @@ -8,7 +8,7 @@ import (
"math"

"github.com/gonum/blas"
"github.com/gonum/internal/asm"
"github.com/gonum/internal/asm/f64"
)

var _ blas.Float64Level1 = Implementation{}
Expand Down Expand Up @@ -276,7 +276,7 @@ func (Implementation) Daxpy(n int, alpha float64, x []float64, incX int, y []flo
if len(y) < n {
panic(badLenY)
}
asm.DaxpyUnitaryTo(y, alpha, x[:n], y)
f64.AxpyUnitaryTo(y, alpha, x[:n], y)
return
}
var ix, iy int
Expand All @@ -292,7 +292,7 @@ func (Implementation) Daxpy(n int, alpha float64, x []float64, incX int, y []flo
if iy >= len(y) || iy+(n-1)*incY >= len(y) {
panic(badLenY)
}
asm.DaxpyInc(alpha, x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy))
f64.AxpyInc(alpha, x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy))
}

// Drotg computes the plane rotation
Expand Down Expand Up @@ -601,7 +601,7 @@ func (Implementation) Dscal(n int, alpha float64, x []float64, incX int) {
return
}
if incX == 1 {
asm.DscalUnitary(alpha, x[:n])
f64.ScalUnitary(alpha, x[:n])
return
}
for ix := 0; ix < n*incX; ix += incX {
Expand Down
6 changes: 3 additions & 3 deletions native/level1double_ddot.go
Expand Up @@ -5,7 +5,7 @@
package native

import (
"github.com/gonum/internal/asm"
"github.com/gonum/internal/asm/f64"
)

// Ddot computes the dot product of the two vectors
Expand All @@ -30,7 +30,7 @@ func (Implementation) Ddot(n int, x []float64, incX int, y []float64, incY int)
if len(y) < n {
panic(badLenY)
}
return asm.DdotUnitary(x[:n], y)
return f64.DotUnitary(x[:n], y)
}
var ix, iy int
if incX < 0 {
Expand All @@ -45,5 +45,5 @@ func (Implementation) Ddot(n int, x []float64, incX int, y []float64, incY int)
if iy >= len(y) || iy+(n-1)*incY >= len(y) {
panic(badLenY)
}
return asm.DdotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy))
return f64.DotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy))
}
8 changes: 4 additions & 4 deletions native/level1single.go
Expand Up @@ -10,7 +10,7 @@ import (
math "github.com/gonum/blas/native/internal/math32"

"github.com/gonum/blas"
"github.com/gonum/internal/asm"
"github.com/gonum/internal/asm/f32"
)

var _ blas.Float32Level1 = Implementation{}
Expand Down Expand Up @@ -290,7 +290,7 @@ func (Implementation) Saxpy(n int, alpha float32, x []float32, incX int, y []flo
if len(y) < n {
panic(badLenY)
}
asm.SaxpyUnitaryTo(y, alpha, x[:n], y)
f32.AxpyUnitaryTo(y, alpha, x[:n], y)
return
}
var ix, iy int
Expand All @@ -306,7 +306,7 @@ func (Implementation) Saxpy(n int, alpha float32, x []float32, incX int, y []flo
if iy >= len(y) || iy+(n-1)*incY >= len(y) {
panic(badLenY)
}
asm.SaxpyInc(alpha, x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy))
f32.AxpyInc(alpha, x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy))
}

// Srotg computes the plane rotation
Expand Down Expand Up @@ -625,7 +625,7 @@ func (Implementation) Sscal(n int, alpha float32, x []float32, incX int) {
return
}
if incX == 1 {
asm.SscalUnitary(alpha, x[:n])
f32.ScalUnitary(alpha, x[:n])
return
}
for ix := 0; ix < n*incX; ix += incX {
Expand Down
6 changes: 3 additions & 3 deletions native/level1single_dsdot.go
Expand Up @@ -7,7 +7,7 @@
package native

import (
"github.com/gonum/internal/asm"
"github.com/gonum/internal/asm/f32"
)

// Dsdot computes the dot product of the two vectors
Expand All @@ -34,7 +34,7 @@ func (Implementation) Dsdot(n int, x []float32, incX int, y []float32, incY int)
if len(y) < n {
panic(badLenY)
}
return asm.DsdotUnitary(x[:n], y)
return f32.DdotUnitary(x[:n], y)
}
var ix, iy int
if incX < 0 {
Expand All @@ -49,5 +49,5 @@ func (Implementation) Dsdot(n int, x []float32, incX int, y []float32, incY int)
if iy >= len(y) || iy+(n-1)*incY >= len(y) {
panic(badLenY)
}
return asm.DsdotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy))
return f32.DdotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy))
}
6 changes: 3 additions & 3 deletions native/level1single_sdot.go
Expand Up @@ -7,7 +7,7 @@
package native

import (
"github.com/gonum/internal/asm"
"github.com/gonum/internal/asm/f32"
)

// Sdot computes the dot product of the two vectors
Expand All @@ -34,7 +34,7 @@ func (Implementation) Sdot(n int, x []float32, incX int, y []float32, incY int)
if len(y) < n {
panic(badLenY)
}
return asm.SdotUnitary(x[:n], y)
return f32.DotUnitary(x[:n], y)
}
var ix, iy int
if incX < 0 {
Expand All @@ -49,5 +49,5 @@ func (Implementation) Sdot(n int, x []float32, incX int, y []float32, incY int)
if iy >= len(y) || iy+(n-1)*incY >= len(y) {
panic(badLenY)
}
return asm.SdotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy))
return f32.DotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy))
}
6 changes: 3 additions & 3 deletions native/level1single_sdsdot.go
Expand Up @@ -7,7 +7,7 @@
package native

import (
"github.com/gonum/internal/asm"
"github.com/gonum/internal/asm/f32"
)

// Sdsdot computes the dot product of the two vectors plus a constant
Expand All @@ -34,7 +34,7 @@ func (Implementation) Sdsdot(n int, alpha float32, x []float32, incX int, y []fl
if len(y) < n {
panic(badLenY)
}
return alpha + float32(asm.DsdotUnitary(x[:n], y))
return alpha + float32(f32.DdotUnitary(x[:n], y))
}
var ix, iy int
if incX < 0 {
Expand All @@ -49,5 +49,5 @@ func (Implementation) Sdsdot(n int, alpha float32, x []float32, incX int, y []fl
if iy >= len(y) || iy+(n-1)*incY >= len(y) {
panic(badLenY)
}
return alpha + float32(asm.DsdotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy)))
return alpha + float32(f32.DdotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy)))
}
14 changes: 7 additions & 7 deletions native/level2double.go
Expand Up @@ -6,7 +6,7 @@ package native

import (
"github.com/gonum/blas"
"github.com/gonum/internal/asm"
"github.com/gonum/internal/asm/f64"
)

var _ blas.Float64Level2 = Implementation{}
Expand Down Expand Up @@ -84,13 +84,13 @@ func (Implementation) Dgemv(tA blas.Transpose, m, n int, alpha float64, a []floa
if tA == blas.NoTrans {
if incX == 1 && incY == 1 {
for i := 0; i < m; i++ {
y[i] += alpha * asm.DdotUnitary(a[lda*i:lda*i+n], x)
y[i] += alpha * f64.DotUnitary(a[lda*i:lda*i+n], x)
}
return
}
iy := ky
for i := 0; i < m; i++ {
y[iy] += alpha * asm.DdotInc(x, a[lda*i:lda*i+n], uintptr(n), uintptr(incX), 1, uintptr(kx), 0)
y[iy] += alpha * f64.DotInc(x, a[lda*i:lda*i+n], uintptr(n), uintptr(incX), 1, uintptr(kx), 0)
iy += incY
}
return
Expand All @@ -100,7 +100,7 @@ func (Implementation) Dgemv(tA blas.Transpose, m, n int, alpha float64, a []floa
for i := 0; i < m; i++ {
tmp := alpha * x[i]
if tmp != 0 {
asm.DaxpyUnitaryTo(y, tmp, a[lda*i:lda*i+n], y)
f64.AxpyUnitaryTo(y, tmp, a[lda*i:lda*i+n], y)
}
}
return
Expand All @@ -109,7 +109,7 @@ func (Implementation) Dgemv(tA blas.Transpose, m, n int, alpha float64, a []floa
for i := 0; i < m; i++ {
tmp := alpha * x[ix]
if tmp != 0 {
asm.DaxpyInc(tmp, a[lda*i:lda*i+n], y, uintptr(n), 1, uintptr(incY), 0, uintptr(ky))
f64.AxpyInc(tmp, a[lda*i:lda*i+n], y, uintptr(n), 1, uintptr(incY), 0, uintptr(ky))
}
ix += incX
}
Expand Down Expand Up @@ -170,7 +170,7 @@ func (Implementation) Dger(m, n int, alpha float64, x []float64, incX int, y []f
tmp := alpha * xv
if tmp != 0 {
atmp := a[i*lda : i*lda+n]
asm.DaxpyUnitaryTo(atmp, tmp, y, atmp)
f64.AxpyUnitaryTo(atmp, tmp, y, atmp)
}
}
return
Expand All @@ -180,7 +180,7 @@ func (Implementation) Dger(m, n int, alpha float64, x []float64, incX int, y []f
for i := 0; i < m; i++ {
tmp := alpha * x[ix]
if tmp != 0 {
asm.DaxpyInc(tmp, y, a[i*lda:i*lda+n], uintptr(n), uintptr(incY), 1, uintptr(ky), 0)
f64.AxpyInc(tmp, y, a[i*lda:i*lda+n], uintptr(n), uintptr(incY), 1, uintptr(ky), 0)
}
ix += incX
}
Expand Down
14 changes: 7 additions & 7 deletions native/level2single.go
Expand Up @@ -8,7 +8,7 @@ package native

import (
"github.com/gonum/blas"
"github.com/gonum/internal/asm"
"github.com/gonum/internal/asm/f32"
)

var _ blas.Float32Level2 = Implementation{}
Expand Down Expand Up @@ -88,13 +88,13 @@ func (Implementation) Sgemv(tA blas.Transpose, m, n int, alpha float32, a []floa
if tA == blas.NoTrans {
if incX == 1 && incY == 1 {
for i := 0; i < m; i++ {
y[i] += alpha * asm.SdotUnitary(a[lda*i:lda*i+n], x)
y[i] += alpha * f32.DotUnitary(a[lda*i:lda*i+n], x)
}
return
}
iy := ky
for i := 0; i < m; i++ {
y[iy] += alpha * asm.SdotInc(x, a[lda*i:lda*i+n], uintptr(n), uintptr(incX), 1, uintptr(kx), 0)
y[iy] += alpha * f32.DotInc(x, a[lda*i:lda*i+n], uintptr(n), uintptr(incX), 1, uintptr(kx), 0)
iy += incY
}
return
Expand All @@ -104,7 +104,7 @@ func (Implementation) Sgemv(tA blas.Transpose, m, n int, alpha float32, a []floa
for i := 0; i < m; i++ {
tmp := alpha * x[i]
if tmp != 0 {
asm.SaxpyUnitaryTo(y, tmp, a[lda*i:lda*i+n], y)
f32.AxpyUnitaryTo(y, tmp, a[lda*i:lda*i+n], y)
}
}
return
Expand All @@ -113,7 +113,7 @@ func (Implementation) Sgemv(tA blas.Transpose, m, n int, alpha float32, a []floa
for i := 0; i < m; i++ {
tmp := alpha * x[ix]
if tmp != 0 {
asm.SaxpyInc(tmp, a[lda*i:lda*i+n], y, uintptr(n), 1, uintptr(incY), 0, uintptr(ky))
f32.AxpyInc(tmp, a[lda*i:lda*i+n], y, uintptr(n), 1, uintptr(incY), 0, uintptr(ky))
}
ix += incX
}
Expand Down Expand Up @@ -176,7 +176,7 @@ func (Implementation) Sger(m, n int, alpha float32, x []float32, incX int, y []f
tmp := alpha * xv
if tmp != 0 {
atmp := a[i*lda : i*lda+n]
asm.SaxpyUnitaryTo(atmp, tmp, y, atmp)
f32.AxpyUnitaryTo(atmp, tmp, y, atmp)
}
}
return
Expand All @@ -186,7 +186,7 @@ func (Implementation) Sger(m, n int, alpha float32, x []float32, incX int, y []f
for i := 0; i < m; i++ {
tmp := alpha * x[ix]
if tmp != 0 {
asm.SaxpyInc(tmp, y, a[i*lda:i*lda+n], uintptr(n), uintptr(incY), 1, uintptr(ky), 0)
f32.AxpyInc(tmp, y, a[i*lda:i*lda+n], uintptr(n), uintptr(incY), 1, uintptr(ky), 0)
}
ix += incX
}
Expand Down

0 comments on commit 34a5cb2

Please sign in to comment.