go-randomx/dataset.go
DataHoarder 55d6161f6e
Some checks are pending
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is running
Version v3.1.0, implement generic NewDataset and GetFlags
2024-04-23 14:36:43 +02:00

42 lines
824 B
Go

package randomx
import "sync"
type Dataset interface {
InitDataset(startItem, itemCount uint64)
ReadDataset(address uint64, r *RegisterLine)
PrefetchDataset(address uint64)
Flags() uint64
Cache() *Cache
Memory() []RegisterLine
}
func NewDataset(cache *Cache) Dataset {
if cache.Flags&RANDOMX_FLAG_FULL_MEM > 0 {
if ds := NewFullDataset(cache); ds != nil {
return ds
}
return nil
}
return NewLightDataset(cache)
}
func InitDatasetParallel(dataset Dataset, n int) {
n = max(1, n)
var wg sync.WaitGroup
for i := uint64(1); i < uint64(n); i++ {
a := (DatasetItemCount * i) / uint64(n)
b := (DatasetItemCount * (i + 1)) / uint64(n)
wg.Add(1)
go func(a, b uint64) {
defer wg.Done()
dataset.InitDataset(a, b-a)
}(a, b)
}
dataset.InitDataset(0, DatasetItemCount/uint64(n))
wg.Wait()
}