Compare commits

...

5 Commits

Author SHA1 Message Date
Jordi Baylina
3d5aa14cdc 0.5.27 2020-09-17 17:45:44 +02:00
Jordi Baylina
5dc54bb7d2 Optimize recursive constant dependency 2020-09-17 17:42:32 +02:00
Jordi Baylina
349a39dc95 0.5.26 2020-09-17 10:38:01 +02:00
Jordi Baylina
0a2aee9932 0.5.25 2020-09-17 10:34:57 +02:00
Jordi Baylina
bad8fad3d0 Optimize optimize constraints not BigArray for small circuits 2020-09-17 10:34:49 +02:00
3 changed files with 25 additions and 8 deletions

2
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{ {
"name": "circom", "name": "circom",
"version": "0.5.24", "version": "0.5.27",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "circom", "name": "circom",
"version": "0.5.24", "version": "0.5.27",
"description": "Language to generate logic circuits", "description": "Language to generate logic circuits",
"main": "index.js", "main": "index.js",
"directories": { "directories": {

View File

@@ -341,18 +341,29 @@ async function reduceConstrains(ctx) {
} }
while (possibleConstraints.length >0) { while (possibleConstraints.length >0) {
if (possibleConstraints.length>1<<20) {
nextPossibleConstraints = new BigArray(); nextPossibleConstraints = new BigArray();
removedSignals = new BigArray(); } else {
nextPossibleConstraints = {};
}
removedSignals = {};
nRemoved = 0; nRemoved = 0;
lIdx = new BigArray(); lIdx = {};
for (let i=0;i<possibleConstraints.length;i++) { for (let i=0;i<possibleConstraints.length;i++) {
if ((ctx.verbose)&&(i%10000 == 0)) { if ((ctx.verbose)&&(i%10000 == 0)) {
await Promise.resolve(); await Promise.resolve();
console.log(`reducing constraints: ${i}/${possibleConstraints.length} reduced: ${nRemoved}`); console.log(`reducing constraints: ${i}/${possibleConstraints.length} reduced: ${nRemoved}`);
} }
const c = ctx.constraints[possibleConstraints[i]]; const c = ctx.constraints[possibleConstraints[i]];
if (!c) continue; if (!c) continue;
// Limit of number of lelements removed per step
if (nRemoved>100000) {
nextPossibleConstraints[possibleConstraints[i]] = true;
continue;
}
// Swap a and b if b has more variables. // Swap a and b if b has more variables.
if (Object.keys(c.b).length > Object.keys(c.a).length) { if (Object.keys(c.b).length > Object.keys(c.a).length) {
const aux = c.a; const aux = c.a;
@@ -404,7 +415,11 @@ async function reduceConstrains(ctx) {
} }
} }
if (nextPossibleConstraints.getKeys) {
nextPossibleConstraints = nextPossibleConstraints.getKeys(); nextPossibleConstraints = nextPossibleConstraints.getKeys();
} else {
nextPossibleConstraints = Object.keys(nextPossibleConstraints);
}
for (let i=0; i<nextPossibleConstraints.length;i++) { for (let i=0; i<nextPossibleConstraints.length;i++) {
if ((ctx.verbose)&&(i%10000 == 0)) { if ((ctx.verbose)&&(i%10000 == 0)) {
@@ -426,7 +441,7 @@ async function reduceConstrains(ctx) {
} }
} }
const removedSignalsList = removedSignals.getKeys(); const removedSignalsList = Object.keys(removedSignals);
for (let i=0; i<removedSignalsList.length; i++) { for (let i=0; i<removedSignalsList.length; i++) {
if ((ctx.verbose )&&(i%100000 == 0)) console.log(`removing signals: ${i}/${removedSignalsList.length}`); if ((ctx.verbose )&&(i%100000 == 0)) console.log(`removing signals: ${i}/${removedSignalsList.length}`);
@@ -440,12 +455,14 @@ async function reduceConstrains(ctx) {
lSignal.c = ctx.stDISCARDED; lSignal.c = ctx.stDISCARDED;
} }
/*
possibleConstraints = new BigArray(); possibleConstraints = new BigArray();
// Reverse // Reverse
for (let i=0; i<nextPossibleConstraints.length; i++) { for (let i=0; i<nextPossibleConstraints.length; i++) {
possibleConstraints[i] = nextPossibleConstraints[nextPossibleConstraints.length -1 -i]; possibleConstraints[i] = nextPossibleConstraints[nextPossibleConstraints.length -1 -i];
} }
*/
possibleConstraints = nextPossibleConstraints;
} }