Giter Club home page Giter Club logo

blas's Introduction

Gonum

Build status Build status codecov.io go.dev reference GoDoc Go Report Card stability-unstable

Installation

The core packages of the Gonum suite are written in pure Go with some assembly. Installation is done using go get.

go get -u gonum.org/v1/gonum/...

Supported Go versions

Gonum supports and tests using the gc compiler on the two most recent Go releases on Linux (386, amd64 and arm64), macOS and Windows (both on amd64).

Note that floating point behavior may differ between compiler versions and between architectures due to differences in floating point operation implementations.

Release schedule

The Gonum modules are released on a six-month release schedule, aligned with the Go releases. i.e.: when Go-1.x is released, Gonum-v0.n.0 is released around the same time. Six months after, Go-1.x+1 is released, and Gonum-v0.n+1.0 as well.

The release schedule, based on the current Go release schedule is thus:

  • Gonum-v0.n.0: February
  • Gonum-v0.n+1.0: August

Build tags

The Gonum packages use a variety of build tags to set non-standard build conditions. Building Gonum applications will work without knowing how to use these tags, but they can be used during testing and to control the use of assembly and CGO code.

The current list of non-internal tags is as follows:

  • safe — do not use assembly or unsafe
  • bounds — use bounds checks even in internal calls
  • noasm — do not use assembly implementations
  • tomita — use Tomita, Tanaka, Takahashi pivot choice for maximimal clique calculation, otherwise use random pivot (only in topo package)

Issues TODOs

If you find any bugs, feel free to file an issue on the github issue tracker. Discussions on API changes, added features, code review, or similar requests are preferred on the gonum-dev Google Group.

https://groups.google.com/forum/#!forum/gonum-dev

License

Original code is licensed under the Gonum License found in the LICENSE file. Portions of the code are subject to the additional licenses found in THIRD_PARTY_LICENSES. All third party code is licensed either under a BSD or MIT license.

Code in graph/formats/dot is dual licensed Public Domain Dedication and Gonum License, and users are free to choose the license which suits their needs for this code.

The W3C test suites in graph/formats/rdf are distributed under both the W3C Test Suite License and the W3C 3-clause BSD License.

blas's People

Contributors

btracey avatar fhs avatar jonlawlor avatar kortschak avatar pontusmelke avatar sbinet avatar shawnps avatar vladimir-ch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

blas's Issues

Kx value in Dtpmv

In blas/goblas, Dtpmv has the following lines of code:

  var kx int
if incX <= 0 {
    kx = -(n - 1) * incX
} else if incX != 1 {
    kx = 0
}

Shouldn't this say kx = 1 instead of kx = 0?

blas: Rewrite genBlas.pl in Go

I propose to rewrite genBlas.pl in Go.

This allows blas.h and blas.go to be generated and also provides the possibility to add doc comments to the methods (these would come from the doc comments in goblas when they are completed).

Incorrect matrix length check for Dtrsm

In Dtrsm, the size of a is checked assuming it is either an m x n or an n x m matrix. However, this is incorrect. If it is on the left, a is an m x m matrix, and if it is on the right, a is an n x n matrix.

Changing the lines to
if s == blas.Left {
if lda_(m-1)+m > len(a) || lda < max(1, m) {
panic("cblas: index of a out of range")
}
} else {
if lda_(n-1)+n > len(a) || lda < max(1, n) {
panic("cblas: index of a out of range")
}
}

fixes the problem.

go test for cblas fails on osx

I tried running go test in the gonum/blas/cblas directory and it fails on OSX Yosemite (10.10.1) with

jonlawlor: ~/go/src/github.com/gonum/blas/cblas $ go test
# github.com/gonum/blas/cblas
Undefined symbols for architecture x86_64:
  "_cblas_caxpy", referenced from:
      __cgo_00cfc60828b5_Cfunc_cblas_caxpy in blas.cgo2.o
     (maybe you meant: __cgo_00cfc60828b5_Cfunc_cblas_caxpy)
  "_cblas_ccopy", referenced from:
      __cgo_00cfc60828b5_Cfunc_cblas_ccopy in blas.cgo2.o
     (maybe you meant: __cgo_00cfc60828b5_Cfunc_cblas_ccopy)
  "_cblas_cdotc_sub", referenced from:
      __cgo_00cfc60828b5_Cfunc_cblas_cdotc_sub in blas.cgo2.o
     (maybe you meant: __cgo_00cfc60828b5_Cfunc_cblas_cdotc_sub)
  "_cblas_cdotu_sub", referenced from:
      __cgo_00cfc60828b5_Cfunc_cblas_cdotu_sub in blas.cgo2.o
     (maybe you meant: __cgo_00cfc60828b5_Cfunc_cblas_cdotu_sub)
... and a lot more

References to cblas in matrix still work. I tried installing from scratch on a different mac, where I've never fiddled with various blas libraries:

go get github.com/gonum/blas
go get github.com/gonum/floats
cd $GOPATH/src/github.com/gonum/blas/cblas
CGO_LDFLAGS="-framework Accelerate" go install

but it produced the same result.

cgo/daxpy crashes when n == 0

If n == 0, daxpy should just return, not crash with a non-zero increment. I assume this is a problem in more than just Daxpy. I have a test for this (created to fix #137).

benchmark stubs

It looks like BenchmarkDgemmLgSmLg and BenchmarkDgemmLgLgSm are benchmarking the same thing. Also, BenchmarkDgemmHgHgSm should probably be called BenchmarkDgemmHgSmHg.

Given that there are 4*4*4*2*2 = 256 possible benchmarks for Dgemm, you probably don't want to autogenerate them all. That's just too many benchmarks for a single function.

In that case, you probably want to enumerate through the cases in a systematic way so that these kinds of mistakes don't creep in. It might also help to write each BenchmarkXxx strub within a single line, forming a kind of table:

var (
    Bench = testblas.DgemmBenchmark
    Lg = testbench.LargeMat
    ... etc.
)
func BenchmarkDgemmLgSmLg(b *testing.B) { Bench(Blas{}, Lg, Sm, Lg, NT, NT) }
func BenchmarkDgemmLgLgSm(b *testing.B) { Bench(Blas{}, Lg, Lg, Sm, NT, NT) }
... etc.

native/all: Need to explicitly check length of input slices

In native, we use sub-slicing a lot, for example to compute dot products. However, we do not explicitly check the length of input slices. If the input slice itself comes from a larger slice, some of the routines will not panic. See for example the test program:

package main

import (
    "github.com/gonum/blas"
    "github.com/gonum/blas/native"
)

func main() {
    a := make([]float64, 0, 1000)
    x := make([]float64, 10)
    y := make([]float64, 10)

    native.Implementation{}.Dgemv(blas.NoTrans, 10, 10, 1, a, 10, x, 1, 0, y, 1)
}

The length of a is 0, but slicing extends a beyond its original length.

Please help - getting blas64 to work with OpenBLAS

Hi,

I'm trying to use the gonum/blas library with the OpenBLAS library but I can't figure it out.

My project structure is:

OpenBLAS_gonum
    |-- bin
    |-- pkg
    |-- src
          |-- main.go <- my source file
          |-- lib
               |-- OpenBLAS
                     |-- bin
                          |-- libopenblas.dll
                     |-- include
                          |-- (...) multiple .h files
                     |-- lib
                          |-- cmake
                                |-- openblas
                                      |-- OpenBLASConfig.cmake
                                      |-- OpenBLASConfigVersion.cmake
                          |-- libopenblas.a
                          |-- libopenblas.dll.a
                     |-- readme.txt

The code I have is (main.go):

package main

import (
    "fmt"

    "github.com/gonum/blas/cgo"
    "github.com/gonum/blas/blas64"
)

func main() {
    blas64.Use(cgo.Implementation{})
    v := blas64.Vector{Inc: 1, Data: []float64{1, 1, 1}}
    fmt.Println("v has length:", blas64.Nrm2(len(v.Data), v))
}

I set the environment variable:

CGO_LDFLAGS="-L${SRCDIR}/lib/OpenBLAS/lib -lopenblas"

I've tried setting this to different paths such as -L${SRCDIR}/lib/OpenBLAS or even the full path but I had no success.

The build command is:

C:\Go\bin\go.exe build -o "C:\Projects\PLAYGROUND\GO\OpenBLAS_gonum\bin\run_main.exe" "C:\Projects\PLAYGROUND\GO\OpenBLAS_gonum\src\main.go"

The error I get is:

# github.com/gonum/blas/cgo
realgcc.exe: warning: '-x c' after last input file has no effect
realgcc.exe: fatal error: no input files
compilation terminated.

I've also tried adding this at the top (after package main)

// #cgo LDFLAGS: -L${SRCDIR}/lib/OpenBLAS/lib -lopenblas
import "C"

My OS is Windows 7 x64 and I've downloaded the binary package for OpenBLAS (so I don't have to compile it).

Please help!

Thanks!

Dtrsm does not give correct results

There is something wrong with the RowMajor implementation of Dtrsm. Trying to solve an 8x16 with an 8x1 matrix gives an error that lda is too large. The check needs to be different when it is row major. Even when this check is removed, it gives a different answer than cblas

Drotmg is crazy

This seems to continue the saga of Drotmg. This test passes on travis, but fails on my laptop (ubuntu 14.04) using OpenBLAS (deb package).

The two failing cases are blas.Diagonal with a non-zero first column.

$ CGO_LDFLAGS="-lopenblas" go test -run Drotmg
--- FAIL: TestDrotmg (0.00s)
    level1double.go:1622: drotmg H mismatch AbsQ1_LT_AbsQU__D2_Pos: expected [0.4166666666666667 0 0 0.625], found [0 0.4166666666666667 0 0.625]
    level1double.go:1622: drotmg H mismatch D1=D2_X1=X2: expected [1 0 0 1], found [0 1 0 1]
FAIL
exit status 1
FAIL    github.com/gonum/blas/cblas 0.007s

go tool cover -html=xxx shows no coverage for blas/cblas

When I run go test -cover for cblas the coverage percentage appears to be right, but when I run go test -coverprofile=coverage.out and then go tool cover -html=coverage.out it shows only one line covered. When running go tool cover -func=coverage.out the percentages show that many of the functions should actually be covered.

I suspect this is a problem with the go tool, but I'd like to verify that other people are seeing this as well. It appears to be cgo related.

cgo: missing length check

Going through now, Drotm check is incorrect if incX or incY < 0. It should match the other functions (Daxpy, etc.)

cc1.exe: sorry, unimplemented: 64-bit mode not compiled in

What has gone wrong when you are greeted with that error?

tomtz@SW-LAPTOP-250 MINGW64 /C/Users/tomtz/dev
$ CGO_LDFLAGS="-lmkl_rt" go install github.com/gonum/blas/cgo

github.com/gonum/blas/cgo

cc1.exe: sorry, unimplemented: 64-bit mode not compiled in

native/Dnrm2 returns NaN if multiple Inf values

For example,
N = 10, IncX =1, x = []float64{4.474077183601786e-75, -Inf, -Inf, 1.398043285130107e-76, 1.398043286095289e-76, 1.398043286095289e-76, 1.398043286095289e-76, 1.398043286095289e-76, 1.398043286095289e-76, 1.398043286095289e-76},

native/drnm2 returns NaN, but it should return +inf.

.travis/check-generate.sh and go 1.3

.travis/check-generate.sh calls go generate but it is not supported by go 1.3 which still is in the build matrix. One option is to drop 1.3 (perhaps after 1.6 is out) or remove the script (and do the check in a git hook before pushing, for example).

issue setting up the CGO_LDFLAGS in windows 10

Not entirely sure how to setup the CGO_LDFLAGS environment var in windows. Currently, i just made a new environment var named: CGO_LDFLAGS with the c:/path/to/openblas/bin as the source. The way you have it structured however in the read me with the capital L preceding the path, is there some significance that i am missing? (Its been a long time since I've worked with C and I never worked with it on windows.)

Sorry if this is a stupid question. Just can't seem to find a straight forward answer anywhere.

Just FYI, im getting back an error that says the compile can't find -lopenblas. Seems like i've entered the flag incorrectly.

Heres my current CGO_LDFLAGS var: -L\C:\OpenBLAS -lopenblas

blas: Existence of complex blas?

Hi, is there a plan to implement complex versions of the level 1 through 3 blas functionality? I guess both a complex conjugate and hermition operation would need to be implemented.

Thoughts on this?

blas: Test Builders for Additional Architectures

It would be good to test goblas on architectures other than x86_64, Including various ARMs and 386. Follows up on #64, where assembly was first introduced.

There are two possibilities that I have found: running qemu on travis (which is our current CI provider) or building custom images for shippable, which allows docker containers.

The advantages to travis is that we are already using it. Shippable has (reportedly) faster build times, and allows you to specify a docker image, which means we could substantially increase the speed of testing (and perhaps benchmarks?) for cblas. The downside is that we should probably stick to a single CI provider, so all of our repos would need to be changed.

I'll try putting them both together in a fork.

Error in Dtrsm length check

In Dtrsm, there is a check for the size of A (currently lines 2831 - 2839 of blas.go in cblas). The check tests assuming that A is an nxm or mxn matrix, but A is always symmetric. If on the left it is an M x M matrix ( {MxM} * {MxN} = {MxN}), and when on the right it is an NxN matrix.

3fd5f breaks Dtrsm via gonum/matrix/mat64 tests

It seems we didn't test cblas in the context of mat64 for 3fd5f07; there was no commit to matrix reflecting the changes in blas. I have made those changes and now we get an out of range in TestSolve and TestLQD. TestSolve hides the panic, but TestLQD shows it to be in the Dgemv. This is not observed in a36aa1f.

undefined reference to ’cblas_*’ in function ‘_cgo_*’

When I gone to run the test '/src/github.com/gonum/blas/cgo/level*double_test.go',I get all the same errors as follow:

/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cgbmv’:
./cgo-gcc-prolog:132:to ‘cblas_cgbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cgemm’:
./cgo-gcc-prolog:160:to ‘cblas_cgemm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cgemv’:
./cgo-gcc-prolog:186:to ‘cblas_cgemv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cgerc’:
./cgo-gcc-prolog:211:to ‘cblas_cgerc’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cgeru’:
./cgo-gcc-prolog:236:to ‘cblas_cgeru’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_chbmv’:
./cgo-gcc-prolog:262:to ‘cblas_chbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_chemm’:
./cgo-gcc-prolog:290:to ‘cblas_chemm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_chemv’:
./cgo-gcc-prolog:316:to ‘cblas_chemv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cher’:
./cgo-gcc-prolog:337:to ‘cblas_cher’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cher2’:
./cgo-gcc-prolog:362:to ‘cblas_cher2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cher2k’:
./cgo-gcc-prolog:389:to ‘cblas_cher2k’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cherk’:
./cgo-gcc-prolog:412:to ‘cblas_cherk’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_chpmv’:
./cgo-gcc-prolog:436:to ‘cblas_chpmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_chpr2’:
./cgo-gcc-prolog:478:to ‘cblas_chpr2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_csymm’:
./cgo-gcc-prolog:558:to ‘cblas_csymm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_csyr2k’:
./cgo-gcc-prolog:586:to ‘cblas_csyr2k’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_csyrk’:
./cgo-gcc-prolog:611:to ‘cblas_csyrk’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ctbmv’:
./cgo-gcc-prolog:634:to ‘cblas_ctbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ctbsv’:
./cgo-gcc-prolog:657:to ‘cblas_ctbsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ctpmv’:
./cgo-gcc-prolog:678:to ‘cblas_ctpmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ctpsv’:
./cgo-gcc-prolog:699:to ‘cblas_ctpsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ctrmm’:
./cgo-gcc-prolog:725:to ‘cblas_ctrmm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ctrmv’:
./cgo-gcc-prolog:748:to ‘cblas_ctrmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ctrsm’:
./cgo-gcc-prolog:774:to ‘cblas_ctrsm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ctrsv’:
./cgo-gcc-prolog:797:to ‘cblas_ctrsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dasum’:
./cgo-gcc-prolog:816:to ‘cblas_dasum’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ddot’:
./cgo-gcc-prolog:879:to ‘cblas_ddot’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dgbmv’:
./cgo-gcc-prolog:909:to ‘cblas_dgbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dgemm’:
./cgo-gcc-prolog:937:to ‘cblas_dgemm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dgemv’:
./cgo-gcc-prolog:963:to ‘cblas_dgemv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dger’:
./cgo-gcc-prolog:988:to ‘cblas_dger’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dnrm2’:
./cgo-gcc-prolog:1007:to ‘cblas_dnrm2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dsbmv’:
./cgo-gcc-prolog:1107:to ‘cblas_dsbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dsdot’:
./cgo-gcc-prolog:1146:to ‘cblas_dsdot’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dspmv’:
./cgo-gcc-prolog:1172:to ‘cblas_dspmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dspr2’:
./cgo-gcc-prolog:1215:to ‘cblas_dspr2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dsymm’:
./cgo-gcc-prolog:1262:to ‘cblas_dsymm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dsymv’:
./cgo-gcc-prolog:1288:to ‘cblas_dsymv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dsyr’:
./cgo-gcc-prolog:1310:to ‘cblas_dsyr’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dsyr2’:
./cgo-gcc-prolog:1335:to ‘cblas_dsyr2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dsyr2k’:
./cgo-gcc-prolog:1363:to ‘cblas_dsyr2k’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dsyrk’:
./cgo-gcc-prolog:1388:to ‘cblas_dsyrk’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dtbmv’:
./cgo-gcc-prolog:1411:to ‘cblas_dtbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dtbsv’:
./cgo-gcc-prolog:1434:to ‘cblas_dtbsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dtpmv’:
./cgo-gcc-prolog:1455:to ‘cblas_dtpmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dtpsv’:
./cgo-gcc-prolog:1476:to ‘cblas_dtpsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dtrmm’:
./cgo-gcc-prolog:1502:to ‘cblas_dtrmm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dtrmv’:
./cgo-gcc-prolog:1525:to ‘cblas_dtrmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dtrsm’:
./cgo-gcc-prolog:1551:to ‘cblas_dtrsm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dtrsv’:
./cgo-gcc-prolog:1574:to ‘cblas_dtrsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dzasum’:
./cgo-gcc-prolog:1593:to ‘cblas_dzasum’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dznrm2’:
./cgo-gcc-prolog:1614:to ‘cblas_dznrm2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_icamax’:
./cgo-gcc-prolog:1636:to ‘cblas_icamax’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_idamax’:
./cgo-gcc-prolog:1658:to ‘cblas_idamax’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_isamax’:
./cgo-gcc-prolog:1680:to ‘cblas_isamax’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_izamax’:
./cgo-gcc-prolog:1702:to ‘cblas_izamax’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sasum’:
./cgo-gcc-prolog:1724:to ‘cblas_sasum’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_scasum’:
./cgo-gcc-prolog:1765:to ‘cblas_scasum’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_scnrm2’:
./cgo-gcc-prolog:1787:to ‘cblas_scnrm2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sdot’:
./cgo-gcc-prolog:1831:to ‘cblas_sdot’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sdsdot’:
./cgo-gcc-prolog:1856:to ‘cblas_sdsdot’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sgbmv’:
./cgo-gcc-prolog:1886:to ‘cblas_sgbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sgemm’:
./cgo-gcc-prolog:1914:to ‘cblas_sgemm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sgemv’:
./cgo-gcc-prolog:1940:to ‘cblas_sgemv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sger’:
./cgo-gcc-prolog:1964:to ‘cblas_sger’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_snrm2’:
./cgo-gcc-prolog:1984:to ‘cblas_snrm2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ssbmv’:
./cgo-gcc-prolog:2085:to ‘cblas_ssbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sspmv’:
./cgo-gcc-prolog:2123:to ‘cblas_sspmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sspr2’:
./cgo-gcc-prolog:2164:to ‘cblas_sspr2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ssymm’:
./cgo-gcc-prolog:2209:to ‘cblas_ssymm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ssymv’:
./cgo-gcc-prolog:2233:to ‘cblas_ssymv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ssyr’:
./cgo-gcc-prolog:2254:to ‘cblas_ssyr’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ssyr2’:
./cgo-gcc-prolog:2278:to ‘cblas_ssyr2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ssyr2k’:
./cgo-gcc-prolog:2304:to ‘cblas_ssyr2k’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ssyrk’:
./cgo-gcc-prolog:2327:to ‘cblas_ssyrk’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_stbmv’:
./cgo-gcc-prolog:2350:to ‘cblas_stbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_stbsv’:
./cgo-gcc-prolog:2373:to ‘cblas_stbsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_stpmv’:
./cgo-gcc-prolog:2394:to ‘cblas_stpmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_stpsv’:
./cgo-gcc-prolog:2415:to ‘cblas_stpsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_strmm’:
./cgo-gcc-prolog:2440:to ‘cblas_strmm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_strmv’:
./cgo-gcc-prolog:2463:to ‘cblas_strmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_strsm’:
./cgo-gcc-prolog:2488:to ‘cblas_strsm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_strsv’:
./cgo-gcc-prolog:2511:to ‘cblas_strsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zgbmv’:
./cgo-gcc-prolog:2635:to ‘cblas_zgbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zgemm’:
./cgo-gcc-prolog:2663:to ‘cblas_zgemm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zgemv’:
./cgo-gcc-prolog:2689:to ‘cblas_zgemv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zgerc’:
./cgo-gcc-prolog:2714:to ‘cblas_zgerc’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zgeru’:
./cgo-gcc-prolog:2739:to ‘cblas_zgeru’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zhbmv’:
./cgo-gcc-prolog:2765:to ‘cblas_zhbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zhemm’:
./cgo-gcc-prolog:2793:to ‘cblas_zhemm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zhemv’:
./cgo-gcc-prolog:2819:to ‘cblas_zhemv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zher’:
./cgo-gcc-prolog:2841:to ‘cblas_zher’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zher2’:
./cgo-gcc-prolog:2866:to ‘cblas_zher2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zher2k’:
./cgo-gcc-prolog:2894:to ‘cblas_zher2k’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zherk’:
./cgo-gcc-prolog:2919:to ‘cblas_zherk’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zhpmv’:
./cgo-gcc-prolog:2943:to ‘cblas_zhpmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zhpr2’:
./cgo-gcc-prolog:2986:to ‘cblas_zhpr2’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zsymm’:
./cgo-gcc-prolog:3050:to ‘cblas_zsymm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zsyr2k’:
./cgo-gcc-prolog:3078:to ‘cblas_zsyr2k’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zsyrk’:
./cgo-gcc-prolog:3103:to ‘cblas_zsyrk’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ztbmv’:
./cgo-gcc-prolog:3126:to ‘cblas_ztbmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ztbsv’:
./cgo-gcc-prolog:3149:to ‘cblas_ztbsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ztpmv’:
./cgo-gcc-prolog:3170:to ‘cblas_ztpmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ztpsv’:
./cgo-gcc-prolog:3191:to ‘cblas_ztpsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ztrmm’:
./cgo-gcc-prolog:3217:to ‘cblas_ztrmm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ztrmv’:
./cgo-gcc-prolog:3240:to ‘cblas_ztrmv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ztrsm’:
./cgo-gcc-prolog:3266:to ‘cblas_ztrsm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ztrsv’:
./cgo-gcc-prolog:3289:to ‘cblas_ztrsv’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_caxpy’:
./cgo-gcc-prolog:45:to ‘cblas_caxpy’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_ccopy’:
./cgo-gcc-prolog:64:to ‘cblas_ccopy’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cdotc_sub’:
./cgo-gcc-prolog:84:to ‘cblas_cdotc_sub’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cdotu_sub’:
./cgo-gcc-prolog:104:to ‘cblas_cdotu_sub’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_chpr’:
./cgo-gcc-prolog:455:to ‘cblas_chpr’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cscal’:
./cgo-gcc-prolog:495:to ‘cblas_cscal’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_csscal’:
./cgo-gcc-prolog:511:to ‘cblas_csscal’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_cswap’:
./cgo-gcc-prolog:530:to ‘cblas_cswap’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_daxpy’:
./cgo-gcc-prolog:838:to ‘cblas_daxpy’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dcopy’:
./cgo-gcc-prolog:857:to ‘cblas_dcopy’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_drot’:
./cgo-gcc-prolog:1030:to ‘cblas_drot’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_drotg’:
./cgo-gcc-prolog:1045:to ‘cblas_drotg’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_drotm’:
./cgo-gcc-prolog:1065:to ‘cblas_drotm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_drotmg’:
./cgo-gcc-prolog:1081:to ‘cblas_drotmg’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dscal’:
./cgo-gcc-prolog:1124:to ‘cblas_dscal’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dspr’:
./cgo-gcc-prolog:1192:to ‘cblas_dspr’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_dswap’:
./cgo-gcc-prolog:1234:to ‘cblas_dswap’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_saxpy’:
./cgo-gcc-prolog:1745:to ‘cblas_saxpy’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_scopy’:
./cgo-gcc-prolog:1808:to ‘cblas_scopy’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_srot’:
./cgo-gcc-prolog:2007:to ‘cblas_srot’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_srotg’:
./cgo-gcc-prolog:2022:to ‘cblas_srotg’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_srotm’:
./cgo-gcc-prolog:2042:to ‘cblas_srotm’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_srotmg’:
./cgo-gcc-prolog:2059:to ‘cblas_srotmg’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sscal’:
./cgo-gcc-prolog:2101:to ‘cblas_sscal’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sspr’:
./cgo-gcc-prolog:2142:to ‘cblas_sspr’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_sswap’:
./cgo-gcc-prolog:2183:to ‘cblas_sswap’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zaxpy’:
./cgo-gcc-prolog:2531:to ‘cblas_zaxpy’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zcopy’:
./cgo-gcc-prolog:2550:to ‘cblas_zcopy’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zdotc_sub’:
./cgo-gcc-prolog:2570:to ‘cblas_zdotc_sub’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zdotu_sub’:
./cgo-gcc-prolog:2590:to ‘cblas_zdotu_sub’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zdscal’:
./cgo-gcc-prolog:2607:to ‘cblas_zdscal’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zhpr’:
./cgo-gcc-prolog:2963:to ‘cblas_zhpr’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zscal’:
./cgo-gcc-prolog:3003:to ‘cblas_zscal’ undefined reference
/tmp/go-build527236923/github.com/gonum/blas/cgo/_test/_obj_test/blas.cgo2.o: in function ‘_cgo_42fd92bc8ecb_Cfunc_cblas_zswap’:
./cgo-gcc-prolog:3022:to ‘cblas_zswap’ undefined reference
collect2: error: ld returned 1 exit status

I have installed the openBLAS.What's wrong with it?

Existence of single precision blas?

Hi, is the reason there aren't single precision (float32) implementations due to time constraints (i.e. you haven't had the chance to implement them) or for some other reason?

Is it the case that literally changing all calls of float64 to float32 would "create" single precision versions?

native: sed on OS X is broken

This was identified in #119 (comment).

sed on OS X requires special syntax to represent a new line. This syntax appears to not be acceptable to GNU sed without significant change to the expression. Here is an example that does work with GNU sed:

sed -e 's_^\(func (Implementation) \)D\(.*\)$_//$\n// Float32 implementations are autogenerated and not directly tested.$\n\1S\2_'

Note that the expression is now quoted with " rather than ', so any existing re $ now needs to be guarded with \, as do all escaped characters (\n becomes \\n).

blas: improve install instructions

This program will not compile without gonum/internal, with it, it compiles and runs fine.
Quick search showed that gonum/internal is only used in the native implementation so I assumed I would not require it.

package main

import (
    "fmt"
    "github.com/gonum/blas/cgo"
    "github.com/gonum/blas/blas64"
)

func main() {
    blas64.Use(cgo.Implementation{})
    v := blas64.Vector{Inc: 1, Data: []float64{1, 1, 1}}
    fmt.Println("v has length:", blas64.Nrm2(len(v.Data), v))
}
[[~]]$ go build ann
src/github.com/gonum/blas/native/dgemm.go:12:2: cannot find package "github.com/gonum/internal/asm" in any of:
    /usr/lib/go/src/github.com/gonum/internal/asm (from $GOROOT)
    [$GOPATH]/src/github.com/gonum/internal/asm (from $GOPATH)

If it is not possible to remove gonum/internal it should be documented under the README.md

Which directory path is BLAS and LAPACK installed on?

I am trying find which directory path BLAS and LAPACK are installed on.

I tried:

$ type libblas-dev
bash: type: libblas-dev: not found

Then:

$ apt-cache policy libblas-dev
libblas-dev:
  Installed: 3.6.0-2ubuntu2
  Candidate: 3.6.0-2ubuntu2
  Version table:
 *** 3.6.0-2ubuntu2 500
        500 http://gb.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status

But the last code doesn't show where it is installed. Can anyone help with this?

The same is the case with LAPACK:

$ type liblapack3
bash: type: liblapack3: not found

and

$ apt-cache policy liblapack3
liblapack3:
  Installed: 3.6.0-2ubuntu2
  Candidate: 3.6.0-2ubuntu2
  Version table:
 *** 3.6.0-2ubuntu2 500
        500 http://gb.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status

The command $ dpkg -L liblapack3 gives:

/.
/usr
/usr/lib
/usr/lib/lapack
/usr/lib/lapack/liblapack.so.3.6.0
/usr/share
/usr/share/doc
/usr/share/doc/liblapack3
/usr/share/doc/liblapack3/copyright
/usr/share/doc/liblapack3/testing_results.txt.gz
/usr/share/doc/liblapack3/README.gz
/usr/lib/lapack/liblapack.so.3
/usr/share/doc/liblapack3/changelog.Debian.gz

But how do I know where the executable file is ? i.e. the install directory.

travis.cl

Someone with admin access could activate the repository at travis.cl

However, the cblas package will probably make trouble without further configuration.

Native sgemm slower than dgemm

I ran an adhoc benchmark and found, to my surprise, that blas32.Gemm is slower than blas64.Gemm on my quad core i7. I notice that the native package includes some benchmarks for dgemm, but none for sgemm. Perhaps sgemm was never properly tuned for performance?

Output of benchmark:

Benchmarking 32-bit
Took 12027724 nanos
Benchmarking 64-bit
Took 5117921 nanos

Code for benchmark

package main

import (
	"fmt"
	"math/rand"
	"time"

	"github.com/gonum/blas"
	"github.com/gonum/blas/blas32"
	"github.com/gonum/blas/blas64"
)

const Iterations = 5

func main() {
	in1 := make([]float64, 300*300)
	in2 := make([]float64, 300*300)
	for i := range in1 {
		in1[i] = rand.NormFloat64()
		in2[i] = rand.NormFloat64()
	}
	out := make([]float64, 300*300)
	in1f32 := make([]float32, 300*300)
	in2f32 := make([]float32, 300*300)
	outf32 := make([]float32, 300*300)
	for i, x := range in1 {
		in1f32[i] = float32(x)
	}
	for i, x := range in2 {
		in2f32[i] = float32(x)
	}

	fmt.Println("Benchmarking 32-bit")
	benchmarkFunc(func() {
		blas32.Gemm(blas.NoTrans, blas.NoTrans, 1, blas32.General{
			Rows:   300,
			Cols:   300,
			Stride: 300,
			Data:   in1f32,
		}, blas32.General{
			Rows:   300,
			Cols:   300,
			Stride: 300,
			Data:   in2f32,
		}, 1, blas32.General{
			Rows:   300,
			Cols:   300,
			Stride: 300,
			Data:   outf32,
		})
	})

	fmt.Println("Benchmarking 64-bit")
	benchmarkFunc(func() {
		blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, blas64.General{
			Rows:   300,
			Cols:   300,
			Stride: 300,
			Data:   in1,
		}, blas64.General{
			Rows:   300,
			Cols:   300,
			Stride: 300,
			Data:   in2,
		}, 1, blas64.General{
			Rows:   300,
			Cols:   300,
			Stride: 300,
			Data:   out,
		})
	})
}

func benchmarkFunc(f func()) {
	t := time.Now().UnixNano()
	for i := 0; i < Iterations; i++ {
		f()
	}
	elapsed := time.Now().UnixNano() - t
	fmt.Println("Took", elapsed/Iterations, "nanos")
}

Dgemm unexpected fault

The inner loop of the dgemmSerialNotTrans function is

var tmp float64
for l, v := range b.data[j*b.stride : j*b.stride+b.cols] {
    tmp += atmp[l] * v
}

I tried replacing this with

tmp := ddotUnitary(atmp, b.data[j*b.stride : j*b.stride+b.cols])

But I got the following panic:

brendan:~/Documents/mygo/src/github.com/gonum/blas/goblas$ go test -bench BenchmarkDgemm
unexpected fault address 0xb01dfacedebac1e
fatal error: fault
[signal 0xb code=0x1 addr=0xb01dfacedebac1e pc=0x89aa5]

goroutine 34 [running]:
runtime.gothrow(0x203890, 0x5)
    /Users/brendan/gover/go_1_4_0/src/runtime/panic.go:503 +0x8e fp=0x2083b3590 sp=0x2083b3578
runtime.sigpanic()
    /Users/brendan/gover/go_1_4_0/src/runtime/sigpanic_unix.go:29 +0x261 fp=0x2083b35e0 sp=0x2083b3590
github.com/gonum/blas/goblas.ddotUnitary(0x2083c4840, 0x3, 0xc, 0x2083b5e18, 0x3, 0x3, 0x403d000000000000, 0x1, 0x0, 0x2083ead00, ...)
    /Users/brendan/Documents/mygo/src/github.com/gonum/blas/goblas/ddot_amd64.s:61 +0x25 fp=0x2083b35e8 sp=0x2083b35e0
github.com/gonum/blas/goblas.dgemmSerialNotTrans(0x2083c4840, 0xc, 0xc, 0x4, 0x3, 0x3, 0x2083b5e00, 0x6, 0x6, 0x2, ...)
    /Users/brendan/Documents/mygo/src/github.com/gonum/blas/goblas/dgemm.go:378 +0x1f5 fp=0x2083b3680 sp=0x2083b35e8
github.com/gonum/blas/goblas.dgemmSerial(0x6f, 0x70, 0x2083c4840, 0xc, 0xc, 0x4, 0x3, 0x3, 0x2083b5e00, 0x6, ...)
    /Users/brendan/Documents/mygo/src/github.com/gonum/blas/goblas/dgemm.go:281 +0x16e fp=0x2083b3730 sp=0x2083b3680
github.com/gonum/blas/goblas.dgemmParallel(0x6f, 0x70, 0x2083c4840, 0xc, 0xc, 0x4, 0x3, 0x3, 0x2083b5e00, 0x6, ...)
    /Users/brendan/Documents/mygo/src/github.com/gonum/blas/goblas/dgemm.go:142 +0x295 fp=0x2083b3880 sp=0x2083b3730
github.com/gonum/blas/goblas.Blas.Dgemm(0x6f, 0x70, 0x4, 0x2, 0x3, 0x4000000000000000, 0x2083c4840, 0xc, 0xc, 0x3, ...)
    /Users/brendan/Documents/mygo/src/github.com/gonum/blas/goblas/dgemm.go:103 +0x447 fp=0x2083b3a10 sp=0x2083b3880
github.com/gonum/blas/goblas.(*Blas).Dgemm(0x30f0c8, 0x6f, 0x70, 0x4, 0x2, 0x3, 0x4000000000000000, 0x2083c4840, 0xc, 0xc, ...)
    <autogenerated>:9 +0x1b0 fp=0x2083b3ab0 sp=0x2083b3a10
github.com/gonum/blas/testblas.dgemmcomp(0x1, 0x20bf30, 0xe, 0x2083de240, 0x220838c458, 0x30f0c8, 0x6f, 0x70, 0x4, 0x2, ...)
    /Users/brendan/Documents/mygo/src/github.com/gonum/blas/testblas/dgemm.go:239 +0x36b fp=0x2083b3cb8 sp=0x2083b3ab0
github.com/gonum/blas/testblas.TestDgemm(0x2083de240, 0x220838c458, 0x30f0c8)
    /Users/brendan/Documents/mygo/src/github.com/gonum/blas/testblas/dgemm.go:218 +0x456 fp=0x2083b3f40 sp=0x2083b3cb8
github.com/gonum/blas/goblas.TestDgemm(0x2083de240)
    /Users/brendan/Documents/mygo/src/github.com/gonum/blas/goblas/level3double_test.go:10 +0x70 fp=0x2083b3f78 sp=0x2083b3f40
testing.tRunner(0x2083de240, 0x302f98)
    /Users/brendan/gover/go_1_4_0/src/testing/testing.go:447 +0xbf fp=0x2083b3fd0 sp=0x2083b3f78
runtime.goexit()
    /Users/brendan/gover/go_1_4_0/src/runtime/asm_amd64.s:2232 +0x1 fp=0x2083b3fd8 sp=0x2083b3fd0
created by testing.RunTests
    /Users/brendan/gover/go_1_4_0/src/testing/testing.go:555 +0xa8b

@fhs -- do you know what's wrong?

blas64: order of fields in exported structs

The order of fields in structs like Vector or General should follow the order in which they typically appear in a function call. This would make more natural and easier to understand calls with inline declarations with unnamed fields. For example, in case of Vector and Dscal:

native.Implementation{}.Dscal(n, scale, x, 1)
vs.
blas64.Scal(n, scale, blas64.Vector{1, x})

Similarly for General and other types.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.