gorgonia.org/gorgonia@v0.9.17/ops/nn/scratch_cuda.go (about) 1 // +build cuda 2 3 package nnops 4 5 import ( 6 "fmt" 7 "hash" 8 9 "github.com/chewxy/hm" 10 "gorgonia.org/gorgonia" 11 "gorgonia.org/tensor" 12 ) 13 14 // gpuScratchOp is a dummy op. It exists so the VM is able to allocate spare memory. 15 // 16 // giving it a name makes it unique(r) 17 type gpuScratchOp struct { 18 scratchOp 19 } 20 21 func (op *gpuScratchOp) Arity() int { return 0 } 22 23 func (op *gpuScratchOp) Type() hm.Type { 24 if op.shape.IsScalar() { 25 return op.dt 26 } 27 tt := &gorgonia.TensorType{Dims: op.shape.Dims(), Of: op.dt} 28 return tt 29 } 30 31 func (op *gpuScratchOp) InferShape(...gorgonia.DimSizer) (tensor.Shape, error) { return op.shape, nil } 32 func (op *gpuScratchOp) Do(...gorgonia.Value) (gorgonia.Value, error) { panic("not implemented") } 33 func (op *gpuScratchOp) ReturnsPtr() bool { return true } 34 func (op *gpuScratchOp) CallsExtern() bool { return true } 35 func (op *gpuScratchOp) OverwritesInput() int { return -1 } 36 func (op *gpuScratchOp) WriteHash(h hash.Hash) { 37 fmt.Fprintf(h, "CUDA Scratch %v of %v | %v", op.shape, op.dt, op.name) 38 } 39 func (op *gpuScratchOp) Hashcode() uint32 { return simpleHash(op) } 40 func (op *gpuScratchOp) String() string { 41 return fmt.Sprintf("CUDA Scratch %v of %v | %v", op.shape, op.dt, op.name) 42 } 43 44 func (op *gpuScratchOp) CUDADo(extern gorgonia.External, dev gorgonia.Device, prealloc gorgonia.Value, inputs ...gorgonia.Value) (retVal gorgonia.Value, err error) { 45 return prealloc, nil 46 }