File: blas.go

package info (click to toggle)
golang-github-gorgonia-tensor 0.9.24-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,696 kB
  • sloc: sh: 18; asm: 18; makefile: 8
file content (51 lines) | stat: -rw-r--r-- 1,324 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package tensor

import (
	"sync"

	"gonum.org/v1/gonum/blas"
	"gonum.org/v1/gonum/blas/gonum"
)

var blasdoor sync.Mutex
var whichblas BLAS

// BLAS represents all the possible implementations of BLAS.
// The default is Gonum's Native
type BLAS interface {
	blas.Float32
	blas.Float64
	blas.Complex64
	blas.Complex128
}

// only blastoise.Implementation() and cubone.Implementation() are batchedBLAS -
// they both batch cgo calls (and cubone batches cuda calls)
type batchedBLAS interface {
	WorkAvailable() int
	DoWork()
	BLAS
}

// Use defines which BLAS implementation gorgonia should use.
// The default is Gonum's Native. These are the other options:
//		Use(blastoise.Implementation())
//		Use(cubone.Implementation())
//		Use(cgo.Implementation)
// Note the differences in the brackets. The blastoise and cubone ones are functions.
func Use(b BLAS) {
	// close the blast door! close the blast door!
	blasdoor.Lock()
	// open the blast door! open the blast door!
	defer blasdoor.Unlock()
	// those lines were few of the better additions to the Special Edition. There, I said it. The Special Edition is superior. Except Han still shot first in my mind.

	whichblas = b
}

// WhichBLAS returns the BLAS that gorgonia uses.
func WhichBLAS() BLAS { return whichblas }

func init() {
	whichblas = gonum.Implementation{}
}