3
3
// Three gonum packages must be installed, and then an additional environment
4
4
// variable must be set to use the BLAS installation.
5
5
// To install the gonum packages, run:
6
- // go get github.com/gonum/ blas
7
- // go get github.com/ gonum/matrix/mat64
8
- // go get github.com /gonum/stat
6
+ // go get gonum.org/v1/netlib/ blas/netlib
7
+ // go get gonum.org/v1/ gonum/mat
8
+ // go get gonum.org/v1 /gonum/stat
9
9
// The cgo ldflags must then be set to use the BLAS implementation. As an example,
10
10
// download OpenBLAS to ~/software
11
11
// git clone https://github.com/xianyi/OpenBLAS
12
12
// cd OpenBLAS
13
13
// make
14
- // Then edit the enivorment variable to have
14
+ // Then edit the environment variable to have
15
15
// export CGO_LDFLAGS="-L/$HOME/software/OpenBLAS -lopenblas"
16
16
package main
17
17
18
18
import (
19
+ "bufio"
19
20
"errors"
20
21
"fmt"
21
22
"log"
22
23
"math"
23
- // "math/cmplx"
24
24
"math/rand"
25
+ "os"
25
26
"strconv"
26
27
"testing"
27
- "os"
28
- "bufio"
29
28
30
- "github.com/gonum/blas/blas64"
31
- "github.com/gonum/blas/cgo"
32
- "github.com/gonum/matrix/mat64"
33
- "github.com/gonum/stat"
29
+ "gonum.org/v1/gonum/mat"
30
+ "gonum.org/v1/gonum/stat"
31
+ "gonum.org/v1/netlib/blas/netlib"
34
32
)
35
33
36
34
func init () {
37
35
// Use the BLAS implementation specified in CGO_LDFLAGS. This line can be
38
36
// commented out to use the native Go BLAS implementation found in
39
- // github.com/ gonum/blas/native .
40
- //blas64.Use(cgo .Implementation{})
37
+ // gonum.org/v1/ gonum/blas/gonum .
38
+ //blas64.Use(gonum .Implementation{})
41
39
42
40
// These are here so that toggling the BLAS implementation does not make imports unused
43
- _ = cgo.Implementation {}
44
- _ = blas64.General {}
41
+ _ = netlib.Implementation {}
45
42
}
46
43
47
44
// fibonacci
@@ -111,39 +108,39 @@ func randmatstat(t int) (float64, float64) {
111
108
bd := make ([]float64 , n * n )
112
109
cd := make ([]float64 , n * n )
113
110
dd := make ([]float64 , n * n )
114
- P := mat64 .NewDense (n , 4 * n , nil )
115
- Q := mat64 .NewDense (2 * n , 2 * n , nil )
116
- pTmp := mat64 .NewDense (4 * n , 4 * n , nil )
117
- qTmp := mat64 .NewDense (2 * n , 2 * n , nil )
111
+ P := mat .NewDense (n , 4 * n , nil )
112
+ Q := mat .NewDense (2 * n , 2 * n , nil )
113
+ pTmp := mat .NewDense (4 * n , 4 * n , nil )
114
+ qTmp := mat .NewDense (2 * n , 2 * n , nil )
118
115
for i := 0 ; i < t ; i ++ {
119
116
for i := range ad {
120
117
ad [i ] = rnd .NormFloat64 ()
121
118
bd [i ] = rnd .NormFloat64 ()
122
119
cd [i ] = rnd .NormFloat64 ()
123
120
dd [i ] = rnd .NormFloat64 ()
124
121
}
125
- a := mat64 .NewDense (n , n , ad )
126
- b := mat64 .NewDense (n , n , bd )
127
- c := mat64 .NewDense (n , n , cd )
128
- d := mat64 .NewDense (n , n , dd )
122
+ a := mat .NewDense (n , n , ad )
123
+ b := mat .NewDense (n , n , bd )
124
+ c := mat .NewDense (n , n , cd )
125
+ d := mat .NewDense (n , n , dd )
129
126
P .Copy (a )
130
- P .View (0 , n , n , n ).(* mat64 .Dense ).Copy (b )
131
- P .View (0 , 2 * n , n , n ).(* mat64 .Dense ).Copy (c )
132
- P .View (0 , 3 * n , n , n ).(* mat64 .Dense ).Copy (d )
127
+ P .Slice (0 , n , n , n + n ).(* mat .Dense ).Copy (b )
128
+ P .Slice (0 , n , 2 * n , 3 * n ).(* mat .Dense ).Copy (c )
129
+ P .Slice (0 , n , 3 * n , 4 * n ).(* mat .Dense ).Copy (d )
133
130
134
131
Q .Copy (a )
135
- Q .View (0 , n , n , n ).(* mat64 .Dense ).Copy (b )
136
- Q .View (n , 0 , n , n ).(* mat64 .Dense ).Copy (c )
137
- Q .View (n , n , n , n ).(* mat64 .Dense ).Copy (d )
132
+ Q .Slice (0 , n , n , 2 * n ).(* mat .Dense ).Copy (b )
133
+ Q .Slice (n , 2 * n , 0 , n ).(* mat .Dense ).Copy (c )
134
+ Q .Slice (n , 2 * n , n , 2 * n ).(* mat .Dense ).Copy (d )
138
135
139
136
pTmp .Mul (P .T (), P )
140
137
pTmp .Pow (pTmp , 4 )
141
138
142
139
qTmp .Mul (Q .T (), Q )
143
140
qTmp .Pow (qTmp , 4 )
144
141
145
- v [i ] = mat64 .Trace (pTmp )
146
- w [i ] = mat64 .Trace (qTmp )
142
+ v [i ] = mat .Trace (pTmp )
143
+ w [i ] = mat .Trace (qTmp )
147
144
}
148
145
mv , stdv := stat .MeanStdDev (v , nil )
149
146
mw , stdw := stat .MeanStdDev (v , nil )
@@ -152,19 +149,19 @@ func randmatstat(t int) (float64, float64) {
152
149
153
150
// randmatmul
154
151
155
- func randmatmul (n int ) * mat64 .Dense {
152
+ func randmatmul (n int ) * mat .Dense {
156
153
aData := make ([]float64 , n * n )
157
154
for i := range aData {
158
155
aData [i ] = rnd .Float64 ()
159
156
}
160
- a := mat64 .NewDense (n , n , aData )
157
+ a := mat .NewDense (n , n , aData )
161
158
162
159
bData := make ([]float64 , n * n )
163
160
for i := range bData {
164
161
bData [i ] = rnd .Float64 ()
165
162
}
166
- b := mat64 .NewDense (n , n , bData )
167
- var c mat64 .Dense
163
+ b := mat .NewDense (n , n , bData )
164
+ var c mat .Dense
168
165
c .Mul (a , b )
169
166
return & c
170
167
}
0 commit comments