feat: better cli input for blob size maximizer

This commit is contained in:
Arya Tabaie
2025-03-04 09:42:55 -07:00
committed by GitHub
parent d05475241d
commit 3446e364ae

View File

@@ -13,7 +13,7 @@ import (
)
func nbConstraints(blobSize int) int {
fmt.Printf("*********************\nfor blob of size %dB or %.2fKB:\n", blobSize, float32(blobSize)/1024)
fmt.Printf("*********************\nfor blob of size %d B or %.2fKB:\n", blobSize, float32(blobSize)/1024)
c := v1.Circuit{
BlobBytes: make([]frontend.Variable, 32*4096),
Dict: make([]frontend.Variable, 64*1024),
@@ -41,40 +41,56 @@ var (
flagCrawlStep = flag.Int("step", 1000, "the crawl step") // TODO @Tabaie fix mixed metaphor
flagStart = flag.Int("start", blob.MaxUncompressedBytes, "initial size in bytes")
flagTargetNbConstraints = flag.Int("target", 1<<27, "target number of constraints")
flagBound1 = flag.Int("bound1", -1, "last size")
flagBound2 = flag.Int("bound2", -1, "second to last size")
)
func main() {
flag.Parse()
v := nbConstraints(*flagStart)
a, b := *flagStart, *flagStart
if v > *flagTargetNbConstraints {
fmt.Println("crawling downward")
for v > *flagTargetNbConstraints {
b = a
a = max(a-*flagCrawlStep, 0)
v = nbConstraints(a)
*flagCrawlStep *= 2
var a, b int // lower and upper bounds
// if given bounds, start the binary search
if *flagBound1 != -1 && *flagBound2 != -1 {
a, b = *flagBound1, *flagBound2
if a > b {
a, b = b, a
}
} else if v < *flagTargetNbConstraints {
fmt.Println("crawling upward")
for v < *flagTargetNbConstraints {
a = b
b += *flagCrawlStep
v = nbConstraints(b)
*flagCrawlStep *= 2
fmt.Print("bounds given.")
} else { // only one value given, start crawling
v := nbConstraints(*flagStart)
a, b = *flagStart, *flagStart
if v > *flagTargetNbConstraints {
fmt.Println("crawling downward")
for v > *flagTargetNbConstraints {
b = a
a = max(a-*flagCrawlStep, 0)
v = nbConstraints(a)
*flagCrawlStep *= 2
}
} else if v < *flagTargetNbConstraints {
fmt.Println("crawling upward")
for v < *flagTargetNbConstraints {
a = b
b += *flagCrawlStep
v = nbConstraints(b)
*flagCrawlStep *= 2
}
}
if v == *flagTargetNbConstraints {
fmt.Println("wow what are the odds")
return
}
fmt.Print("bounds found.")
}
if v == *flagTargetNbConstraints {
fmt.Println("wow what are the odds")
return
}
fmt.Println("bounds found. binary searching")
fmt.Println(" binary searching")
for b > a {
m := (b + a) / 2
v = nbConstraints(m)
v := nbConstraints(m)
if v > *flagTargetNbConstraints {
b = m
}