Example in GatherU8:
func (cm *Comm) GatherU8(toProc int, dest, orig []uint8) error {
sendbuf := unsafe.Pointer(&orig[0])
recvbuf := unsafe.Pointer(&dest[0])
return Error(C.MPI_Gather(sendbuf, C.int(len(orig)), C.BYTE, recvbuf, C.int(len(orig)), C.BYTE, C.int(toProc), cm.comm), "GatherU8")
}
In MPI, dest is normally nullptr on all but root
(here toProc
). But empi fails when I call it like so:
if ss.MPIComm.Rank() == 0 {
MPIHashes = make([]byte, ss.MPIComm.Size()*len(orig))
err = ss.MPIComm.GatherU8(0, MPIHashes, orig)
} else {
err = ss.MPIComm.GatherU8(0, nil, orig)
}
panic: runtime error: index out of range [0] with length 0
goroutine 1 [running, locked to thread]:
github.com/emer/empi/mpi.(*Comm).GatherU8(0x106d98d80?, 0x140004a5d00?, {0x0?, 0x18?, 0x14000183678?}, {0x140004a5d20?, 0x2?, 0x1?})
/Users/siboehm/go/pkg/mod/github.com/emer/empi@v1.0.17/mpi/numeric.gen.go:716 +0x78
main.(*Sim).ConfigLoops.func1()
/Users/siboehm/repos/obelisk/models/boa/sim.go:646 +0x380
github.com/emer/emergent/looper.(*Manager).runLevel(0x14002e01380, 0x3)
/Users/siboehm/go/pkg/mod/github.com/emer/emergent@v1.3.44/looper/manager.go:276 +0x5e0
github.com/emer/emergent/looper.(*Manager).runLevel(0x14002e01380, 0x2)
/Users/siboehm/go/pkg/mod/github.com/emer/emergent@v1.3.44/looper/manager.go:266 +0x384
github.com/emer/emergent/looper.(*Manager).runLevel(0x14002e01380, 0x1)
/Users/siboehm/go/pkg/mod/github.com/emer/emergent@v1.3.44/looper/manager.go:266 +0x384
github.com/emer/emergent/looper.(*Manager).runLevel(0x14002e01380, 0x0)
/Users/siboehm/go/pkg/mod/github.com/emer/emergent@v1.3.44/looper/manager.go:266 +0x384
github.com/emer/emergent/looper.(*Manager).Cont(...)
/Users/siboehm/go/pkg/mod/github.com/emer/emergent@v1.3.44/looper/manager.go:208
github.com/emer/emergent/looper.(*Manager).Run(0x14002e01380, 0x5731874?)
/Users/siboehm/go/pkg/mod/github.com/emer/emergent@v1.3.44/looper/manager.go:191 +0x64
main.(*Sim).RunWithoutGui(0x108139740)
/Users/siboehm/repos/obelisk/models/boa/sim.go:1469 +0x188
main.main()
/Users/siboehm/repos/obelisk/models/boa/boa.go:100 +0x300
panic: runtime error: index out of range [0] with length 0