]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
New climb
authorGeorge Lu <gclu@fb.com>
Wed, 25 Jul 2018 00:55:17 +0000 (17:55 -0700)
committerGeorge Lu <gclu@fb.com>
Mon, 13 Aug 2018 23:15:52 +0000 (16:15 -0700)
feas part 2 uses euclidean metric

tests/paramgrill.c

index 5c654d993a4b10e186716dcf5017bfe8e40ab011..ffb5c1f7d989a91f3c2563c680a340f87ff385fa 100644 (file)
@@ -1518,6 +1518,7 @@ static int allBench(BMK_result_t* resultPtr,
     U64 loopDurationC = 0, loopDurationD = 0;
     double uncertaintyConstantC, uncertaintyConstantD;
     double winnerRS;
+    int lvlmode = g_lvltarget.cSize != 0;
 
     /* initial benchmarking, gives exact ratio and memory, warms up future runs */
     benchres = BMK_benchMemInvertible(buf, ctx, 0, &cParams, BMK_both, BMK_iterMode, 1);
@@ -1548,9 +1549,11 @@ static int allBench(BMK_result_t* resultPtr,
         uncertaintyConstantD = 3;
     }
 
+    if(!lvlmode) {
     /* anything with worse ratio in feas is definitely worse, discard */
-    if(feas && benchres.result.cSize < winnerResult->cSize) {
-        return WORSE_RESULT;
+        if(feas && benchres.result.cSize < winnerResult->cSize) {
+            return WORSE_RESULT;
+        }
     }
 
     /* second run, if first run is too short, gives approximate cSpeed + dSpeed */
@@ -1578,8 +1581,9 @@ static int allBench(BMK_result_t* resultPtr,
 
     /* disregard infeasible results in feas mode */
     /* disregard if resultMax < winner in infeas mode */
-    if((feas && !feasible(resultMax, target)) || 
-      (!feas && (winnerRS > resultScore(resultMax, buf.srcSize, target)))) {
+    if((feas && (!lvlmode && !feasible(resultMax, target))) ||
+      (!feas && ((!lvlmode && winnerRS > resultScore(resultMax, buf.srcSize, target)) || 
+        (lvlmode && resultDistLvl(*winnerResult, g_lvltarget) > resultDistLvl(resultMax, g_lvltarget))))) {
         return WORSE_RESULT;
     }
 
@@ -1604,11 +1608,20 @@ static int allBench(BMK_result_t* resultPtr,
 
     /* compare by resultScore when in infeas */
     /* compare by compareResultLT when in feas */
-    if((!feas && (resultScore(benchres.result, buf.srcSize, target) > resultScore(*winnerResult, buf.srcSize, target))) || 
-       (feas && (compareResultLT(*winnerResult, benchres.result, target, buf.srcSize))) )  { 
-        return BETTER_RESULT; 
-    } else { 
-        return WORSE_RESULT; 
+    if(!lvlmode) {
+        if((!feas && (resultScore(benchres.result, buf.srcSize, target) > resultScore(*winnerResult, buf.srcSize, target))) || 
+           (feas && (compareResultLT(*winnerResult, benchres.result, target, buf.srcSize))) )  { 
+            return BETTER_RESULT; 
+        } else { 
+            return WORSE_RESULT; 
+        }
+    } else {
+        if((feas && (compareResultLT2(*winnerResult, benchres.result, g_lvltarget, buf.srcSize))) || 
+            (!feas && (resultScore(benchres.result, buf.srcSize, target) > resultScore(*winnerResult, buf.srcSize, target)))) {
+            return BETTER_RESULT;
+        } else {
+            return WORSE_RESULT;
+        }
     }
 
 }