Add Pippenger cache and limit Straus cache size

This commit is contained in:
moneromooo-monero 2018-05-29 12:39:00 +01:00
parent 51eb3bdcd6
commit 0b05a0fa74
No known key found for this signature in database
GPG key ID: 686F07454D6CEFC3
5 changed files with 217 additions and 39 deletions

View file

@ -40,6 +40,7 @@ enum test_multiexp_algorithm
multiexp_straus,
multiexp_straus_cached,
multiexp_pippenger,
multiexp_pippenger_cached,
};
template<test_multiexp_algorithm algorithm, size_t npoints, size_t c=0>
@ -61,7 +62,8 @@ public:
rct::key kn = rct::scalarmultKey(point, data[n].scalar);
res = rct::addKeys(res, kn);
}
cache = rct::straus_init_cache(data);
straus_cache = rct::straus_init_cache(data);
pippenger_cache = rct::pippenger_init_cache(data);
return true;
}
@ -74,9 +76,11 @@ public:
case multiexp_straus:
return res == straus(data);
case multiexp_straus_cached:
return res == straus(data, cache);
return res == straus(data, straus_cache);
case multiexp_pippenger:
return res == pippenger(data, c);
return res == pippenger(data, NULL, c);
case multiexp_pippenger_cached:
return res == pippenger(data, pippenger_cache, c);
default:
return false;
}
@ -84,6 +88,7 @@ public:
private:
std::vector<rct::MultiexpData> data;
std::shared_ptr<rct::straus_cached_data> cache;
std::shared_ptr<rct::straus_cached_data> straus_cache;
std::shared_ptr<rct::pippenger_cached_data> pippenger_cache;
rct::key res;
};