Skip to content

K1 remainder: float32 kernels, Dot1D and the dot inside GEMM, Maximum/Minimum move to go-simd/floats #98

Open

Description

@tannevaled

Tracking issue for the part of K1 of go-scikit/roadmap#27 (docs/performance-campaign.md, section 4.3) that #97 (v0.37.0) did not move into go-simd/floats. Each is a kernel go-ndarray keeps privately; the rule is that a kernel lives once, in the lowest library every user can import.

  • float32 elementwise: Bin32 (add32/sub32/mul32/div32: SSE2 on amd64, NEON on arm64, VSX, LSX, RVV, vector facility), Sqrt32 (internal/kernels/bin32.go)
  • float32 extrema Max32/Min32 (extrema32*.go), with the signed-zero contract of go-simd/floats (issue filed there)
  • AddBlocks8F32, the eight-accumulator pairwise block of the float32 sum (blocks8*.go, used by typed.go's pairwise sum)
  • Dot1D / Dot1DP, and the dot inside GEMM/MatVecP (dotFMA, gemm_amd64.go): floats.Dot is FMA and lane-blocked like it; the change needs the tolerance its tests use and a measurement against the BLAS-backed np.dot
  • Maximum/Minimum (pairwise, NaN-propagating; scalar Go in ndarray today)
  • the ppc64le, loong64, riscv64 and s390x float64 kernels (see the go-simd/floats issue on porting them with NumPy's order)
  • then delete ndarray's copies and its dead sum_<arch>.s; GEMM stays here (campaign rule: every user of dense matrix products already imports ndarray)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions