Coder Social home page Coder Social logo

blas's Introduction

Gonum BLAS Build Status Coverage Status GoDoc

This repository is no longer maintained. Development has moved to https://github.com/gonum/gonum.

A collection of packages to provide BLAS functionality for the Go programming language

Installation

  go get github.com/gonum/blas

BLAS C-bindings

If you want to use OpenBLAS, install it in any directory:

  git clone https://github.com/xianyi/OpenBLAS
  cd OpenBLAS
  make

The blas/cgo package provides bindings to C-backed BLAS packages. blas/cgo needs the CGO_LDFLAGS environment variable to point to the blas installation. More information can be found in the cgo command documentation.

Then install the blas/cgo package:

  CGO_LDFLAGS="-L/path/to/OpenBLAS -lopenblas" go install github.com/gonum/blas/cgo

For Windows you can download binary packages for OpenBLAS at SourceForge.

If you want to use a different BLAS package such as the Intel MKL you can adjust the CGO_LDFLAGS variable:

  CGO_LDFLAGS="-lmkl_rt" go install github.com/gonum/blas/cgo

On OS X the easiest solution is to use the libraries provided by the system:

  CGO_LDFLAGS="-framework Accelerate" go install github.com/gonum/blas/cgo

Packages

blas

Defines BLAS API split in several interfaces.

blas/native

Go implementation of the BLAS API (incomplete, implements the float32 and float64 API)

blas/cgo

Binding to a C implementation of the cblas interface (e.g. ATLAS, OpenBLAS, Intel MKL)

The recommended (free) option for good performance on both Linux and Darwin is OpenBLAS.

blas/blas64 and blas/blas32

Wrappers for an implementation of the double (i.e., float64) and single (float32) precision real parts of the blas API

package main

import (
	"fmt"

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

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

blas/cblas128 and blas/cblas64

Wrappers for an implementation of the double (i.e., complex128) and single (complex64) precision complex parts of the blas API

Currently blas/cblas64 and blas/cblas128 require blas/cgo.

Issues

If you find any bugs, feel free to file an issue on the github issue tracker for gonum/gonum or gonum/netlib for the CGO implementation if the bug exists in that reposity; no code changes will be made to this repository. Other discussions should be taken to the gonum-dev Google Group.

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

License

Please see github.com/gonum/license for general license information, contributors, authors, etc on the Gonum suite of packages.

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

travis.cl

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

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

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?

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.

.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).

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).

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.

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?

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?

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?

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

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.

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).

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.

cgo: missing length check

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

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!

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.

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?

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.

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

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.

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.

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.

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.

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 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")
}

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

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).

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.

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

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.