barretenberg
barretenberg copied to clipboard
Remove use of get_row() in hot loops
get_row()
constructs an AllValues from a single row across a table of polynomials viewed as columns. When used in a hot loop, e.g. over the entire length of the circuit, this amounts to making a full copy of all polynomials (one row at a time which probably is even worse?). Its currently used in the log derivative library (used by ECCVM and AVM) and in PG. At last check the PG usage accounts for 1s x86. ECCVM usage appears negligible but could be relevant for AVM. (Edit: AVM has fixed this by introducing a version of get_row that returns const refs instead of copying data).
Note: method compute_grand_product()
in grand_product_library.hpp
uses a manual construction instead of get_row
but I'm fairly sure that it's equivalent and should potentially be addressed.