Tweak concurrency (#132)
parent
96dc2a5aa4
commit
151d8c7a05
|
@ -259,25 +259,6 @@ func New(dataShards, parityShards int, opts ...Option) (Encoder, error) {
|
||||||
// Align to 64 bytes.
|
// Align to 64 bytes.
|
||||||
r.o.perRound = ((r.o.perRound + 63) / 64) * 64
|
r.o.perRound = ((r.o.perRound + 63) / 64) * 64
|
||||||
|
|
||||||
if r.o.perRound < r.o.minSplitSize {
|
|
||||||
r.o.perRound = r.o.minSplitSize
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.o.shardSize > 0 {
|
|
||||||
p := runtime.NumCPU()
|
|
||||||
g := r.o.shardSize / r.o.perRound
|
|
||||||
|
|
||||||
if g < p {
|
|
||||||
g = p
|
|
||||||
}
|
|
||||||
|
|
||||||
// Have g be multiple of p
|
|
||||||
g += p - 1
|
|
||||||
g -= g % p
|
|
||||||
|
|
||||||
r.o.maxGoroutines = g
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.o.minSplitSize <= 0 {
|
if r.o.minSplitSize <= 0 {
|
||||||
// Set minsplit as high as we can, but still have parity in L1.
|
// Set minsplit as high as we can, but still have parity in L1.
|
||||||
cacheSize := cpuid.CPU.Cache.L1D
|
cacheSize := cpuid.CPU.Cache.L1D
|
||||||
|
@ -292,6 +273,32 @@ func New(dataShards, parityShards int, opts ...Option) (Encoder, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if r.o.perRound < r.o.minSplitSize {
|
||||||
|
r.o.perRound = r.o.minSplitSize
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.o.shardSize > 0 {
|
||||||
|
p := runtime.GOMAXPROCS(0)
|
||||||
|
if p == 1 || r.o.shardSize <= r.o.minSplitSize*2 {
|
||||||
|
// Not worth it.
|
||||||
|
r.o.maxGoroutines = 1
|
||||||
|
} else {
|
||||||
|
g := r.o.shardSize / r.o.perRound
|
||||||
|
|
||||||
|
// Overprovision by a factor of 2.
|
||||||
|
if g < p*2 && r.o.perRound > r.o.minSplitSize*2 {
|
||||||
|
g = p * 2
|
||||||
|
r.o.perRound /= 2
|
||||||
|
}
|
||||||
|
|
||||||
|
// Have g be multiple of p
|
||||||
|
g += p - 1
|
||||||
|
g -= g % p
|
||||||
|
|
||||||
|
r.o.maxGoroutines = g
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Inverted matrices are cached in a tree keyed by the indices
|
// Inverted matrices are cached in a tree keyed by the indices
|
||||||
// of the invalid rows of the data to reconstruct.
|
// of the invalid rows of the data to reconstruct.
|
||||||
// The inversion root node will have the identity matrix as
|
// The inversion root node will have the identity matrix as
|
||||||
|
|
Loading…
Reference in New Issue