47 lines
991 B
Go
47 lines
991 B
Go
|
package randomx
|
||
|
|
||
|
const DatasetSize = RANDOMX_DATASET_BASE_SIZE + RANDOMX_DATASET_EXTRA_SIZE
|
||
|
|
||
|
const DatasetItemCount = DatasetSize / CacheLineSize
|
||
|
|
||
|
type DatasetFull struct {
|
||
|
cache *Cache
|
||
|
Memory [DatasetItemCount]RegisterLine
|
||
|
}
|
||
|
|
||
|
func NewFullDataset(cache *Cache) *DatasetFull {
|
||
|
return &DatasetFull{
|
||
|
cache: cache,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (d *DatasetFull) PrefetchDataset(address uint64) {
|
||
|
|
||
|
}
|
||
|
|
||
|
func (d *DatasetFull) ReadDataset(address uint64, r *RegisterLine) {
|
||
|
cache := &d.Memory[address/CacheLineSize]
|
||
|
|
||
|
for i := range r {
|
||
|
r[i] ^= cache[i]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (d *DatasetFull) Cache() *Cache {
|
||
|
return d.cache
|
||
|
}
|
||
|
|
||
|
func (d *DatasetFull) Flags() uint64 {
|
||
|
return d.cache.Flags
|
||
|
}
|
||
|
|
||
|
func (d *DatasetFull) InitDataset(startItem, itemCount uint64) {
|
||
|
if startItem >= DatasetItemCount || itemCount > DatasetItemCount {
|
||
|
panic("out of range")
|
||
|
}
|
||
|
if startItem+itemCount > DatasetItemCount {
|
||
|
panic("out of range")
|
||
|
}
|
||
|
d.cache.InitDataset(d.Memory[startItem:startItem+itemCount], startItem, startItem+itemCount)
|
||
|
}
|