scratch_set.go 933 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package compute
  2. import "fmt"
  3. type ScratchSet struct {
  4. spaces map[int]*ScratchSpace
  5. }
  6. func NewScratchSet(gpus []int, bytes int) (*ScratchSet, error) {
  7. ss := &ScratchSet{spaces: make(map[int]*ScratchSpace)}
  8. for _, gpu := range gpus {
  9. if gpu < 0 {
  10. continue
  11. }
  12. if _, ok := ss.spaces[gpu]; ok {
  13. continue
  14. }
  15. sc, err := NewScratchSpace(gpu, bytes)
  16. if err != nil {
  17. ss.Free()
  18. return nil, err
  19. }
  20. ss.spaces[gpu] = sc
  21. }
  22. if ss.spaces == nil {
  23. return nil, fmt.Errorf("scratch set init failed")
  24. }
  25. return ss, nil
  26. }
  27. func (s *ScratchSet) Scratch(gpu int) *ScratchSpace {
  28. if s == nil || s.spaces == nil {
  29. return nil
  30. }
  31. return s.spaces[gpu]
  32. }
  33. func (s *ScratchSet) Reset() {
  34. if s == nil || s.spaces == nil {
  35. return
  36. }
  37. for _, sc := range s.spaces {
  38. sc.Reset()
  39. }
  40. }
  41. func (s *ScratchSet) Free() {
  42. if s == nil || s.spaces == nil {
  43. return
  44. }
  45. for _, sc := range s.spaces {
  46. sc.Free()
  47. }
  48. s.spaces = nil
  49. }