gorgonia.org/tensor@v0.9.24/blas.go (about) 1 package tensor 2 3 import ( 4 "sync" 5 6 "gonum.org/v1/gonum/blas" 7 "gonum.org/v1/gonum/blas/gonum" 8 ) 9 10 var blasdoor sync.Mutex 11 var whichblas BLAS 12 13 // BLAS represents all the possible implementations of BLAS. 14 // The default is Gonum's Native 15 type BLAS interface { 16 blas.Float32 17 blas.Float64 18 blas.Complex64 19 blas.Complex128 20 } 21 22 // only blastoise.Implementation() and cubone.Implementation() are batchedBLAS - 23 // they both batch cgo calls (and cubone batches cuda calls) 24 type batchedBLAS interface { 25 WorkAvailable() int 26 DoWork() 27 BLAS 28 } 29 30 // Use defines which BLAS implementation gorgonia should use. 31 // The default is Gonum's Native. These are the other options: 32 // Use(blastoise.Implementation()) 33 // Use(cubone.Implementation()) 34 // Use(cgo.Implementation) 35 // Note the differences in the brackets. The blastoise and cubone ones are functions. 36 func Use(b BLAS) { 37 // close the blast door! close the blast door! 38 blasdoor.Lock() 39 // open the blast door! open the blast door! 40 defer blasdoor.Unlock() 41 // 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. 42 43 whichblas = b 44 } 45 46 // WhichBLAS returns the BLAS that gorgonia uses. 47 func WhichBLAS() BLAS { return whichblas } 48 49 func init() { 50 whichblas = gonum.Implementation{} 51 }