Skip to content

runtime: fatal error: acquirep: invalid p state (AMD Opteron 6172 with 48 cores) #10240

Closed
@artjomsimon

Description

@artjomsimon

Hi everyone,

while experimenting with the language and trying to port a LU factorization benchmark from the Barcelona OpenMP Tasks Suite written in C, I got fatal error: acquirep: invalid p state on an AMD 48-core machine (Opteron 6172).

I've tried to strip the code to the bare minimum that triggers the error. That's a bit difficult, because the problem is highly undeterministic, and removing code that I presume to be irrelevant for a race condition just never triggers it. This version seems to trigger it quite reliably, in 50%-80% of the runs.
I've compiled it with go build (go 1.4.2) and ran the executable in a for loop in bash:

package main

import (
        "flag"
        "fmt"
        "runtime"
        "sync"
)

var matrixSize, submatrixSize int

/***********************************************************************
 * genmat:
 **********************************************************************/
func genmat(M []*[][]float32) {
        var null_entry bool

        for ii := 0; ii < matrixSize; ii++ {
                for jj := 0; jj < matrixSize; jj++ {
                        null_entry = false

                        if (ii < jj) && (ii%3 != 0) {
                                null_entry = true
                        }
                        if (ii > jj) && (jj%3 != 0) {
                                null_entry = true
                        }
                        if ii%2 == 1 {
                                null_entry = true
                        }
                        if jj%2 == 1 {
                                null_entry = true
                        }
                        if ii == jj {
                                null_entry = false
                        }
                        if ii == jj-1 {
                                null_entry = false
                        }
                        if ii-1 == jj {
                                null_entry = false
                        }
                        if null_entry == false {

                                subMatrix := make([][]float32, submatrixSize)
                                for i := range subMatrix {
                                        subMatrix[i] = make([]float32, submatrixSize)
                                }

                                M[ii*matrixSize+jj] = &subMatrix

                        } else {
                                M[ii*matrixSize+jj] = nil
                        }
                }
        }
}

func sparselu_init(pBENCH *[]*[][]float32, pass string) {
        *pBENCH = make([]*[][]float32, matrixSize*matrixSize)
        genmat(*pBENCH)
}

func sparselu_par_call(BENCH []*[][]float32) {

        var wg sync.WaitGroup

        for kk := 0; kk < matrixSize; kk++ {
                for ii := kk + 1; ii < matrixSize; ii++ {
                        if BENCH[ii*matrixSize+kk] != nil {
                                for jj := kk + 1; jj < matrixSize; jj++ {
                                        if BENCH[kk*matrixSize+jj] != nil {
                                                //#pragma omp task untied firstprivate(kk, jj, ii) shared(BENCH)
                                                wg.Add(1)
                                                jj := jj

                                                go func(wg *sync.WaitGroup) {
                                                        defer (*wg).Done()
                                                        if BENCH[ii*matrixSize+jj] == nil {
                                                                subMatrix := make([][]float32, submatrixSize)
                                                                // go-style initializing 2d matrix in a loop
                                                                for i := range subMatrix {
                                                                        subMatrix[i] = make([]float32, submatrixSize)
                                                                }
                                                                BENCH[ii*matrixSize+jj] = &subMatrix
                                                        }
                                                        for i := 0; i < submatrixSize; i++ {
                                                                for j := 0; j < submatrixSize; j++ {
                                                                        for k := 0; k < submatrixSize; k++ {
                                                                        }
                                                                }
                                                        }
                                                }(&wg)
                                        }
                                }
                                wg.Wait()
                        }
                }
        }
}

func main() {

        runtime.GOMAXPROCS(47)

        flag.IntVar(&matrixSize, "n", 50, "Matrix size")
        flag.IntVar(&submatrixSize, "m", 100, "Submatrix size")
        flag.Parse()

        var matrixPar []*[][]float32
        sparselu_init(&matrixPar, "Parallel")
        sparselu_par_call(matrixPar)
        fmt.Println("Program ended")
}

Now I'm aware that this isn't idiomatic go, at all, it's a quite literal transliteration of the C version, but nevertheless, I guess the go runtime shouldn't crash like this:

for i in {1..15}; do bin/sparselu-crash-mwe -n 201 -m 69; done

acquirep: p->m=0xc20db16380(38) p->status=1
fatal error: acquirep: invalid p state

runtime stack:
runtime.throw(0x562667)
        /usr/local/go/src/runtime/panic.go:491 +0xad
acquirep(0xc208062400)
        /usr/local/go/src/runtime/proc.c:2747 +0x10d
stopm()
        /usr/local/go/src/runtime/proc.c:1186 +0x1b2
findrunnable(0xc208062400)
        /usr/local/go/src/runtime/proc.c:1487 +0x562
schedule()
        /usr/local/go/src/runtime/proc.c:1575 +0x151
goexit0(0xc2119ab680)
        /usr/local/go/src/runtime/proc.c:1717 +0x16e
runtime.mcall(0x42e3c4)
        /usr/local/go/src/runtime/asm_amd64.s:186 +0x5a

goroutine 1 [semacquire]:
sync.(*WaitGroup).Wait(0xc20d1e38a0)
        /usr/local/go/src/sync/waitgroup.go:132 +0x169
main.sparselu_par_call(0xc2080ae000, 0x9dd1, 0x9dd1)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:96 +0x274
main.main()
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:112 +0x11f

goroutine 531203 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531207 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531185 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531210 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531224 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531186 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531195 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531213 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531219 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531191 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531187 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531194 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531220 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531225 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531184 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531176 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531200 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531208 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531182 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531214 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531189 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531221 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531174 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531211 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531205 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531222 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531178 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 530478 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531212 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531202 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531192 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531172 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 530480 [runnable]:
sync.(*WaitGroup).Done(0xc20d1e38a0)
        /usr/local/go/src/sync/waitgroup.go:84
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x2e5
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531169 [runnable]:
sync.(*WaitGroup).Done(0xc20d1e38a0)
        /usr/local/go/src/sync/waitgroup.go:84
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x2e5
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531188 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531171 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531206 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531216 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 530479 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531175 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531179 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 530477 [runnable]:
sync.(*WaitGroup).Done(0xc20d1e38a0)
        /usr/local/go/src/sync/waitgroup.go:84
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x2e5
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531197 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531223 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531183 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531181 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531209 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531217 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531180 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531190 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 530476 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531218 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531170 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531173 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531215 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531193 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531196 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531201 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531199 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531204 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531177 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

goroutine 531198 [runnable]:
main.func·001(0xc20d1e38a0)
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:77
created by main.sparselu_par_call
        /home/stsimon/golang-parallel/src/benchmarks/sparselu-crash-mwe.go:93 +0x247

Inlining or reducing the genmat() function to trivial cases seems to stop provoking the crash.
I can't reproduce this on an Intel 2-core CPU (i3/i5).

Am I doing something completely wrong here, or is this a legitimate runtime bug? How can I debug this further?

Thank you,
Artjom

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions