Skip to content

Commit

Permalink
use separate function to print zeroes, use arrays for printing instea…
Browse files Browse the repository at this point in the history
…d of vectors(works faster after this optimization) #569
  • Loading branch information
CblPOK-git authored and akokoshn committed Apr 8, 2024
1 parent 84fae6b commit 539f0e0
Showing 1 changed file with 27 additions and 16 deletions.
43 changes: 27 additions & 16 deletions bin/assigner/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,13 +180,25 @@ void print_size_t(
) {
using TTypeBase = nil::marshalling::field_type<Endianness>;
auto integer_container = nil::marshalling::types::integral<TTypeBase, std::size_t>(input);
std::vector<std::uint8_t> char_vector;
char_vector.resize(integer_container.length(), 0x00);
auto write_iter = char_vector.begin();
nil::marshalling::status_type status = integer_container.write(write_iter, char_vector.size());
out.write(reinterpret_cast<char*>(char_vector.data()), char_vector.size());
std::array<std::uint8_t, integer_container.length()> char_array{};
auto write_iter = char_array.begin();
ASSERT(integer_container.write(write_iter, char_array.size()) == nil::marshalling::status_type::success);
out.write(reinterpret_cast<char*>(char_array.data()), char_array.size());
}

template<typename Endianness, typename ArithmetizationType>
inline void print_zero_field(
std::ostream &out
) {
using TTypeBase = nil::marshalling::field_type<Endianness>;
using AssignmentTableType = assignment_proxy<ArithmetizationType>;
using field_element = nil::crypto3::marshalling::types::field_element<
TTypeBase, typename AssignmentTableType::field_type::value_type>;
std::array<std::uint8_t, field_element().length()> array{};
out.write(reinterpret_cast<char*>(array.data()), array.size());
}


template<typename Endianness, typename ArithmetizationType>
void print_field(
const typename assignment_proxy<ArithmetizationType>::field_type::value_type &input,
Expand All @@ -195,11 +207,10 @@ void print_field(
using TTypeBase = nil::marshalling::field_type<Endianness>;
using AssignmentTableType = assignment_proxy<ArithmetizationType>;
auto field_container = nil::crypto3::marshalling::types::field_element<TTypeBase, typename AssignmentTableType::field_type::value_type>(input);
std::vector<std::uint8_t> char_vector;
char_vector.resize(field_container.length(), 0x00);
auto write_iter = char_vector.begin();
nil::marshalling::status_type status = field_container.write(write_iter, char_vector.size());
out.write(reinterpret_cast<char*>(char_vector.data()), char_vector.size());
std::array<std::uint8_t, field_container.length()> char_array{};
auto write_iter = char_array.begin();
ASSERT(field_container.write(write_iter, char_array.size()) == nil::marshalling::status_type::success);
out.write(reinterpret_cast<char*>(char_array.data()), char_array.size());
}

template<typename Endianness, typename ArithmetizationType, typename ContainerType>
Expand All @@ -212,7 +223,7 @@ void print_vector_value(
if (i < table_col.size()) {
print_field<Endianness, ArithmetizationType>(table_col[i], out);
} else {
print_field<Endianness, ArithmetizationType>(0, out);
print_zero_field<Endianness, ArithmetizationType>(out);
}
}
}
Expand Down Expand Up @@ -329,7 +340,7 @@ void print_assignment_table(const assignment_proxy<ArithmetizationType> &table_p
}
ASSERT(offset < padded_rows_amount);
while(offset < padded_rows_amount) {
print_field<Endianness, ArithmetizationType>(0, out);
print_zero_field<Endianness, ArithmetizationType>(out);
offset++;
}
witness_idx += padded_rows_amount;
Expand Down Expand Up @@ -359,7 +370,7 @@ void print_assignment_table(const assignment_proxy<ArithmetizationType> &table_p
}
ASSERT(offset < padded_rows_amount);
while(offset < padded_rows_amount) {
print_field<Endianness, ArithmetizationType>(0, out);
print_zero_field<Endianness, ArithmetizationType>(out);
offset++;
}

Expand All @@ -382,15 +393,15 @@ void print_assignment_table(const assignment_proxy<ArithmetizationType> &table_p
if (selector_rows.find(j) != selector_rows.end()) {
print_field<Endianness, ArithmetizationType>(table_proxy.selector(i, j), out);
} else {
print_field<Endianness, ArithmetizationType>(0, out);
print_zero_field<Endianness, ArithmetizationType>(out);
}
offset++;
}
}
ASSERT(offset < padded_rows_amount);
while(offset < padded_rows_amount) {
print_field<Endianness, ArithmetizationType>(0, out);
offset++;
print_zero_field<Endianness, ArithmetizationType>(out);
offset++;
}

selector_idx += padded_rows_amount;
Expand Down

0 comments on commit 539f0e0

Please sign in to comment.