alivanz/go-simd

x86 initializing x86.M256I issues

Opened this issue · 0 comments

Hello, I am testing out using the x86 portion of this package since there are features I would like to use. However, in the following example program, I get a segfault:

package main

import (
	"log"

	"github.com/alivanz/go-simd/x86"
	"github.com/alivanz/go-simd/x86/avx2"
)

func main() {
	var a, b, c x86.M256I
	var i uint64 = 0
	for ; i < 4; i++ {
		a[i] = x86.Longlong(i + 1)
		b[i] = x86.Longlong(i + 1)
		c[i] = x86.Longlong(i + 1)
	}

	avx2.Mm256OrSi256(&c, &a, &b)
	log.Printf("%v", c)
}

The error is as follows:

unexpected fault address 0x0
fatal error: fault
[signal SIGSEGV: segmentation violation code=0x80 addr=0x0 pc=0x4879c4]

goroutine 1 [running]:
runtime.throw({0x4a2985?, 0x40da45?})
        /usr/local/go/src/runtime/panic.go:1077 +0x5c fp=0xc00006c610 sp=0xc00006c5e0 pc=0x43293c
runtime.sigpanic()
        /usr/local/go/src/runtime/signal_unix.go:875 +0x285 fp=0xc00006c670 sp=0xc00006c610 pc=0x447145
main.main()
        /home/<my_username>/src/light_go_distance/alivanzTesting/alivanzTesting.go:20 +0x72 fp=0xc00006c740 sp=0xc00006c670 pc=0x487012
runtime.main()
        /usr/local/go/src/runtime/proc.go:267 +0x2bb fp=0xc00006c7e0 sp=0xc00006c740 pc=0x43531b
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc00006c7e8 sp=0xc00006c7e0 pc=0x45ed41

goroutine 2 [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:398 +0xce fp=0xc00006cfa8 sp=0xc00006cf88 pc=0x43576e
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:404
runtime.forcegchelper()
        /usr/local/go/src/runtime/proc.go:322 +0xb3 fp=0xc00006cfe0 sp=0xc00006cfa8 pc=0x4355f3
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc00006cfe8 sp=0xc00006cfe0 pc=0x45ed41
created by runtime.init.6 in goroutine 1
        /usr/local/go/src/runtime/proc.go:310 +0x1a

goroutine 3 [GC sweep wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:398 +0xce fp=0xc00006d778 sp=0xc00006d758 pc=0x43576e
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:404
runtime.bgsweep(0x0?)
        /usr/local/go/src/runtime/mgcsweep.go:280 +0x94 fp=0xc00006d7c8 sp=0xc00006d778 pc=0x4221b4
runtime.gcenable.func1()
        /usr/local/go/src/runtime/mgc.go:200 +0x25 fp=0xc00006d7e0 sp=0xc00006d7c8 pc=0x417545
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc00006d7e8 sp=0xc00006d7e0 pc=0x45ed41
created by runtime.gcenable in goroutine 1
        /usr/local/go/src/runtime/mgc.go:200 +0x66

goroutine 4 [GC scavenge wait]:
runtime.gopark(0xc000020070?, 0x4c18a8?, 0x1?, 0x0?, 0xc0000071e0?)
        /usr/local/go/src/runtime/proc.go:398 +0xce fp=0xc00006df70 sp=0xc00006df50 pc=0x43576e
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:404
runtime.(*scavengerState).park(0x536fe0)
        /usr/local/go/src/runtime/mgcscavenge.go:425 +0x49 fp=0xc00006dfa0 sp=0xc00006df70 pc=0x41fa49
runtime.bgscavenge(0x0?)
        /usr/local/go/src/runtime/mgcscavenge.go:653 +0x3c fp=0xc00006dfc8 sp=0xc00006dfa0 pc=0x41ffdc
runtime.gcenable.func2()
        /usr/local/go/src/runtime/mgc.go:201 +0x25 fp=0xc00006dfe0 sp=0xc00006dfc8 pc=0x4174e5
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc00006dfe8 sp=0xc00006dfe0 pc=0x45ed41
created by runtime.gcenable in goroutine 1
        /usr/local/go/src/runtime/mgc.go:201 +0xa5

goroutine 5 [finalizer wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:398 +0xce fp=0xc00006e628 sp=0xc00006e608 pc=0x43576e
runtime.runfinq()
        /usr/local/go/src/runtime/mfinal.go:193 +0x107 fp=0xc00006e7e0 sp=0xc00006e628 pc=0x4165c7
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc00006e7e8 sp=0xc00006e7e0 pc=0x45ed41
created by runtime.createfing in goroutine 1
        /usr/local/go/src/runtime/mfinal.go:163 +0x3d
exit status 2

I am writing this in WSL2 in a windows machine. WSL2 is using x86_64 architecture.