Compare commits

...

10 Commits

Author SHA1 Message Date
Agnes Leroy
3621d12c42 chore(ci): add hourly cost for sxm5 vms 2025-03-06 10:19:49 +01:00
Nicolas Sarlin
1f2e1537fa chore(ci): update tfhe-lints for newer compiler version 2025-03-06 09:48:18 +01:00
Arthur Meyre
52a1191474 chore(ci): force installation of toolchain for tfhe-lints
- also update toolchain.txt to match the tfhe-lint toolchain
2025-03-06 09:48:18 +01:00
Nicolas Sarlin
d06e8d1e87 chore(ci): re-enable tfhe_lints 2025-03-06 09:48:18 +01:00
David Testé
863234d134 docs: change svg benchmark tables appearance
Reduce number of FheUint types displayed in the integer benchmark
tables. Increase policy size and better columns fitting.
Remove link to enlarge image.
2025-03-05 18:41:33 +01:00
David Testé
fcfb77a8c5 chore(ci): fix permanent instance selection condition
Due to 'continue-on-error' directive 'use-permanent-instance' step could not rely on failure() function.
2025-03-05 18:13:20 +01:00
tmontaigu
98d58ada7a fix: BlockDecomposer
The BlockDecomposer gave the possibility when the number of bits per
block was not a multiple of the number of bits in the original integer
to force the extra bits of the last block to a particular value.

However, the way this was done could only work when setting these bits
to 1, when wanting to set them to 0 it would not work.

Good news is that we actually never wanted to set them to 0,
but it should still be fixed for completeness, and allow other
feature to be added without bugs
2025-03-05 14:27:56 +01:00
Agnes Leroy
8962d1f925 chore(gpu): refactor full propagation to track noise / degree 2025-03-05 11:06:30 +01:00
Arthur Meyre
f7655cc749 fix(shortint): make noise_level field of Ciphertext private again
- this is required to make sure we have correctness checks on noise_level
updates if we enable them
2025-03-05 10:16:17 +01:00
Nicolas Sarlin
371e8238db chore(ci): disable dylint until rustup issue is fixed 2025-03-04 15:57:58 +01:00
60 changed files with 1283 additions and 2153 deletions

View File

@@ -45,7 +45,7 @@ jobs:
# This will allow to fallback on permanent instances running on Hyperstack.
- name: Use permanent remote instance
id: use-permanent-instance
if: ${{ env.SECRETS_AVAILABLE == 'true' && failure() }}
if: env.SECRETS_AVAILABLE == 'true' && steps.start-remote-instance.outcome == 'failure'
run: |
echo "runner_group=h100x1" >> "$GITHUB_OUTPUT"

View File

@@ -72,7 +72,9 @@ jobs:
# This will allow to fallback on permanent instances running on Hyperstack.
- name: Use permanent remote instance
id: use-permanent-instance
if: ${{ env.SECRETS_AVAILABLE == 'true' && failure() && inputs.profile == 'single-h100' }}
if: env.SECRETS_AVAILABLE == 'true' &&
steps.start-remote-instance.outcome == 'failure' &&
inputs.profile == 'single-h100'
run: |
echo "runner_group=h100x1" >> "$GITHUB_OUTPUT"

View File

@@ -136,7 +136,9 @@ jobs:
# This will allow to fallback on permanent instances running on Hyperstack.
- name: Use permanent remote instance
id: use-permanent-instance
if: ${{ env.SECRETS_AVAILABLE == 'true' && failure() && inputs.profile == 'single-h100' }}
if: env.SECRETS_AVAILABLE == 'true' &&
steps.start-remote-instance.outcome == 'failure' &&
inputs.profile == 'single-h100'
run: |
echo "runner_group=h100x1" >> "$GITHUB_OUTPUT"

View File

@@ -91,7 +91,7 @@ jobs:
# This will allow to fallback on permanent instances running on Hyperstack.
- name: Use permanent remote instance
id: use-permanent-instance
if: ${{ env.SECRETS_AVAILABLE == 'true' && steps.start-remote-instance.outcome == 'failure' }}
if: env.SECRETS_AVAILABLE == 'true' && steps.start-remote-instance.outcome == 'failure'
run: |
echo "runner_group=h100x1" >> "$GITHUB_OUTPUT"

View File

@@ -42,7 +42,7 @@ jobs:
# This will allow to fallback on permanent instances running on Hyperstack.
- name: Use permanent remote instance
id: use-permanent-instance
if: ${{ env.SECRETS_AVAILABLE == 'true' && failure() }}
if: env.SECRETS_AVAILABLE == 'true' && steps.start-remote-instance.outcome == 'failure'
run: |
echo "runner_group=h100x1" >> "$GITHUB_OUTPUT"

View File

@@ -92,7 +92,7 @@ jobs:
# This will allow to fallback on permanent instances running on Hyperstack.
- name: Use permanent remote instance
id: use-permanent-instance
if: ${{ env.SECRETS_AVAILABLE == 'true' && failure() }}
if: env.SECRETS_AVAILABLE == 'true' && steps.start-remote-instance.outcome == 'failure'
run: |
echo "runner_group=h100x1" >> "$GITHUB_OUTPUT"

View File

@@ -91,7 +91,7 @@ jobs:
# This will allow to fallback on permanent instances running on Hyperstack.
- name: Use permanent remote instance
id: use-permanent-instance
if: ${{ env.SECRETS_AVAILABLE == 'true' && failure() }}
if: env.SECRETS_AVAILABLE == 'true' && steps.start-remote-instance.outcome == 'failure'
run: |
echo "runner_group=h100x1" >> "$GITHUB_OUTPUT"

View File

@@ -433,6 +433,7 @@ clippy_versionable: install_rs_check_toolchain
.PHONY: clippy_tfhe_lints # Run clippy lints on tfhe-lints
clippy_tfhe_lints: install_cargo_dylint # the toolchain is selected with toolchain.toml
cd utils/tfhe-lints && \
rustup toolchain install && \
cargo clippy --all-targets -- --no-deps -D warnings
.PHONY: clippy_all # Run all clippy targets
@@ -909,6 +910,7 @@ test_versionable: install_rs_build_toolchain
.PHONY: test_tfhe_lints # Run test on tfhe-lints
test_tfhe_lints: install_cargo_dylint
cd utils/tfhe-lints && \
rustup toolchain install && \
cargo test
# The backward compat data repo holds historical binary data but also rust code to generate and load them.

View File

@@ -113,7 +113,8 @@ void scratch_cuda_full_propagation_64(
void cuda_full_propagation_64_inplace(void *const *streams,
uint32_t const *gpu_indexes,
uint32_t gpu_count, void *input_blocks,
uint32_t gpu_count,
CudaRadixCiphertextFFI *input_blocks,
int8_t *mem_ptr, void *const *ksks,
void *const *bsks, uint32_t num_blocks);

View File

@@ -841,8 +841,8 @@ template <typename Torus> struct int_fullprop_buffer {
int_radix_lut<Torus> *lut;
Torus *tmp_small_lwe_vector;
Torus *tmp_big_lwe_vector;
CudaRadixCiphertextFFI *tmp_small_lwe_vector;
CudaRadixCiphertextFFI *tmp_big_lwe_vector;
int_fullprop_buffer(cudaStream_t const *streams, uint32_t const *gpu_indexes,
uint32_t gpu_count, int_radix_params params,
@@ -889,17 +889,14 @@ template <typename Torus> struct int_fullprop_buffer {
lut->broadcast_lut(streams, gpu_indexes, 0);
// Temporary arrays
Torus small_vector_size =
2 * (params.small_lwe_dimension + 1) * sizeof(Torus);
Torus big_vector_size =
2 * (params.glwe_dimension * params.polynomial_size + 1) *
sizeof(Torus);
tmp_small_lwe_vector = (Torus *)cuda_malloc_async(
small_vector_size, streams[0], gpu_indexes[0]);
tmp_big_lwe_vector = (Torus *)cuda_malloc_async(
big_vector_size, streams[0], gpu_indexes[0]);
tmp_small_lwe_vector = new CudaRadixCiphertextFFI;
create_zero_radix_ciphertext_async<Torus>(streams[0], gpu_indexes[0],
tmp_small_lwe_vector, 2,
params.small_lwe_dimension);
tmp_big_lwe_vector = new CudaRadixCiphertextFFI;
create_zero_radix_ciphertext_async<Torus>(streams[0], gpu_indexes[0],
tmp_big_lwe_vector, 2,
params.big_lwe_dimension);
cuda_synchronize_stream(streams[0], gpu_indexes[0]);
free(h_lwe_indexes);
}
@@ -911,8 +908,10 @@ template <typename Torus> struct int_fullprop_buffer {
lut->release(streams, gpu_indexes, 1);
delete lut;
cuda_drop_async(tmp_small_lwe_vector, streams[0], gpu_indexes[0]);
cuda_drop_async(tmp_big_lwe_vector, streams[0], gpu_indexes[0]);
release_radix_ciphertext(streams[0], gpu_indexes[0], tmp_small_lwe_vector);
delete tmp_small_lwe_vector;
release_radix_ciphertext(streams[0], gpu_indexes[0], tmp_big_lwe_vector);
delete tmp_big_lwe_vector;
}
};

View File

@@ -4,17 +4,17 @@
void cuda_full_propagation_64_inplace(void *const *streams,
uint32_t const *gpu_indexes,
uint32_t gpu_count, void *input_blocks,
uint32_t gpu_count,
CudaRadixCiphertextFFI *input_blocks,
int8_t *mem_ptr, void *const *ksks,
void *const *bsks, uint32_t num_blocks) {
int_fullprop_buffer<uint64_t> *buffer =
(int_fullprop_buffer<uint64_t> *)mem_ptr;
host_full_propagate_inplace<uint64_t>(
(cudaStream_t *)(streams), gpu_indexes, gpu_count,
static_cast<uint64_t *>(input_blocks), buffer, (uint64_t **)(ksks), bsks,
num_blocks);
host_full_propagate_inplace<uint64_t>((cudaStream_t *)(streams), gpu_indexes,
gpu_count, input_blocks, buffer,
(uint64_t **)(ksks), bsks, num_blocks);
}
void scratch_cuda_full_propagation_64(

View File

@@ -689,6 +689,7 @@ __host__ void integer_radix_apply_univariate_lookup_table_kb(
cuda_memcpy_async_to_cpu(&lut_indexes, lut->get_lut_indexes(0, 0),
lut->num_blocks * sizeof(Torus), streams[0],
gpu_indexes[0]);
cuda_synchronize_stream(streams[0], gpu_indexes[0]);
for (uint i = 0; i < num_radix_blocks; i++) {
lwe_array_out->degrees[i] = lut->degrees[lut_indexes[i]];
lwe_array_out->noise_levels[i] = NoiseLevel::NOMINAL;
@@ -964,6 +965,7 @@ __host__ void integer_radix_apply_many_univariate_lookup_table_kb(
cuda_memcpy_async_to_cpu(&lut_indexes, lut->get_lut_indexes(0, 0),
lut->num_blocks * sizeof(Torus), streams[0],
gpu_indexes[0]);
cuda_synchronize_stream(streams[0], gpu_indexes[0]);
for (uint i = 0; i < lwe_array_out->num_radix_blocks; i++) {
lwe_array_out->degrees[i] = lut->degrees[i % lut->num_blocks];
lwe_array_out->noise_levels[i] = NoiseLevel::NOMINAL;
@@ -1173,6 +1175,7 @@ __host__ void integer_radix_apply_bivariate_lookup_table_kb(
cuda_memcpy_async_to_cpu(&lut_indexes, lut->get_lut_indexes(0, 0),
lut->num_blocks * sizeof(Torus), streams[0],
gpu_indexes[0]);
cuda_synchronize_stream(streams[0], gpu_indexes[0]);
for (uint i = 0; i < num_radix_blocks; i++) {
lwe_array_out->degrees[i] = lut->degrees[lut_indexes[i]];
lwe_array_out->noise_levels[i] = NoiseLevel::NOMINAL;
@@ -1974,7 +1977,8 @@ void host_compute_shifted_blocks_and_borrow_states(
template <typename Torus>
void host_full_propagate_inplace(cudaStream_t const *streams,
uint32_t const *gpu_indexes,
uint32_t gpu_count, Torus *input_blocks,
uint32_t gpu_count,
CudaRadixCiphertextFFI *input_blocks,
int_fullprop_buffer<Torus> *mem_ptr,
Torus *const *ksks, void *const *bsks,
uint32_t num_blocks) {
@@ -1987,39 +1991,51 @@ void host_full_propagate_inplace(cudaStream_t const *streams,
uint32_t num_many_lut = 1;
uint32_t lut_stride = 0;
for (int i = 0; i < num_blocks; i++) {
auto cur_input_block = &input_blocks[i * big_lwe_size];
CudaRadixCiphertextFFI cur_input_block;
as_radix_ciphertext_slice<Torus>(&cur_input_block, input_blocks, i, i + 1);
/// Since the keyswitch is done on one input only, use only 1 GPU
execute_keyswitch_async<Torus>(
streams, gpu_indexes, 1, mem_ptr->tmp_small_lwe_vector,
mem_ptr->lut->lwe_trivial_indexes, cur_input_block,
streams, gpu_indexes, 1, (Torus *)(mem_ptr->tmp_small_lwe_vector->ptr),
mem_ptr->lut->lwe_trivial_indexes, (Torus *)cur_input_block.ptr,
mem_ptr->lut->lwe_trivial_indexes, ksks, params.big_lwe_dimension,
params.small_lwe_dimension, params.ks_base_log, params.ks_level, 1);
cuda_memcpy_async_gpu_to_gpu(&mem_ptr->tmp_small_lwe_vector[small_lwe_size],
mem_ptr->tmp_small_lwe_vector,
small_lwe_size * sizeof(Torus), streams[0],
gpu_indexes[0]);
copy_radix_ciphertext_slice_async<Torus>(
streams[0], gpu_indexes[0], mem_ptr->tmp_small_lwe_vector, 1, 2,
mem_ptr->tmp_small_lwe_vector, 0, 1);
execute_pbs_async<Torus>(
streams, gpu_indexes, 1, mem_ptr->tmp_big_lwe_vector,
streams, gpu_indexes, 1, (Torus *)mem_ptr->tmp_big_lwe_vector->ptr,
mem_ptr->lut->lwe_trivial_indexes, mem_ptr->lut->lut_vec,
mem_ptr->lut->lut_indexes_vec, mem_ptr->tmp_small_lwe_vector,
mem_ptr->lut->lut_indexes_vec,
(Torus *)mem_ptr->tmp_small_lwe_vector->ptr,
mem_ptr->lut->lwe_trivial_indexes, bsks, mem_ptr->lut->buffer,
params.glwe_dimension, params.small_lwe_dimension,
params.polynomial_size, params.pbs_base_log, params.pbs_level,
params.grouping_factor, 2, params.pbs_type, num_many_lut, lut_stride);
cuda_memcpy_async_gpu_to_gpu(
(void *)cur_input_block, mem_ptr->tmp_big_lwe_vector,
big_lwe_size * sizeof(Torus), streams[0], gpu_indexes[0]);
copy_radix_ciphertext_slice_async<Torus>(streams[0], gpu_indexes[0],
&cur_input_block, 0, 1,
mem_ptr->tmp_big_lwe_vector, 0, 1);
Torus lut_indexes[mem_ptr->lut->num_blocks];
cuda_memcpy_async_to_cpu(&lut_indexes, mem_ptr->lut->get_lut_indexes(0, 0),
mem_ptr->lut->num_blocks * sizeof(Torus),
streams[0], gpu_indexes[0]);
cuda_synchronize_stream(streams[0], gpu_indexes[0]);
input_blocks->degrees[i] = mem_ptr->lut->degrees[lut_indexes[0]];
input_blocks->noise_levels[i] = NoiseLevel::NOMINAL;
if (i < num_blocks - 1) {
auto next_input_block = &input_blocks[(i + 1) * big_lwe_size];
legacy_host_addition<Torus>(streams[0], gpu_indexes[0], next_input_block,
(Torus const *)next_input_block,
&mem_ptr->tmp_big_lwe_vector[big_lwe_size],
params.big_lwe_dimension, 1);
CudaRadixCiphertextFFI next_input_block;
as_radix_ciphertext_slice<Torus>(&next_input_block, input_blocks, i + 1,
i + 2);
CudaRadixCiphertextFFI second_input;
as_radix_ciphertext_slice<Torus>(&second_input,
mem_ptr->tmp_big_lwe_vector, 1, 2);
host_addition<Torus>(streams[0], gpu_indexes[0], &next_input_block,
&next_input_block, &second_input, 1);
}
}
}

View File

@@ -319,7 +319,7 @@ unsafe extern "C" {
streams: *const *mut ffi::c_void,
gpu_indexes: *const u32,
gpu_count: u32,
input_blocks: *mut ffi::c_void,
input_blocks: *mut CudaRadixCiphertextFFI,
mem_ptr: *mut i8,
ksks: *const *mut ffi::c_void,
bsks: *const *mut ffi::c_void,

View File

@@ -12,4 +12,5 @@
"n3-H100x4": 6.08,
"n3-H100x2": 3.04,
"n3-L40x1": 0.80
"n3-H100x8-SXM5": 24,
}

View File

@@ -1,100 +1,66 @@
<svg xmlns="http://www.w3.org/2000/svg" width="540.0" height="520" viewBox="0 0 540.0 520">
<!-- Header Row -->
<rect x="0" y="0" width="540.0" height="40" fill="black" />
<text x="10" y="24.0" fill="white" font-family="Arial" font-size="14">Operation \ Size</text>
<text x="385.0" y="24.0" fill="white" font-family="Arial" font-size="14">CPU</text>
<text x="477.0" y="24.0" fill="white" font-family="Arial" font-size="14">GPU</text>
<!-- Data Rows -->
<rect x="0" y="40" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="64.0" fill="black" font-family="Arial" font-size="14">Negation (`-`)</text>
<rect x="356.0" y="40" width="540.0" height="40" fill="#f3f3f3" />
<text x="383.0" y="64.0" fill="black" font-family="Arial" font-size="14">106 ms</text>
<rect x="448.0" y="40" width="540.0" height="40" fill="#f3f3f3" />
<text x="471.0" y="64.0" fill="black" font-family="Arial" font-size="14">25.2 ms</text>
<rect x="0" y="80" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="104.0" fill="black" font-family="Arial" font-size="14">Add / Sub (`+`,`-`)</text>
<rect x="356.0" y="80" width="540.0" height="40" fill="#f3f3f3" />
<text x="383.0" y="104.0" fill="black" font-family="Arial" font-size="14">105 ms</text>
<rect x="448.0" y="80" width="540.0" height="40" fill="#f3f3f3" />
<text x="471.0" y="104.0" fill="black" font-family="Arial" font-size="14">25.2 ms</text>
<rect x="0" y="120" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="144.0" fill="black" font-family="Arial" font-size="14">Mul (`x`)</text>
<rect x="356.0" y="120" width="540.0" height="40" fill="#f3f3f3" />
<text x="383.0" y="144.0" fill="black" font-family="Arial" font-size="14">401 ms</text>
<rect x="448.0" y="120" width="540.0" height="40" fill="#f3f3f3" />
<text x="475.0" y="144.0" fill="black" font-family="Arial" font-size="14">237 ms</text>
<rect x="0" y="160" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="184.0" fill="black" font-family="Arial" font-size="14">Equal / Not Equal (`eq`, `ne`)</text>
<rect x="356.0" y="160" width="540.0" height="40" fill="#f3f3f3" />
<text x="379.0" y="184.0" fill="black" font-family="Arial" font-size="14">81.2 ms</text>
<rect x="448.0" y="160" width="540.0" height="40" fill="#f3f3f3" />
<text x="471.0" y="184.0" fill="black" font-family="Arial" font-size="14">17.7 ms</text>
<rect x="0" y="200" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="224.0" fill="black" font-family="Arial" font-size="14">Comparisons (`ge`, `gt`, `le`, `lt`)</text>
<rect x="356.0" y="200" width="540.0" height="40" fill="#f3f3f3" />
<text x="383.0" y="224.0" fill="black" font-family="Arial" font-size="14">102 ms</text>
<rect x="448.0" y="200" width="540.0" height="40" fill="#f3f3f3" />
<text x="471.0" y="224.0" fill="black" font-family="Arial" font-size="14">26.2 ms</text>
<rect x="0" y="240" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="264.0" fill="black" font-family="Arial" font-size="14">Max / Min (`max`,`min`)</text>
<rect x="356.0" y="240" width="540.0" height="40" fill="#f3f3f3" />
<text x="383.0" y="264.0" fill="black" font-family="Arial" font-size="14">145 ms</text>
<rect x="448.0" y="240" width="540.0" height="40" fill="#f3f3f3" />
<text x="471.0" y="264.0" fill="black" font-family="Arial" font-size="14">43.6 ms</text>
<rect x="0" y="280" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="304.0" fill="black" font-family="Arial" font-size="14">Bitwise operations (`&#38;`, `&#124;`, `^`)</text>
<rect x="356.0" y="280" width="540.0" height="40" fill="#f3f3f3" />
<text x="379.0" y="304.0" fill="black" font-family="Arial" font-size="14">20.7 ms</text>
<rect x="448.0" y="280" width="540.0" height="40" fill="#f3f3f3" />
<text x="471.0" y="304.0" fill="black" font-family="Arial" font-size="14">5.97 ms</text>
<rect x="0" y="320" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="344.0" fill="black" font-family="Arial" font-size="14">Div / Rem (`/`, `%`)</text>
<rect x="356.0" y="320" width="540.0" height="40" fill="#f3f3f3" />
<text x="383.0" y="344.0" fill="black" font-family="Arial" font-size="14">8.22 s</text>
<rect x="448.0" y="320" width="540.0" height="40" fill="#f3f3f3" />
<text x="475.0" y="344.0" fill="black" font-family="Arial" font-size="14">2.05 s</text>
<rect x="0" y="360" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="384.0" fill="black" font-family="Arial" font-size="14">Left / Right Shifts (`&#60;&#60;`, `&#62;&#62;`)</text>
<rect x="356.0" y="360" width="540.0" height="40" fill="#f3f3f3" />
<text x="383.0" y="384.0" fill="black" font-family="Arial" font-size="14">134 ms</text>
<rect x="448.0" y="360" width="540.0" height="40" fill="#f3f3f3" />
<text x="471.0" y="384.0" fill="black" font-family="Arial" font-size="14">86.7 ms</text>
<rect x="0" y="400" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="424.0" fill="black" font-family="Arial" font-size="14">Left / Right Rotations (`left_rotate`, `right_rotate`)</text>
<rect x="356.0" y="400" width="540.0" height="40" fill="#f3f3f3" />
<text x="383.0" y="424.0" fill="black" font-family="Arial" font-size="14">133 ms</text>
<rect x="448.0" y="400" width="540.0" height="40" fill="#f3f3f3" />
<text x="471.0" y="424.0" fill="black" font-family="Arial" font-size="14">86.8 ms</text>
<rect x="0" y="440" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="464.0" fill="black" font-family="Arial" font-size="14">Leading / Trailing zeros/ones</text>
<rect x="356.0" y="440" width="540.0" height="40" fill="#f3f3f3" />
<text x="383.0" y="464.0" fill="black" font-family="Arial" font-size="14">247 ms</text>
<rect x="448.0" y="440" width="540.0" height="40" fill="#f3f3f3" />
<text x="471.0" y="464.0" fill="black" font-family="Arial" font-size="14">62.3 ms</text>
<rect x="0" y="480" width="540.0" height="40" fill="#fbbc04" />
<text x="10" y="504.0" fill="black" font-family="Arial" font-size="14">Log2</text>
<rect x="356.0" y="480" width="540.0" height="40" fill="#f3f3f3" />
<text x="383.0" y="504.0" fill="black" font-family="Arial" font-size="14">267 ms</text>
<rect x="448.0" y="480" width="540.0" height="40" fill="#f3f3f3" />
<text x="471.0" y="504.0" fill="black" font-family="Arial" font-size="14">73.9 ms</text>
<!-- Borders -->
<line x1="0" y1="0" x2="0" y2="520" stroke="white" />
<line x1="356.0" y1="0" x2="356.0" y2="520" stroke="white" />
<line x1="448.0" y1="0" x2="448.0" y2="520" stroke="white" />
<line x1="0" y1="0" x2="540.0" y2="0" stroke="white" />
<line x1="0" y1="40" x2="540.0" y2="40" stroke="white" />
<line x1="0" y1="80" x2="540.0" y2="80" stroke="white" />
<line x1="0" y1="120" x2="540.0" y2="120" stroke="white" />
<line x1="0" y1="160" x2="540.0" y2="160" stroke="white" />
<line x1="0" y1="200" x2="540.0" y2="200" stroke="white" />
<line x1="0" y1="240" x2="540.0" y2="240" stroke="white" />
<line x1="0" y1="280" x2="540.0" y2="280" stroke="white" />
<line x1="0" y1="320" x2="540.0" y2="320" stroke="white" />
<line x1="0" y1="360" x2="540.0" y2="360" stroke="white" />
<line x1="0" y1="400" x2="540.0" y2="400" stroke="white" />
<line x1="0" y1="440" x2="540.0" y2="440" stroke="white" />
<line x1="0" y1="480" x2="540.0" y2="480" stroke="white" />
<line x1="0" y1="520" x2="540.0" y2="520" stroke="white" />
<?xml version="1.0" ?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 560" preserveAspectRatio="meet" width="100%" height="560">
<rect x="0" y="0" width="720" height="40" fill="black"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="6" y="20.0">Operation \ Size</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="405.0" y="20.0">CPU</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="615.0" y="20.0">GPU</text>
<rect x="0" y="40" width="300" height="520" fill="#fbbc04"/>
<rect x="300" y="40" width="420" height="520" fill="#f3f3f3"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="60.0">Negation (-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="60.0">106 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="60.0">25.2 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="100.0">Add / Sub (+,-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="100.0">105 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="100.0">25.2 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="140.0">Mul (x)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="140.0">401 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="140.0">237 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="180.0">Equal / Not Equal (eq, ne)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="180.0">81.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="180.0">17.7 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="220.0">Comparisons (ge, gt, le, lt)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="220.0">102 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="220.0">26.2 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="260.0">Max / Min (max, min)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="260.0">145 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="260.0">43.6 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="300.0">Bitwise operations (&amp;, |, ^)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="300.0">20.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="300.0">5.97 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="340.0">Div / Rem (/, %)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="340.0">8.22 s</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="340.0">2.05 s</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="380.0">Left / Right Shifts (&lt;&lt;, &gt;&gt;)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="380.0">134 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="380.0">86.7 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="420.0">Left / Right Rotations (left_rotate, right_rotate)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="420.0">133 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="420.0">86.8 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="460.0">Leading / Trailing zeros/ones</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="460.0">247 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="460.0">62.3 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="500.0">Log2</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="500.0">267 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="500.0">73.9 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="540.0">Select</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="405.0" y="540.0">32.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="615.0" y="540.0">17.5 ms</text>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="720" y2="0"/>
<line stroke="white" stroke-width="2" x1="0" y1="40" x2="720" y2="40"/>
<line stroke="white" stroke-width="2" x1="0" y1="80" x2="720" y2="80"/>
<line stroke="white" stroke-width="2" x1="0" y1="120" x2="720" y2="120"/>
<line stroke="white" stroke-width="2" x1="0" y1="160" x2="720" y2="160"/>
<line stroke="white" stroke-width="2" x1="0" y1="200" x2="720" y2="200"/>
<line stroke="white" stroke-width="2" x1="0" y1="240" x2="720" y2="240"/>
<line stroke="white" stroke-width="2" x1="0" y1="280" x2="720" y2="280"/>
<line stroke="white" stroke-width="2" x1="0" y1="320" x2="720" y2="320"/>
<line stroke="white" stroke-width="2" x1="0" y1="360" x2="720" y2="360"/>
<line stroke="white" stroke-width="2" x1="0" y1="400" x2="720" y2="400"/>
<line stroke="white" stroke-width="2" x1="0" y1="440" x2="720" y2="440"/>
<line stroke="white" stroke-width="2" x1="0" y1="480" x2="720" y2="480"/>
<line stroke="white" stroke-width="2" x1="0" y1="520" x2="720" y2="520"/>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="0" y2="560"/>
<line stroke="white" stroke-width="2" x1="300.0" y1="0" x2="300.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="510.0" y1="0" x2="510.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="720.0" y1="0" x2="720.0" y2="560"/>
</svg>

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@@ -1,247 +1,116 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1268.0" height="560" viewBox="0 0 1268.0 560">
<!-- Header Row -->
<rect x="0" y="0" width="1268.0" height="40" fill="black" />
<text x="10" y="24.0" fill="white" font-family="Arial" font-size="14">Operation \ Size</text>
<text x="383.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint4</text>
<text x="515.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint8</text>
<text x="643.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint16</text>
<text x="775.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint32</text>
<text x="907.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint64</text>
<text x="1035.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint128</text>
<text x="1167.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint256</text>
<!-- Data Rows -->
<rect x="0" y="40" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="64.0" fill="black" font-family="Arial" font-size="14">Negation (`-`)</text>
<rect x="344.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="64.0" fill="black" font-family="Arial" font-size="14">33.4 ms</text>
<rect x="476.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="64.0" fill="black" font-family="Arial" font-size="14">48.9 ms</text>
<rect x="608.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="64.0" fill="black" font-family="Arial" font-size="14">57.4 ms</text>
<rect x="740.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="64.0" fill="black" font-family="Arial" font-size="14">79.7 ms</text>
<rect x="872.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="64.0" fill="black" font-family="Arial" font-size="14">105 ms</text>
<rect x="1004.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="64.0" fill="black" font-family="Arial" font-size="14">159 ms</text>
<rect x="1136.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="64.0" fill="black" font-family="Arial" font-size="14">183 ms</text>
<rect x="0" y="80" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="104.0" fill="black" font-family="Arial" font-size="14">Add / Sub (`+`,`-`)</text>
<rect x="344.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="104.0" fill="black" font-family="Arial" font-size="14">33.5 ms</text>
<rect x="476.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="104.0" fill="black" font-family="Arial" font-size="14">53.5 ms</text>
<rect x="608.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="104.0" fill="black" font-family="Arial" font-size="14">59.8 ms</text>
<rect x="740.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="104.0" fill="black" font-family="Arial" font-size="14">82.1 ms</text>
<rect x="872.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="104.0" fill="black" font-family="Arial" font-size="14">109 ms</text>
<rect x="1004.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="104.0" fill="black" font-family="Arial" font-size="14">165 ms</text>
<rect x="1136.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="104.0" fill="black" font-family="Arial" font-size="14">187 ms</text>
<rect x="0" y="120" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="144.0" fill="black" font-family="Arial" font-size="14">Mul (`x`)</text>
<rect x="344.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="144.0" fill="black" font-family="Arial" font-size="14">39.7 ms</text>
<rect x="476.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="144.0" fill="black" font-family="Arial" font-size="14">97.5 ms</text>
<rect x="608.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="144.0" fill="black" font-family="Arial" font-size="14">141 ms</text>
<rect x="740.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="144.0" fill="black" font-family="Arial" font-size="14">213 ms</text>
<rect x="872.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="144.0" fill="black" font-family="Arial" font-size="14">400 ms</text>
<rect x="1004.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="144.0" fill="black" font-family="Arial" font-size="14">1.14 s</text>
<rect x="1136.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="144.0" fill="black" font-family="Arial" font-size="14">3.79 s</text>
<rect x="0" y="160" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="184.0" fill="black" font-family="Arial" font-size="14">Equal / Not Equal (`eq`, `ne`)</text>
<rect x="344.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="184.0" fill="black" font-family="Arial" font-size="14">34.3 ms</text>
<rect x="476.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="184.0" fill="black" font-family="Arial" font-size="14">36.1 ms</text>
<rect x="608.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="184.0" fill="black" font-family="Arial" font-size="14">56.3 ms</text>
<rect x="740.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="184.0" fill="black" font-family="Arial" font-size="14">56.9 ms</text>
<rect x="872.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="184.0" fill="black" font-family="Arial" font-size="14">81.4 ms</text>
<rect x="1004.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="184.0" fill="black" font-family="Arial" font-size="14">82.0 ms</text>
<rect x="1136.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="184.0" fill="black" font-family="Arial" font-size="14">104 ms</text>
<rect x="0" y="200" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="224.0" fill="black" font-family="Arial" font-size="14">Comparisons (`ge`, `gt`, `le`, `lt`)</text>
<rect x="344.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="224.0" fill="black" font-family="Arial" font-size="14">37.4 ms</text>
<rect x="476.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="224.0" fill="black" font-family="Arial" font-size="14">37.1 ms</text>
<rect x="608.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="224.0" fill="black" font-family="Arial" font-size="14">54.8 ms</text>
<rect x="740.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="224.0" fill="black" font-family="Arial" font-size="14">76.7 ms</text>
<rect x="872.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="224.0" fill="black" font-family="Arial" font-size="14">99.0 ms</text>
<rect x="1004.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="224.0" fill="black" font-family="Arial" font-size="14">145 ms</text>
<rect x="1136.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="224.0" fill="black" font-family="Arial" font-size="14">175 ms</text>
<rect x="0" y="240" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="264.0" fill="black" font-family="Arial" font-size="14">Max / Min (`max`,`min`)</text>
<rect x="344.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="264.0" fill="black" font-family="Arial" font-size="14">75.6 ms</text>
<rect x="476.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="264.0" fill="black" font-family="Arial" font-size="14">76.9 ms</text>
<rect x="608.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="264.0" fill="black" font-family="Arial" font-size="14">97.6 ms</text>
<rect x="740.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="264.0" fill="black" font-family="Arial" font-size="14">121 ms</text>
<rect x="872.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="264.0" fill="black" font-family="Arial" font-size="14">148 ms</text>
<rect x="1004.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="264.0" fill="black" font-family="Arial" font-size="14">194 ms</text>
<rect x="1136.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="264.0" fill="black" font-family="Arial" font-size="14">244 ms</text>
<rect x="0" y="280" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="304.0" fill="black" font-family="Arial" font-size="14">Bitwise operations (`&#38;`, `&#124;`, `^`)</text>
<rect x="344.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="304.0" fill="black" font-family="Arial" font-size="14">20.2 ms</text>
<rect x="476.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="304.0" fill="black" font-family="Arial" font-size="14">18.7 ms</text>
<rect x="608.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="304.0" fill="black" font-family="Arial" font-size="14">19.7 ms</text>
<rect x="740.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="304.0" fill="black" font-family="Arial" font-size="14">20.6 ms</text>
<rect x="872.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="304.0" fill="black" font-family="Arial" font-size="14">22.9 ms</text>
<rect x="1004.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="304.0" fill="black" font-family="Arial" font-size="14">23.8 ms</text>
<rect x="1136.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="304.0" fill="black" font-family="Arial" font-size="14">26.3 ms</text>
<rect x="0" y="320" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="344.0" fill="black" font-family="Arial" font-size="14">Div / Rem (`/`, `%`)</text>
<rect x="344.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="391.0" y="344.0" fill="black" font-family="Arial" font-size="14">295 ms</text>
<rect x="476.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="344.0" fill="black" font-family="Arial" font-size="14">644 ms</text>
<rect x="608.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="344.0" fill="black" font-family="Arial" font-size="14">1.49 s</text>
<rect x="740.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="344.0" fill="black" font-family="Arial" font-size="14">3.44 s</text>
<rect x="872.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="344.0" fill="black" font-family="Arial" font-size="14">8.49 s</text>
<rect x="1004.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="344.0" fill="black" font-family="Arial" font-size="14">20.9 s</text>
<rect x="1136.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="344.0" fill="black" font-family="Arial" font-size="14">54.6 s</text>
<rect x="0" y="360" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="384.0" fill="black" font-family="Arial" font-size="14">Left / Right Shifts (`&#60;&#60;`, `&#62;&#62;`)</text>
<rect x="344.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="384.0" fill="black" font-family="Arial" font-size="14">34.7 ms</text>
<rect x="476.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="384.0" fill="black" font-family="Arial" font-size="14">58.8 ms</text>
<rect x="608.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="384.0" fill="black" font-family="Arial" font-size="14">81.9 ms</text>
<rect x="740.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="384.0" fill="black" font-family="Arial" font-size="14">107 ms</text>
<rect x="872.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="384.0" fill="black" font-family="Arial" font-size="14">142 ms</text>
<rect x="1004.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="384.0" fill="black" font-family="Arial" font-size="14">178 ms</text>
<rect x="1136.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="384.0" fill="black" font-family="Arial" font-size="14">248 ms</text>
<rect x="0" y="400" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="424.0" fill="black" font-family="Arial" font-size="14">Left / Right Rotations (`left_rotate`, `right_rotate`)</text>
<rect x="344.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="424.0" fill="black" font-family="Arial" font-size="14">39.7 ms</text>
<rect x="476.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="424.0" fill="black" font-family="Arial" font-size="14">59.7 ms</text>
<rect x="608.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="424.0" fill="black" font-family="Arial" font-size="14">81.4 ms</text>
<rect x="740.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="424.0" fill="black" font-family="Arial" font-size="14">107 ms</text>
<rect x="872.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="424.0" fill="black" font-family="Arial" font-size="14">142 ms</text>
<rect x="1004.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="424.0" fill="black" font-family="Arial" font-size="14">186 ms</text>
<rect x="1136.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="424.0" fill="black" font-family="Arial" font-size="14">249 ms</text>
<rect x="0" y="440" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="464.0" fill="black" font-family="Arial" font-size="14">Leading / Trailing zeros/ones</text>
<rect x="344.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="464.0" fill="black" font-family="Arial" font-size="14">77.1 ms</text>
<rect x="476.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="464.0" fill="black" font-family="Arial" font-size="14">95.7 ms</text>
<rect x="608.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="464.0" fill="black" font-family="Arial" font-size="14">159 ms</text>
<rect x="740.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="464.0" fill="black" font-family="Arial" font-size="14">182 ms</text>
<rect x="872.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="464.0" fill="black" font-family="Arial" font-size="14">255 ms</text>
<rect x="1004.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="464.0" fill="black" font-family="Arial" font-size="14">304 ms</text>
<rect x="1136.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="464.0" fill="black" font-family="Arial" font-size="14">345 ms</text>
<rect x="0" y="480" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="504.0" fill="black" font-family="Arial" font-size="14">Log2</text>
<rect x="344.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="504.0" fill="black" font-family="Arial" font-size="14">90.4 ms</text>
<rect x="476.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="504.0" fill="black" font-family="Arial" font-size="14">114 ms</text>
<rect x="608.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="504.0" fill="black" font-family="Arial" font-size="14">173 ms</text>
<rect x="740.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="504.0" fill="black" font-family="Arial" font-size="14">199 ms</text>
<rect x="872.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="504.0" fill="black" font-family="Arial" font-size="14">280 ms</text>
<rect x="1004.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="504.0" fill="black" font-family="Arial" font-size="14">327 ms</text>
<rect x="1136.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="504.0" fill="black" font-family="Arial" font-size="14">369 ms</text>
<rect x="0" y="520" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="544.0" fill="black" font-family="Arial" font-size="14">Select</text>
<rect x="344.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="544.0" fill="black" font-family="Arial" font-size="14">27.8 ms</text>
<rect x="476.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="544.0" fill="black" font-family="Arial" font-size="14">29.7 ms</text>
<rect x="608.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="544.0" fill="black" font-family="Arial" font-size="14">32.0 ms</text>
<rect x="740.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="544.0" fill="black" font-family="Arial" font-size="14">33.0 ms</text>
<rect x="872.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="544.0" fill="black" font-family="Arial" font-size="14">36.1 ms</text>
<rect x="1004.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="544.0" fill="black" font-family="Arial" font-size="14">37.2 ms</text>
<rect x="1136.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="544.0" fill="black" font-family="Arial" font-size="14">49.6 ms</text>
<!-- Borders -->
<line x1="0" y1="0" x2="0" y2="560" stroke="white" />
<line x1="344.0" y1="0" x2="344.0" y2="560" stroke="white" />
<line x1="476.0" y1="0" x2="476.0" y2="560" stroke="white" />
<line x1="608.0" y1="0" x2="608.0" y2="560" stroke="white" />
<line x1="740.0" y1="0" x2="740.0" y2="560" stroke="white" />
<line x1="872.0" y1="0" x2="872.0" y2="560" stroke="white" />
<line x1="1004.0" y1="0" x2="1004.0" y2="560" stroke="white" />
<line x1="1136.0" y1="0" x2="1136.0" y2="560" stroke="white" />
<line x1="0" y1="0" x2="1268.0" y2="0" stroke="white" />
<line x1="0" y1="40" x2="1268.0" y2="40" stroke="white" />
<line x1="0" y1="80" x2="1268.0" y2="80" stroke="white" />
<line x1="0" y1="120" x2="1268.0" y2="120" stroke="white" />
<line x1="0" y1="160" x2="1268.0" y2="160" stroke="white" />
<line x1="0" y1="200" x2="1268.0" y2="200" stroke="white" />
<line x1="0" y1="240" x2="1268.0" y2="240" stroke="white" />
<line x1="0" y1="280" x2="1268.0" y2="280" stroke="white" />
<line x1="0" y1="320" x2="1268.0" y2="320" stroke="white" />
<line x1="0" y1="360" x2="1268.0" y2="360" stroke="white" />
<line x1="0" y1="400" x2="1268.0" y2="400" stroke="white" />
<line x1="0" y1="440" x2="1268.0" y2="440" stroke="white" />
<line x1="0" y1="480" x2="1268.0" y2="480" stroke="white" />
<line x1="0" y1="520" x2="1268.0" y2="520" stroke="white" />
<line x1="0" y1="560" x2="1268.0" y2="560" stroke="white" />
<?xml version="1.0" ?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 560" preserveAspectRatio="meet" width="100%" height="560">
<rect x="0" y="0" width="720" height="40" fill="black"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="6" y="20.0">Operation \ Size</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="29.666666666666668">8</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="29.666666666666668">16</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="29.666666666666668">32</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="29.666666666666668">64</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="29.666666666666668">128</text>
<rect x="0" y="40" width="300" height="520" fill="#fbbc04"/>
<rect x="300" y="40" width="420" height="520" fill="#f3f3f3"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="60.0">Negation (-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="60.0">48.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="60.0">57.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="60.0">79.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="60.0">105 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="60.0">159 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="100.0">Add / Sub (+,-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="100.0">53.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="100.0">59.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="100.0">82.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="100.0">109 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="100.0">165 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="140.0">Mul (x)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="140.0">97.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="140.0">141 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="140.0">213 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="140.0">400 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="140.0">1.14 s</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="180.0">Equal / Not Equal (eq, ne)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="180.0">36.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="180.0">56.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="180.0">56.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="180.0">81.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="180.0">82.0 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="220.0">Comparisons (ge, gt, le, lt)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="220.0">37.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="220.0">54.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="220.0">76.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="220.0">99.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="220.0">145 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="260.0">Max / Min (max, min)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="260.0">76.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="260.0">97.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="260.0">121 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="260.0">148 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="260.0">194 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="300.0">Bitwise operations (&amp;, |, ^)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="300.0">18.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="300.0">19.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="300.0">20.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="300.0">22.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="300.0">23.8 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="340.0">Div / Rem (/, %)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="340.0">644 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="340.0">1.49 s</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="340.0">3.44 s</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="340.0">8.49 s</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="340.0">20.9 s</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="380.0">Left / Right Shifts (&lt;&lt;, &gt;&gt;)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="380.0">58.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="380.0">81.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="380.0">107 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="380.0">142 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="380.0">178 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="420.0">Left / Right Rotations (left_rotate, right_rotate)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="420.0">59.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="420.0">81.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="420.0">107 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="420.0">142 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="420.0">186 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="460.0">Leading / Trailing zeros/ones</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="460.0">95.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="460.0">159 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="460.0">182 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="460.0">255 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="460.0">304 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="500.0">Log2</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="500.0">114 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="500.0">173 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="500.0">199 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="500.0">280 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="500.0">327 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="540.0">Select</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="540.0">29.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="540.0">32.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="540.0">33.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="540.0">36.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="540.0">37.2 ms</text>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="720" y2="0"/>
<line stroke="white" stroke-width="2" x1="0" y1="40" x2="720" y2="40"/>
<line stroke="white" stroke-width="2" x1="0" y1="80" x2="720" y2="80"/>
<line stroke="white" stroke-width="2" x1="0" y1="120" x2="720" y2="120"/>
<line stroke="white" stroke-width="2" x1="0" y1="160" x2="720" y2="160"/>
<line stroke="white" stroke-width="2" x1="0" y1="200" x2="720" y2="200"/>
<line stroke="white" stroke-width="2" x1="0" y1="240" x2="720" y2="240"/>
<line stroke="white" stroke-width="2" x1="0" y1="280" x2="720" y2="280"/>
<line stroke="white" stroke-width="2" x1="0" y1="320" x2="720" y2="320"/>
<line stroke="white" stroke-width="2" x1="0" y1="360" x2="720" y2="360"/>
<line stroke="white" stroke-width="2" x1="0" y1="400" x2="720" y2="400"/>
<line stroke="white" stroke-width="2" x1="0" y1="440" x2="720" y2="440"/>
<line stroke="white" stroke-width="2" x1="0" y1="480" x2="720" y2="480"/>
<line stroke="white" stroke-width="2" x1="0" y1="520" x2="720" y2="520"/>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="0" y2="560"/>
<line stroke="white" stroke-width="2" x1="300.0" y1="0" x2="300.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="384.0" y1="0" x2="384.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="468.0" y1="0" x2="468.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="552.0" y1="0" x2="552.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="636.0" y1="0" x2="636.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="720.0" y1="0" x2="720.0" y2="560"/>
</svg>

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,196 +1,95 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1268.0" height="440" viewBox="0 0 1268.0 440">
<!-- Header Row -->
<rect x="0" y="0" width="1268.0" height="40" fill="black" />
<text x="10" y="24.0" fill="white" font-family="Arial" font-size="14">Operation \ Size</text>
<text x="383.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint4</text>
<text x="515.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint8</text>
<text x="643.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint16</text>
<text x="775.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint32</text>
<text x="907.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint64</text>
<text x="1035.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint128</text>
<text x="1167.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint256</text>
<!-- Data Rows -->
<rect x="0" y="40" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="64.0" fill="black" font-family="Arial" font-size="14">Add / Sub (`+`,`-`)</text>
<rect x="344.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="64.0" fill="black" font-family="Arial" font-size="14">33.5 ms</text>
<rect x="476.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="64.0" fill="black" font-family="Arial" font-size="14">52.5 ms</text>
<rect x="608.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="64.0" fill="black" font-family="Arial" font-size="14">60.6 ms</text>
<rect x="740.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="64.0" fill="black" font-family="Arial" font-size="14">64.2 ms</text>
<rect x="872.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="64.0" fill="black" font-family="Arial" font-size="14">89.3 ms</text>
<rect x="1004.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="64.0" fill="black" font-family="Arial" font-size="14">111 ms</text>
<rect x="1136.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="64.0" fill="black" font-family="Arial" font-size="14">181 ms</text>
<rect x="0" y="80" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="104.0" fill="black" font-family="Arial" font-size="14">Mul (`x`)</text>
<rect x="344.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="104.0" fill="black" font-family="Arial" font-size="14">36.2 ms</text>
<rect x="476.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="104.0" fill="black" font-family="Arial" font-size="14">74.8 ms</text>
<rect x="608.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="104.0" fill="black" font-family="Arial" font-size="14">125 ms</text>
<rect x="740.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="104.0" fill="black" font-family="Arial" font-size="14">175 ms</text>
<rect x="872.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="104.0" fill="black" font-family="Arial" font-size="14">242 ms</text>
<rect x="1004.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="104.0" fill="black" font-family="Arial" font-size="14">453 ms</text>
<rect x="1136.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="104.0" fill="black" font-family="Arial" font-size="14">1.11 s</text>
<rect x="0" y="120" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="144.0" fill="black" font-family="Arial" font-size="14">Equal / Not Equal (`eq`, `ne`)</text>
<rect x="344.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="144.0" fill="black" font-family="Arial" font-size="14">18.8 ms</text>
<rect x="476.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="144.0" fill="black" font-family="Arial" font-size="14">32.2 ms</text>
<rect x="608.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="144.0" fill="black" font-family="Arial" font-size="14">35.2 ms</text>
<rect x="740.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="144.0" fill="black" font-family="Arial" font-size="14">55.2 ms</text>
<rect x="872.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="144.0" fill="black" font-family="Arial" font-size="14">58.2 ms</text>
<rect x="1004.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="144.0" fill="black" font-family="Arial" font-size="14">79.0 ms</text>
<rect x="1136.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="144.0" fill="black" font-family="Arial" font-size="14">81.2 ms</text>
<rect x="0" y="160" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="184.0" fill="black" font-family="Arial" font-size="14">Comparisons (`ge`, `gt`, `le`, `lt`)</text>
<rect x="344.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="184.0" fill="black" font-family="Arial" font-size="14">15.1 ms</text>
<rect x="476.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="184.0" fill="black" font-family="Arial" font-size="14">37.2 ms</text>
<rect x="608.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="184.0" fill="black" font-family="Arial" font-size="14">36.6 ms</text>
<rect x="740.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="184.0" fill="black" font-family="Arial" font-size="14">56.0 ms</text>
<rect x="872.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="184.0" fill="black" font-family="Arial" font-size="14">78.9 ms</text>
<rect x="1004.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="184.0" fill="black" font-family="Arial" font-size="14">101 ms</text>
<rect x="1136.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="184.0" fill="black" font-family="Arial" font-size="14">145 ms</text>
<rect x="0" y="200" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="224.0" fill="black" font-family="Arial" font-size="14">Max / Min (`max`,`min`)</text>
<rect x="344.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="224.0" fill="black" font-family="Arial" font-size="14">32.9 ms</text>
<rect x="476.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="224.0" fill="black" font-family="Arial" font-size="14">52.6 ms</text>
<rect x="608.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="224.0" fill="black" font-family="Arial" font-size="14">57.0 ms</text>
<rect x="740.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="224.0" fill="black" font-family="Arial" font-size="14">78.1 ms</text>
<rect x="872.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="224.0" fill="black" font-family="Arial" font-size="14">103 ms</text>
<rect x="1004.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="224.0" fill="black" font-family="Arial" font-size="14">123 ms</text>
<rect x="1136.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="224.0" fill="black" font-family="Arial" font-size="14">171 ms</text>
<rect x="0" y="240" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="264.0" fill="black" font-family="Arial" font-size="14">Bitwise operations (`&#38;`, `&#124;`, `^`)</text>
<rect x="344.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="264.0" fill="black" font-family="Arial" font-size="14">18.0 ms</text>
<rect x="476.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="264.0" fill="black" font-family="Arial" font-size="14">18.9 ms</text>
<rect x="608.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="264.0" fill="black" font-family="Arial" font-size="14">19.6 ms</text>
<rect x="740.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="264.0" fill="black" font-family="Arial" font-size="14">21.4 ms</text>
<rect x="872.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="264.0" fill="black" font-family="Arial" font-size="14">23.1 ms</text>
<rect x="1004.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="264.0" fill="black" font-family="Arial" font-size="14">24.1 ms</text>
<rect x="1136.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="264.0" fill="black" font-family="Arial" font-size="14">26.7 ms</text>
<rect x="0" y="280" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="304.0" fill="black" font-family="Arial" font-size="14">Div (`/`)</text>
<rect x="344.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="304.0" fill="black" font-family="Arial" font-size="14">81.1 ms</text>
<rect x="476.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="304.0" fill="black" font-family="Arial" font-size="14">139 ms</text>
<rect x="608.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="304.0" fill="black" font-family="Arial" font-size="14">202 ms</text>
<rect x="740.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="304.0" fill="black" font-family="Arial" font-size="14">280 ms</text>
<rect x="872.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="304.0" fill="black" font-family="Arial" font-size="14">456 ms</text>
<rect x="1004.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="304.0" fill="black" font-family="Arial" font-size="14">912 ms</text>
<rect x="1136.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="304.0" fill="black" font-family="Arial" font-size="14">2.33 s</text>
<rect x="0" y="320" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="344.0" fill="black" font-family="Arial" font-size="14">Rem (`%`)</text>
<rect x="344.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="391.0" y="344.0" fill="black" font-family="Arial" font-size="14">154 ms</text>
<rect x="476.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="344.0" fill="black" font-family="Arial" font-size="14">275 ms</text>
<rect x="608.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="344.0" fill="black" font-family="Arial" font-size="14">366 ms</text>
<rect x="740.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="344.0" fill="black" font-family="Arial" font-size="14">536 ms</text>
<rect x="872.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="344.0" fill="black" font-family="Arial" font-size="14">778 ms</text>
<rect x="1004.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="344.0" fill="black" font-family="Arial" font-size="14">1.37 s</text>
<rect x="1136.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="344.0" fill="black" font-family="Arial" font-size="14">3.13 s</text>
<rect x="0" y="360" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="384.0" fill="black" font-family="Arial" font-size="14">Left / Right Shifts (`&#60;&#60;`, `&#62;&#62;`)</text>
<rect x="344.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="384.0" fill="black" font-family="Arial" font-size="14">22.3 ms</text>
<rect x="476.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="384.0" fill="black" font-family="Arial" font-size="14">20.0 ms</text>
<rect x="608.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="384.0" fill="black" font-family="Arial" font-size="14">20.3 ms</text>
<rect x="740.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="384.0" fill="black" font-family="Arial" font-size="14">21.2 ms</text>
<rect x="872.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="384.0" fill="black" font-family="Arial" font-size="14">23.2 ms</text>
<rect x="1004.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="384.0" fill="black" font-family="Arial" font-size="14">24.2 ms</text>
<rect x="1136.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="384.0" fill="black" font-family="Arial" font-size="14">26.5 ms</text>
<rect x="0" y="400" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="424.0" fill="black" font-family="Arial" font-size="14">Left / Right Rotations (`left_rotate`, `right_rotate`)</text>
<rect x="344.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="424.0" fill="black" font-family="Arial" font-size="14">20.2 ms</text>
<rect x="476.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="424.0" fill="black" font-family="Arial" font-size="14">19.5 ms</text>
<rect x="608.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="424.0" fill="black" font-family="Arial" font-size="14">20.6 ms</text>
<rect x="740.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="424.0" fill="black" font-family="Arial" font-size="14">21.1 ms</text>
<rect x="872.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="424.0" fill="black" font-family="Arial" font-size="14">23.6 ms</text>
<rect x="1004.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="424.0" fill="black" font-family="Arial" font-size="14">24.1 ms</text>
<rect x="1136.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="424.0" fill="black" font-family="Arial" font-size="14">26.2 ms</text>
<!-- Borders -->
<line x1="0" y1="0" x2="0" y2="440" stroke="white" />
<line x1="344.0" y1="0" x2="344.0" y2="440" stroke="white" />
<line x1="476.0" y1="0" x2="476.0" y2="440" stroke="white" />
<line x1="608.0" y1="0" x2="608.0" y2="440" stroke="white" />
<line x1="740.0" y1="0" x2="740.0" y2="440" stroke="white" />
<line x1="872.0" y1="0" x2="872.0" y2="440" stroke="white" />
<line x1="1004.0" y1="0" x2="1004.0" y2="440" stroke="white" />
<line x1="1136.0" y1="0" x2="1136.0" y2="440" stroke="white" />
<line x1="0" y1="0" x2="1268.0" y2="0" stroke="white" />
<line x1="0" y1="40" x2="1268.0" y2="40" stroke="white" />
<line x1="0" y1="80" x2="1268.0" y2="80" stroke="white" />
<line x1="0" y1="120" x2="1268.0" y2="120" stroke="white" />
<line x1="0" y1="160" x2="1268.0" y2="160" stroke="white" />
<line x1="0" y1="200" x2="1268.0" y2="200" stroke="white" />
<line x1="0" y1="240" x2="1268.0" y2="240" stroke="white" />
<line x1="0" y1="280" x2="1268.0" y2="280" stroke="white" />
<line x1="0" y1="320" x2="1268.0" y2="320" stroke="white" />
<line x1="0" y1="360" x2="1268.0" y2="360" stroke="white" />
<line x1="0" y1="400" x2="1268.0" y2="400" stroke="white" />
<line x1="0" y1="440" x2="1268.0" y2="440" stroke="white" />
<?xml version="1.0" ?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 440" preserveAspectRatio="meet" width="100%" height="440">
<rect x="0" y="0" width="720" height="40" fill="black"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="6" y="20.0">Operation \ Size</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="29.666666666666668">8</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="29.666666666666668">16</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="29.666666666666668">32</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="29.666666666666668">64</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="29.666666666666668">128</text>
<rect x="0" y="40" width="300" height="400" fill="#fbbc04"/>
<rect x="300" y="40" width="420" height="400" fill="#f3f3f3"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="60.0">Add / Sub (+,-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="60.0">52.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="60.0">60.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="60.0">64.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="60.0">89.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="60.0">111 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="100.0">Mul (x)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="100.0">74.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="100.0">125 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="100.0">175 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="100.0">242 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="100.0">453 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="140.0">Equal / Not Equal (eq, ne)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="140.0">32.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="140.0">35.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="140.0">55.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="140.0">58.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="140.0">79.0 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="180.0">Comparisons (ge, gt, le, lt)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="180.0">37.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="180.0">36.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="180.0">56.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="180.0">78.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="180.0">101 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="220.0">Max / Min (max, min)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="220.0">52.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="220.0">57.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="220.0">78.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="220.0">103 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="220.0">123 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="260.0">Bitwise operations (&amp;, |, ^)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="260.0">18.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="260.0">19.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="260.0">21.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="260.0">23.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="260.0">24.1 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="300.0">Div (/)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="300.0">139 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="300.0">202 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="300.0">280 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="300.0">456 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="300.0">912 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="340.0">Rem (%)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="340.0">275 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="340.0">366 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="340.0">536 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="340.0">778 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="340.0">1.37 s</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="380.0">Left / Right Shifts (&lt;&lt;, &gt;&gt;)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="380.0">20.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="380.0">20.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="380.0">21.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="380.0">23.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="380.0">24.2 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="420.0">Left / Right Rotations (left_rotate, right_rotate)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="420.0">19.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="420.0">20.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="420.0">21.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="420.0">23.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="420.0">24.1 ms</text>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="720" y2="0"/>
<line stroke="white" stroke-width="2" x1="0" y1="40" x2="720" y2="40"/>
<line stroke="white" stroke-width="2" x1="0" y1="80" x2="720" y2="80"/>
<line stroke="white" stroke-width="2" x1="0" y1="120" x2="720" y2="120"/>
<line stroke="white" stroke-width="2" x1="0" y1="160" x2="720" y2="160"/>
<line stroke="white" stroke-width="2" x1="0" y1="200" x2="720" y2="200"/>
<line stroke="white" stroke-width="2" x1="0" y1="240" x2="720" y2="240"/>
<line stroke="white" stroke-width="2" x1="0" y1="280" x2="720" y2="280"/>
<line stroke="white" stroke-width="2" x1="0" y1="320" x2="720" y2="320"/>
<line stroke="white" stroke-width="2" x1="0" y1="360" x2="720" y2="360"/>
<line stroke="white" stroke-width="2" x1="0" y1="400" x2="720" y2="400"/>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="0" y2="440"/>
<line stroke="white" stroke-width="2" x1="300.0" y1="0" x2="300.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="384.0" y1="0" x2="384.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="468.0" y1="0" x2="468.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="552.0" y1="0" x2="552.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="636.0" y1="0" x2="636.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="720.0" y1="0" x2="720.0" y2="440"/>
</svg>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,247 +1,116 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1268.0" height="560" viewBox="0 0 1268.0 560">
<!-- Header Row -->
<rect x="0" y="0" width="1268.0" height="40" fill="black" />
<text x="10" y="24.0" fill="white" font-family="Arial" font-size="14">Operation \ Size</text>
<text x="383.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint4</text>
<text x="515.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint8</text>
<text x="643.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint16</text>
<text x="775.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint32</text>
<text x="907.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint64</text>
<text x="1035.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint128</text>
<text x="1167.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint256</text>
<!-- Data Rows -->
<rect x="0" y="40" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="64.0" fill="black" font-family="Arial" font-size="14">Negation (`-`)</text>
<rect x="344.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="64.0" fill="black" font-family="Arial" font-size="14">33.1 ms</text>
<rect x="476.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="64.0" fill="black" font-family="Arial" font-size="14">48.7 ms</text>
<rect x="608.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="64.0" fill="black" font-family="Arial" font-size="14">57.6 ms</text>
<rect x="740.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="64.0" fill="black" font-family="Arial" font-size="14">81.2 ms</text>
<rect x="872.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="64.0" fill="black" font-family="Arial" font-size="14">106 ms</text>
<rect x="1004.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="64.0" fill="black" font-family="Arial" font-size="14">168 ms</text>
<rect x="1136.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="64.0" fill="black" font-family="Arial" font-size="14">189 ms</text>
<rect x="0" y="80" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="104.0" fill="black" font-family="Arial" font-size="14">Add / Sub (`+`,`-`)</text>
<rect x="344.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="104.0" fill="black" font-family="Arial" font-size="14">38.1 ms</text>
<rect x="476.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="104.0" fill="black" font-family="Arial" font-size="14">59.9 ms</text>
<rect x="608.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="104.0" fill="black" font-family="Arial" font-size="14">60.2 ms</text>
<rect x="740.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="104.0" fill="black" font-family="Arial" font-size="14">82.2 ms</text>
<rect x="872.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="104.0" fill="black" font-family="Arial" font-size="14">105 ms</text>
<rect x="1004.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="104.0" fill="black" font-family="Arial" font-size="14">168 ms</text>
<rect x="1136.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="104.0" fill="black" font-family="Arial" font-size="14">182 ms</text>
<rect x="0" y="120" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="144.0" fill="black" font-family="Arial" font-size="14">Mul (`x`)</text>
<rect x="344.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="144.0" fill="black" font-family="Arial" font-size="14">40.6 ms</text>
<rect x="476.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="144.0" fill="black" font-family="Arial" font-size="14">103 ms</text>
<rect x="608.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="144.0" fill="black" font-family="Arial" font-size="14">143 ms</text>
<rect x="740.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="144.0" fill="black" font-family="Arial" font-size="14">219 ms</text>
<rect x="872.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="144.0" fill="black" font-family="Arial" font-size="14">401 ms</text>
<rect x="1004.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="144.0" fill="black" font-family="Arial" font-size="14">1.15 s</text>
<rect x="1136.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="144.0" fill="black" font-family="Arial" font-size="14">3.84 s</text>
<rect x="0" y="160" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="184.0" fill="black" font-family="Arial" font-size="14">Equal / Not Equal (`eq`, `ne`)</text>
<rect x="344.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="184.0" fill="black" font-family="Arial" font-size="14">36.5 ms</text>
<rect x="476.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="184.0" fill="black" font-family="Arial" font-size="14">37.1 ms</text>
<rect x="608.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="184.0" fill="black" font-family="Arial" font-size="14">58.3 ms</text>
<rect x="740.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="184.0" fill="black" font-family="Arial" font-size="14">59.0 ms</text>
<rect x="872.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="184.0" fill="black" font-family="Arial" font-size="14">81.2 ms</text>
<rect x="1004.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="184.0" fill="black" font-family="Arial" font-size="14">82.3 ms</text>
<rect x="1136.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="184.0" fill="black" font-family="Arial" font-size="14">106 ms</text>
<rect x="0" y="200" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="224.0" fill="black" font-family="Arial" font-size="14">Comparisons (`ge`, `gt`, `le`, `lt`)</text>
<rect x="344.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="224.0" fill="black" font-family="Arial" font-size="14">36.3 ms</text>
<rect x="476.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="224.0" fill="black" font-family="Arial" font-size="14">37.4 ms</text>
<rect x="608.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="224.0" fill="black" font-family="Arial" font-size="14">57.2 ms</text>
<rect x="740.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="224.0" fill="black" font-family="Arial" font-size="14">80.1 ms</text>
<rect x="872.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="224.0" fill="black" font-family="Arial" font-size="14">102 ms</text>
<rect x="1004.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="224.0" fill="black" font-family="Arial" font-size="14">145 ms</text>
<rect x="1136.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="224.0" fill="black" font-family="Arial" font-size="14">175 ms</text>
<rect x="0" y="240" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="264.0" fill="black" font-family="Arial" font-size="14">Max / Min (`max`,`min`)</text>
<rect x="344.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="264.0" fill="black" font-family="Arial" font-size="14">79.4 ms</text>
<rect x="476.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="264.0" fill="black" font-family="Arial" font-size="14">79.8 ms</text>
<rect x="608.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="264.0" fill="black" font-family="Arial" font-size="14">99.8 ms</text>
<rect x="740.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="264.0" fill="black" font-family="Arial" font-size="14">122 ms</text>
<rect x="872.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="264.0" fill="black" font-family="Arial" font-size="14">145 ms</text>
<rect x="1004.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="264.0" fill="black" font-family="Arial" font-size="14">192 ms</text>
<rect x="1136.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="264.0" fill="black" font-family="Arial" font-size="14">246 ms</text>
<rect x="0" y="280" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="304.0" fill="black" font-family="Arial" font-size="14">Bitwise operations (`&#38;`, `&#124;`, `^`)</text>
<rect x="344.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="304.0" fill="black" font-family="Arial" font-size="14">19.8 ms</text>
<rect x="476.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="304.0" fill="black" font-family="Arial" font-size="14">19.4 ms</text>
<rect x="608.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="304.0" fill="black" font-family="Arial" font-size="14">19.6 ms</text>
<rect x="740.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="304.0" fill="black" font-family="Arial" font-size="14">20.5 ms</text>
<rect x="872.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="304.0" fill="black" font-family="Arial" font-size="14">20.7 ms</text>
<rect x="1004.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="304.0" fill="black" font-family="Arial" font-size="14">23.3 ms</text>
<rect x="1136.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="304.0" fill="black" font-family="Arial" font-size="14">26.0 ms</text>
<rect x="0" y="320" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="344.0" fill="black" font-family="Arial" font-size="14">Div / Rem (`/`, `%`)</text>
<rect x="344.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="391.0" y="344.0" fill="black" font-family="Arial" font-size="14">291 ms</text>
<rect x="476.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="344.0" fill="black" font-family="Arial" font-size="14">693 ms</text>
<rect x="608.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="344.0" fill="black" font-family="Arial" font-size="14">1.56 s</text>
<rect x="740.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="344.0" fill="black" font-family="Arial" font-size="14">3.52 s</text>
<rect x="872.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="344.0" fill="black" font-family="Arial" font-size="14">8.22 s</text>
<rect x="1004.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="344.0" fill="black" font-family="Arial" font-size="14">21.1 s</text>
<rect x="1136.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="344.0" fill="black" font-family="Arial" font-size="14">55.2 s</text>
<rect x="0" y="360" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="384.0" fill="black" font-family="Arial" font-size="14">Left / Right Shifts (`&#60;&#60;`, `&#62;&#62;`)</text>
<rect x="344.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="384.0" fill="black" font-family="Arial" font-size="14">38.5 ms</text>
<rect x="476.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="384.0" fill="black" font-family="Arial" font-size="14">61.2 ms</text>
<rect x="608.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="384.0" fill="black" font-family="Arial" font-size="14">84.3 ms</text>
<rect x="740.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="384.0" fill="black" font-family="Arial" font-size="14">109 ms</text>
<rect x="872.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="384.0" fill="black" font-family="Arial" font-size="14">134 ms</text>
<rect x="1004.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="384.0" fill="black" font-family="Arial" font-size="14">174 ms</text>
<rect x="1136.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="384.0" fill="black" font-family="Arial" font-size="14">250 ms</text>
<rect x="0" y="400" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="424.0" fill="black" font-family="Arial" font-size="14">Left / Right Rotations (`left_rotate`, `right_rotate`)</text>
<rect x="344.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="424.0" fill="black" font-family="Arial" font-size="14">40.4 ms</text>
<rect x="476.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="424.0" fill="black" font-family="Arial" font-size="14">61.4 ms</text>
<rect x="608.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="424.0" fill="black" font-family="Arial" font-size="14">82.6 ms</text>
<rect x="740.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="424.0" fill="black" font-family="Arial" font-size="14">105 ms</text>
<rect x="872.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="424.0" fill="black" font-family="Arial" font-size="14">133 ms</text>
<rect x="1004.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="424.0" fill="black" font-family="Arial" font-size="14">184 ms</text>
<rect x="1136.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="424.0" fill="black" font-family="Arial" font-size="14">259 ms</text>
<rect x="0" y="440" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="464.0" fill="black" font-family="Arial" font-size="14">Leading / Trailing zeros/ones</text>
<rect x="344.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="464.0" fill="black" font-family="Arial" font-size="14">80.5 ms</text>
<rect x="476.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="464.0" fill="black" font-family="Arial" font-size="14">100 ms</text>
<rect x="608.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="464.0" fill="black" font-family="Arial" font-size="14">156 ms</text>
<rect x="740.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="464.0" fill="black" font-family="Arial" font-size="14">183 ms</text>
<rect x="872.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="464.0" fill="black" font-family="Arial" font-size="14">247 ms</text>
<rect x="1004.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="464.0" fill="black" font-family="Arial" font-size="14">298 ms</text>
<rect x="1136.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="464.0" fill="black" font-family="Arial" font-size="14">347 ms</text>
<rect x="0" y="480" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="504.0" fill="black" font-family="Arial" font-size="14">Log2</text>
<rect x="344.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="391.0" y="504.0" fill="black" font-family="Arial" font-size="14">100 ms</text>
<rect x="476.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="504.0" fill="black" font-family="Arial" font-size="14">121 ms</text>
<rect x="608.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="504.0" fill="black" font-family="Arial" font-size="14">182 ms</text>
<rect x="740.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="504.0" fill="black" font-family="Arial" font-size="14">205 ms</text>
<rect x="872.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="504.0" fill="black" font-family="Arial" font-size="14">267 ms</text>
<rect x="1004.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="504.0" fill="black" font-family="Arial" font-size="14">323 ms</text>
<rect x="1136.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="504.0" fill="black" font-family="Arial" font-size="14">369 ms</text>
<rect x="0" y="520" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="544.0" fill="black" font-family="Arial" font-size="14">Select</text>
<rect x="344.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="544.0" fill="black" font-family="Arial" font-size="14">27.6 ms</text>
<rect x="476.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="544.0" fill="black" font-family="Arial" font-size="14">30.9 ms</text>
<rect x="608.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="544.0" fill="black" font-family="Arial" font-size="14">32.2 ms</text>
<rect x="740.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="544.0" fill="black" font-family="Arial" font-size="14">33.3 ms</text>
<rect x="872.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="544.0" fill="black" font-family="Arial" font-size="14">32.6 ms</text>
<rect x="1004.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="544.0" fill="black" font-family="Arial" font-size="14">37.2 ms</text>
<rect x="1136.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="544.0" fill="black" font-family="Arial" font-size="14">51.0 ms</text>
<!-- Borders -->
<line x1="0" y1="0" x2="0" y2="560" stroke="white" />
<line x1="344.0" y1="0" x2="344.0" y2="560" stroke="white" />
<line x1="476.0" y1="0" x2="476.0" y2="560" stroke="white" />
<line x1="608.0" y1="0" x2="608.0" y2="560" stroke="white" />
<line x1="740.0" y1="0" x2="740.0" y2="560" stroke="white" />
<line x1="872.0" y1="0" x2="872.0" y2="560" stroke="white" />
<line x1="1004.0" y1="0" x2="1004.0" y2="560" stroke="white" />
<line x1="1136.0" y1="0" x2="1136.0" y2="560" stroke="white" />
<line x1="0" y1="0" x2="1268.0" y2="0" stroke="white" />
<line x1="0" y1="40" x2="1268.0" y2="40" stroke="white" />
<line x1="0" y1="80" x2="1268.0" y2="80" stroke="white" />
<line x1="0" y1="120" x2="1268.0" y2="120" stroke="white" />
<line x1="0" y1="160" x2="1268.0" y2="160" stroke="white" />
<line x1="0" y1="200" x2="1268.0" y2="200" stroke="white" />
<line x1="0" y1="240" x2="1268.0" y2="240" stroke="white" />
<line x1="0" y1="280" x2="1268.0" y2="280" stroke="white" />
<line x1="0" y1="320" x2="1268.0" y2="320" stroke="white" />
<line x1="0" y1="360" x2="1268.0" y2="360" stroke="white" />
<line x1="0" y1="400" x2="1268.0" y2="400" stroke="white" />
<line x1="0" y1="440" x2="1268.0" y2="440" stroke="white" />
<line x1="0" y1="480" x2="1268.0" y2="480" stroke="white" />
<line x1="0" y1="520" x2="1268.0" y2="520" stroke="white" />
<line x1="0" y1="560" x2="1268.0" y2="560" stroke="white" />
<?xml version="1.0" ?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 560" preserveAspectRatio="meet" width="100%" height="560">
<rect x="0" y="0" width="720" height="40" fill="black"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="6" y="20.0">Operation \ Size</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="29.666666666666668">8</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="29.666666666666668">16</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="29.666666666666668">32</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="29.666666666666668">64</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="29.666666666666668">128</text>
<rect x="0" y="40" width="300" height="520" fill="#fbbc04"/>
<rect x="300" y="40" width="420" height="520" fill="#f3f3f3"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="60.0">Negation (-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="60.0">48.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="60.0">57.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="60.0">78.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="60.0">103 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="60.0">162 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="100.0">Add / Sub (+,-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="100.0">52.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="100.0">58.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="100.0">79.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="100.0">101 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="100.0">161 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="140.0">Mul (x)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="140.0">94.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="140.0">136 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="140.0">210 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="140.0">381 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="140.0">1.1 s</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="180.0">Equal / Not Equal (eq, ne)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="180.0">36.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="180.0">55.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="180.0">55.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="180.0">76.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="180.0">77.6 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="220.0">Comparisons (ge, gt, le, lt)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="220.0">36.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="220.0">54.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="220.0">73.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="220.0">94.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="220.0">136 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="260.0">Max / Min (max, min)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="260.0">74.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="260.0">94.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="260.0">115 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="260.0">138 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="260.0">183 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="300.0">Bitwise operations (&amp;, |, ^)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="300.0">18.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="300.0">19.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="300.0">19.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="300.0">20.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="300.0">22.0 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="340.0">Div / Rem (/, %)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="340.0">667 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="340.0">1.49 s</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="340.0">3.39 s</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="340.0">7.87 s</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="340.0">19.6 s</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="380.0">Left / Right Shifts (&lt;&lt;, &gt;&gt;)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="380.0">59.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="380.0">79.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="380.0">100 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="380.0">128 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="380.0">169 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="420.0">Left / Right Rotations (left_rotate, right_rotate)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="420.0">57.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="420.0">77.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="420.0">98.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="420.0">128 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="420.0">178 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="460.0">Leading / Trailing zeros/ones</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="460.0">96.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="460.0">153 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="460.0">172 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="460.0">234 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="460.0">291 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="500.0">Log2</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="500.0">114 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="500.0">170 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="500.0">195 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="500.0">256 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="500.0">312 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="540.0">Select</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="540.0">28.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="540.0">29.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="540.0">31.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="540.0">31.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="540.0">34.3 ms</text>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="720" y2="0"/>
<line stroke="white" stroke-width="2" x1="0" y1="40" x2="720" y2="40"/>
<line stroke="white" stroke-width="2" x1="0" y1="80" x2="720" y2="80"/>
<line stroke="white" stroke-width="2" x1="0" y1="120" x2="720" y2="120"/>
<line stroke="white" stroke-width="2" x1="0" y1="160" x2="720" y2="160"/>
<line stroke="white" stroke-width="2" x1="0" y1="200" x2="720" y2="200"/>
<line stroke="white" stroke-width="2" x1="0" y1="240" x2="720" y2="240"/>
<line stroke="white" stroke-width="2" x1="0" y1="280" x2="720" y2="280"/>
<line stroke="white" stroke-width="2" x1="0" y1="320" x2="720" y2="320"/>
<line stroke="white" stroke-width="2" x1="0" y1="360" x2="720" y2="360"/>
<line stroke="white" stroke-width="2" x1="0" y1="400" x2="720" y2="400"/>
<line stroke="white" stroke-width="2" x1="0" y1="440" x2="720" y2="440"/>
<line stroke="white" stroke-width="2" x1="0" y1="480" x2="720" y2="480"/>
<line stroke="white" stroke-width="2" x1="0" y1="520" x2="720" y2="520"/>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="0" y2="560"/>
<line stroke="white" stroke-width="2" x1="300.0" y1="0" x2="300.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="384.0" y1="0" x2="384.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="468.0" y1="0" x2="468.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="552.0" y1="0" x2="552.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="636.0" y1="0" x2="636.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="720.0" y1="0" x2="720.0" y2="560"/>
</svg>

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,196 +1,95 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1268.0" height="440" viewBox="0 0 1268.0 440">
<!-- Header Row -->
<rect x="0" y="0" width="1268.0" height="40" fill="black" />
<text x="10" y="24.0" fill="white" font-family="Arial" font-size="14">Operation \ Size</text>
<text x="383.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint4</text>
<text x="515.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint8</text>
<text x="643.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint16</text>
<text x="775.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint32</text>
<text x="907.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint64</text>
<text x="1035.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint128</text>
<text x="1167.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint256</text>
<!-- Data Rows -->
<rect x="0" y="40" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="64.0" fill="black" font-family="Arial" font-size="14">Add / Sub (`+`,`-`)</text>
<rect x="344.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="64.0" fill="black" font-family="Arial" font-size="14">39.8 ms</text>
<rect x="476.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="64.0" fill="black" font-family="Arial" font-size="14">56.3 ms</text>
<rect x="608.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="64.0" fill="black" font-family="Arial" font-size="14">61.5 ms</text>
<rect x="740.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="64.0" fill="black" font-family="Arial" font-size="14">63.8 ms</text>
<rect x="872.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="64.0" fill="black" font-family="Arial" font-size="14">88.4 ms</text>
<rect x="1004.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="64.0" fill="black" font-family="Arial" font-size="14">111 ms</text>
<rect x="1136.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="64.0" fill="black" font-family="Arial" font-size="14">178 ms</text>
<rect x="0" y="80" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="104.0" fill="black" font-family="Arial" font-size="14">Mul (`x`)</text>
<rect x="344.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="104.0" fill="black" font-family="Arial" font-size="14">40.9 ms</text>
<rect x="476.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="104.0" fill="black" font-family="Arial" font-size="14">80.3 ms</text>
<rect x="608.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="104.0" fill="black" font-family="Arial" font-size="14">128 ms</text>
<rect x="740.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="104.0" fill="black" font-family="Arial" font-size="14">173 ms</text>
<rect x="872.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="104.0" fill="black" font-family="Arial" font-size="14">231 ms</text>
<rect x="1004.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="104.0" fill="black" font-family="Arial" font-size="14">452 ms</text>
<rect x="1136.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="104.0" fill="black" font-family="Arial" font-size="14">1.11 s</text>
<rect x="0" y="120" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="144.0" fill="black" font-family="Arial" font-size="14">Equal / Not Equal (`eq`, `ne`)</text>
<rect x="344.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="144.0" fill="black" font-family="Arial" font-size="14">19.0 ms</text>
<rect x="476.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="144.0" fill="black" font-family="Arial" font-size="14">38.6 ms</text>
<rect x="608.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="144.0" fill="black" font-family="Arial" font-size="14">37.8 ms</text>
<rect x="740.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="144.0" fill="black" font-family="Arial" font-size="14">58.5 ms</text>
<rect x="872.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="144.0" fill="black" font-family="Arial" font-size="14">58.8 ms</text>
<rect x="1004.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="144.0" fill="black" font-family="Arial" font-size="14">81.7 ms</text>
<rect x="1136.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="144.0" fill="black" font-family="Arial" font-size="14">84.2 ms</text>
<rect x="0" y="160" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="184.0" fill="black" font-family="Arial" font-size="14">Comparisons (`ge`, `gt`, `le`, `lt`)</text>
<rect x="344.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="184.0" fill="black" font-family="Arial" font-size="14">15.3 ms</text>
<rect x="476.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="184.0" fill="black" font-family="Arial" font-size="14">40.9 ms</text>
<rect x="608.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="184.0" fill="black" font-family="Arial" font-size="14">39.9 ms</text>
<rect x="740.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="184.0" fill="black" font-family="Arial" font-size="14">57.6 ms</text>
<rect x="872.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="184.0" fill="black" font-family="Arial" font-size="14">81.0 ms</text>
<rect x="1004.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="184.0" fill="black" font-family="Arial" font-size="14">103 ms</text>
<rect x="1136.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="184.0" fill="black" font-family="Arial" font-size="14">149 ms</text>
<rect x="0" y="200" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="224.0" fill="black" font-family="Arial" font-size="14">Max / Min (`max`,`min`)</text>
<rect x="344.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="224.0" fill="black" font-family="Arial" font-size="14">32.9 ms</text>
<rect x="476.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="224.0" fill="black" font-family="Arial" font-size="14">59.1 ms</text>
<rect x="608.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="224.0" fill="black" font-family="Arial" font-size="14">60.0 ms</text>
<rect x="740.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="224.0" fill="black" font-family="Arial" font-size="14">81.6 ms</text>
<rect x="872.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="224.0" fill="black" font-family="Arial" font-size="14">103 ms</text>
<rect x="1004.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="224.0" fill="black" font-family="Arial" font-size="14">127 ms</text>
<rect x="1136.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="224.0" fill="black" font-family="Arial" font-size="14">175 ms</text>
<rect x="0" y="240" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="264.0" fill="black" font-family="Arial" font-size="14">Bitwise operations (`&#38;`, `&#124;`, `^`)</text>
<rect x="344.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="264.0" fill="black" font-family="Arial" font-size="14">19.0 ms</text>
<rect x="476.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="264.0" fill="black" font-family="Arial" font-size="14">19.5 ms</text>
<rect x="608.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="264.0" fill="black" font-family="Arial" font-size="14">20.5 ms</text>
<rect x="740.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="264.0" fill="black" font-family="Arial" font-size="14">21.0 ms</text>
<rect x="872.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="264.0" fill="black" font-family="Arial" font-size="14">22.4 ms</text>
<rect x="1004.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="264.0" fill="black" font-family="Arial" font-size="14">23.9 ms</text>
<rect x="1136.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="264.0" fill="black" font-family="Arial" font-size="14">26.3 ms</text>
<rect x="0" y="280" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="304.0" fill="black" font-family="Arial" font-size="14">Div (`/`)</text>
<rect x="344.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="304.0" fill="black" font-family="Arial" font-size="14">81.7 ms</text>
<rect x="476.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="304.0" fill="black" font-family="Arial" font-size="14">149 ms</text>
<rect x="608.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="304.0" fill="black" font-family="Arial" font-size="14">188 ms</text>
<rect x="740.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="304.0" fill="black" font-family="Arial" font-size="14">281 ms</text>
<rect x="872.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="304.0" fill="black" font-family="Arial" font-size="14">453 ms</text>
<rect x="1004.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="304.0" fill="black" font-family="Arial" font-size="14">844 ms</text>
<rect x="1136.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="304.0" fill="black" font-family="Arial" font-size="14">2.45 s</text>
<rect x="0" y="320" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="344.0" fill="black" font-family="Arial" font-size="14">Rem (`%`)</text>
<rect x="344.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="391.0" y="344.0" fill="black" font-family="Arial" font-size="14">165 ms</text>
<rect x="476.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="344.0" fill="black" font-family="Arial" font-size="14">278 ms</text>
<rect x="608.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="344.0" fill="black" font-family="Arial" font-size="14">360 ms</text>
<rect x="740.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="344.0" fill="black" font-family="Arial" font-size="14">503 ms</text>
<rect x="872.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="344.0" fill="black" font-family="Arial" font-size="14">806 ms</text>
<rect x="1004.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="344.0" fill="black" font-family="Arial" font-size="14">1.32 s</text>
<rect x="1136.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="344.0" fill="black" font-family="Arial" font-size="14">2.98 s</text>
<rect x="0" y="360" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="384.0" fill="black" font-family="Arial" font-size="14">Left / Right Shifts (`&#60;&#60;`, `&#62;&#62;`)</text>
<rect x="344.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="384.0" fill="black" font-family="Arial" font-size="14">18.8 ms</text>
<rect x="476.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="384.0" fill="black" font-family="Arial" font-size="14">20.4 ms</text>
<rect x="608.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="384.0" fill="black" font-family="Arial" font-size="14">20.4 ms</text>
<rect x="740.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="384.0" fill="black" font-family="Arial" font-size="14">20.9 ms</text>
<rect x="872.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="384.0" fill="black" font-family="Arial" font-size="14">21.8 ms</text>
<rect x="1004.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="384.0" fill="black" font-family="Arial" font-size="14">23.1 ms</text>
<rect x="1136.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="384.0" fill="black" font-family="Arial" font-size="14">26.2 ms</text>
<rect x="0" y="400" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="424.0" fill="black" font-family="Arial" font-size="14">Left / Right Rotations (`left_rotate`, `right_rotate`)</text>
<rect x="344.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="424.0" fill="black" font-family="Arial" font-size="14">21.0 ms</text>
<rect x="476.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="424.0" fill="black" font-family="Arial" font-size="14">20.2 ms</text>
<rect x="608.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="424.0" fill="black" font-family="Arial" font-size="14">20.5 ms</text>
<rect x="740.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="424.0" fill="black" font-family="Arial" font-size="14">21.0 ms</text>
<rect x="872.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="424.0" fill="black" font-family="Arial" font-size="14">21.7 ms</text>
<rect x="1004.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="424.0" fill="black" font-family="Arial" font-size="14">23.0 ms</text>
<rect x="1136.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="424.0" fill="black" font-family="Arial" font-size="14">26.0 ms</text>
<!-- Borders -->
<line x1="0" y1="0" x2="0" y2="440" stroke="white" />
<line x1="344.0" y1="0" x2="344.0" y2="440" stroke="white" />
<line x1="476.0" y1="0" x2="476.0" y2="440" stroke="white" />
<line x1="608.0" y1="0" x2="608.0" y2="440" stroke="white" />
<line x1="740.0" y1="0" x2="740.0" y2="440" stroke="white" />
<line x1="872.0" y1="0" x2="872.0" y2="440" stroke="white" />
<line x1="1004.0" y1="0" x2="1004.0" y2="440" stroke="white" />
<line x1="1136.0" y1="0" x2="1136.0" y2="440" stroke="white" />
<line x1="0" y1="0" x2="1268.0" y2="0" stroke="white" />
<line x1="0" y1="40" x2="1268.0" y2="40" stroke="white" />
<line x1="0" y1="80" x2="1268.0" y2="80" stroke="white" />
<line x1="0" y1="120" x2="1268.0" y2="120" stroke="white" />
<line x1="0" y1="160" x2="1268.0" y2="160" stroke="white" />
<line x1="0" y1="200" x2="1268.0" y2="200" stroke="white" />
<line x1="0" y1="240" x2="1268.0" y2="240" stroke="white" />
<line x1="0" y1="280" x2="1268.0" y2="280" stroke="white" />
<line x1="0" y1="320" x2="1268.0" y2="320" stroke="white" />
<line x1="0" y1="360" x2="1268.0" y2="360" stroke="white" />
<line x1="0" y1="400" x2="1268.0" y2="400" stroke="white" />
<line x1="0" y1="440" x2="1268.0" y2="440" stroke="white" />
<?xml version="1.0" ?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 440" preserveAspectRatio="meet" width="100%" height="440">
<rect x="0" y="0" width="720" height="40" fill="black"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="6" y="20.0">Operation \ Size</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="29.666666666666668">8</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="29.666666666666668">16</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="29.666666666666668">32</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="29.666666666666668">64</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="29.666666666666668">128</text>
<rect x="0" y="40" width="300" height="400" fill="#fbbc04"/>
<rect x="300" y="40" width="420" height="400" fill="#f3f3f3"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="60.0">Add / Sub (+,-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="60.0">51.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="60.0">56.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="60.0">57.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="60.0">78.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="60.0">104 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="100.0">Mul (x)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="100.0">75.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="100.0">118 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="100.0">161 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="100.0">222 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="100.0">419 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="140.0">Equal / Not Equal (eq, ne)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="140.0">34.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="140.0">35.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="140.0">56.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="140.0">54.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="140.0">75.8 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="180.0">Comparisons (ge, gt, le, lt)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="180.0">36.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="180.0">35.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="180.0">53.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="180.0">73.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="180.0">94.5 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="220.0">Max / Min (max, min)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="220.0">55.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="220.0">55.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="220.0">74.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="220.0">95.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="220.0">117 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="260.0">Bitwise operations (&amp;, |, ^)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="260.0">19.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="260.0">19.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="260.0">19.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="260.0">21.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="260.0">22.7 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="300.0">Div (/)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="300.0">137 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="300.0">189 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="300.0">269 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="300.0">451 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="300.0">833 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="340.0">Rem (%)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="340.0">268 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="340.0">344 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="340.0">492 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="340.0">719 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="340.0">1.27 s</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="380.0">Left / Right Shifts (&lt;&lt;, &gt;&gt;)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="380.0">18.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="380.0">19.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="380.0">19.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="380.0">20.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="380.0">21.9 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="420.0">Left / Right Rotations (left_rotate, right_rotate)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="420.0">19.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="420.0">19.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="420.0">19.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="420.0">21.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="420.0">22.7 ms</text>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="720" y2="0"/>
<line stroke="white" stroke-width="2" x1="0" y1="40" x2="720" y2="40"/>
<line stroke="white" stroke-width="2" x1="0" y1="80" x2="720" y2="80"/>
<line stroke="white" stroke-width="2" x1="0" y1="120" x2="720" y2="120"/>
<line stroke="white" stroke-width="2" x1="0" y1="160" x2="720" y2="160"/>
<line stroke="white" stroke-width="2" x1="0" y1="200" x2="720" y2="200"/>
<line stroke="white" stroke-width="2" x1="0" y1="240" x2="720" y2="240"/>
<line stroke="white" stroke-width="2" x1="0" y1="280" x2="720" y2="280"/>
<line stroke="white" stroke-width="2" x1="0" y1="320" x2="720" y2="320"/>
<line stroke="white" stroke-width="2" x1="0" y1="360" x2="720" y2="360"/>
<line stroke="white" stroke-width="2" x1="0" y1="400" x2="720" y2="400"/>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="0" y2="440"/>
<line stroke="white" stroke-width="2" x1="300.0" y1="0" x2="300.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="384.0" y1="0" x2="384.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="468.0" y1="0" x2="468.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="552.0" y1="0" x2="552.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="636.0" y1="0" x2="636.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="720.0" y1="0" x2="720.0" y2="440"/>
</svg>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,247 +1,116 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1268.0" height="560" viewBox="0 0 1268.0 560">
<!-- Header Row -->
<rect x="0" y="0" width="1268.0" height="40" fill="black" />
<text x="10" y="24.0" fill="white" font-family="Arial" font-size="14">Operation \ Size</text>
<text x="383.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint4</text>
<text x="515.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint8</text>
<text x="643.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint16</text>
<text x="775.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint32</text>
<text x="907.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint64</text>
<text x="1035.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint128</text>
<text x="1167.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint256</text>
<!-- Data Rows -->
<rect x="0" y="40" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="64.0" fill="black" font-family="Arial" font-size="14">Negation (`-`)</text>
<rect x="344.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="64.0" fill="black" font-family="Arial" font-size="14">10.9 ms</text>
<rect x="476.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="64.0" fill="black" font-family="Arial" font-size="14">11.2 ms</text>
<rect x="608.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="64.0" fill="black" font-family="Arial" font-size="14">12.5 ms</text>
<rect x="740.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="64.0" fill="black" font-family="Arial" font-size="14">17.7 ms</text>
<rect x="872.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="64.0" fill="black" font-family="Arial" font-size="14">25.2 ms</text>
<rect x="1004.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="64.0" fill="black" font-family="Arial" font-size="14">51.1 ms</text>
<rect x="1136.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="64.0" fill="black" font-family="Arial" font-size="14">82.8 ms</text>
<rect x="0" y="80" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="104.0" fill="black" font-family="Arial" font-size="14">Add / Sub (`+`,`-`)</text>
<rect x="344.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="104.0" fill="black" font-family="Arial" font-size="14">11.0 ms</text>
<rect x="476.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="104.0" fill="black" font-family="Arial" font-size="14">11.3 ms</text>
<rect x="608.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="104.0" fill="black" font-family="Arial" font-size="14">12.5 ms</text>
<rect x="740.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="104.0" fill="black" font-family="Arial" font-size="14">17.7 ms</text>
<rect x="872.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="104.0" fill="black" font-family="Arial" font-size="14">25.2 ms</text>
<rect x="1004.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="104.0" fill="black" font-family="Arial" font-size="14">51.2 ms</text>
<rect x="1136.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="104.0" fill="black" font-family="Arial" font-size="14">82.8 ms</text>
<rect x="0" y="120" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="144.0" fill="black" font-family="Arial" font-size="14">Mul (`x`)</text>
<rect x="344.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="144.0" fill="black" font-family="Arial" font-size="14">18.0 ms</text>
<rect x="476.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="144.0" fill="black" font-family="Arial" font-size="14">23.1 ms</text>
<rect x="608.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="144.0" fill="black" font-family="Arial" font-size="14">37.2 ms</text>
<rect x="740.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="144.0" fill="black" font-family="Arial" font-size="14">76.4 ms</text>
<rect x="872.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="144.0" fill="black" font-family="Arial" font-size="14">237 ms</text>
<rect x="1004.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="144.0" fill="black" font-family="Arial" font-size="14">830 ms</text>
<rect x="1136.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="144.0" fill="black" font-family="Arial" font-size="14">3.24 s</text>
<rect x="0" y="160" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="184.0" fill="black" font-family="Arial" font-size="14">Equal / Not Equal (`eq`, `ne`)</text>
<rect x="344.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="184.0" fill="black" font-family="Arial" font-size="14">7.53 ms</text>
<rect x="476.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="184.0" fill="black" font-family="Arial" font-size="14">7.65 ms</text>
<rect x="608.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="184.0" fill="black" font-family="Arial" font-size="14">11.5 ms</text>
<rect x="740.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="184.0" fill="black" font-family="Arial" font-size="14">12.4 ms</text>
<rect x="872.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="184.0" fill="black" font-family="Arial" font-size="14">17.7 ms</text>
<rect x="1004.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="184.0" fill="black" font-family="Arial" font-size="14">24.1 ms</text>
<rect x="1136.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="184.0" fill="black" font-family="Arial" font-size="14">37.7 ms</text>
<rect x="0" y="200" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="224.0" fill="black" font-family="Arial" font-size="14">Comparisons (`ge`, `gt`, `le`, `lt`)</text>
<rect x="344.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="224.0" fill="black" font-family="Arial" font-size="14">11.1 ms</text>
<rect x="476.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="224.0" fill="black" font-family="Arial" font-size="14">11.4 ms</text>
<rect x="608.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="224.0" fill="black" font-family="Arial" font-size="14">15.3 ms</text>
<rect x="740.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="224.0" fill="black" font-family="Arial" font-size="14">20.1 ms</text>
<rect x="872.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="224.0" fill="black" font-family="Arial" font-size="14">26.2 ms</text>
<rect x="1004.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="224.0" fill="black" font-family="Arial" font-size="14">38.0 ms</text>
<rect x="1136.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="224.0" fill="black" font-family="Arial" font-size="14">58.3 ms</text>
<rect x="0" y="240" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="264.0" fill="black" font-family="Arial" font-size="14">Max / Min (`max`,`min`)</text>
<rect x="344.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="264.0" fill="black" font-family="Arial" font-size="14">18.3 ms</text>
<rect x="476.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="264.0" fill="black" font-family="Arial" font-size="14">18.9 ms</text>
<rect x="608.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="264.0" fill="black" font-family="Arial" font-size="14">24.0 ms</text>
<rect x="740.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="264.0" fill="black" font-family="Arial" font-size="14">30.6 ms</text>
<rect x="872.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="264.0" fill="black" font-family="Arial" font-size="14">43.6 ms</text>
<rect x="1004.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="264.0" fill="black" font-family="Arial" font-size="14">68.5 ms</text>
<rect x="1136.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="264.0" fill="black" font-family="Arial" font-size="14">107 ms</text>
<rect x="0" y="280" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="304.0" fill="black" font-family="Arial" font-size="14">Bitwise operations (`&#38;`, `&#124;`, `^`)</text>
<rect x="344.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="304.0" fill="black" font-family="Arial" font-size="14">3.45 ms</text>
<rect x="476.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="304.0" fill="black" font-family="Arial" font-size="14">3.6 ms</text>
<rect x="608.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="304.0" fill="black" font-family="Arial" font-size="14">4.01 ms</text>
<rect x="740.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="304.0" fill="black" font-family="Arial" font-size="14">4.58 ms</text>
<rect x="872.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="304.0" fill="black" font-family="Arial" font-size="14">5.97 ms</text>
<rect x="1004.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="304.0" fill="black" font-family="Arial" font-size="14">11.2 ms</text>
<rect x="1136.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="304.0" fill="black" font-family="Arial" font-size="14">18.9 ms</text>
<rect x="0" y="320" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="344.0" fill="black" font-family="Arial" font-size="14">Div / Rem (`/`, `%`)</text>
<rect x="344.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="344.0" fill="black" font-family="Arial" font-size="14">78.1 ms</text>
<rect x="476.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="344.0" fill="black" font-family="Arial" font-size="14">154 ms</text>
<rect x="608.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="344.0" fill="black" font-family="Arial" font-size="14">318 ms</text>
<rect x="740.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="344.0" fill="black" font-family="Arial" font-size="14">763 ms</text>
<rect x="872.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="344.0" fill="black" font-family="Arial" font-size="14">2.05 s</text>
<rect x="1004.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="344.0" fill="black" font-family="Arial" font-size="14">6.35 s</text>
<rect x="1136.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="344.0" fill="black" font-family="Arial" font-size="14">22.8 s</text>
<rect x="0" y="360" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="384.0" fill="black" font-family="Arial" font-size="14">Left / Right Shifts (`&#60;&#60;`, `&#62;&#62;`)</text>
<rect x="344.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="384.0" fill="black" font-family="Arial" font-size="14">17.7 ms</text>
<rect x="476.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="384.0" fill="black" font-family="Arial" font-size="14">22.9 ms</text>
<rect x="608.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="384.0" fill="black" font-family="Arial" font-size="14">30.4 ms</text>
<rect x="740.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="384.0" fill="black" font-family="Arial" font-size="14">43.4 ms</text>
<rect x="872.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="384.0" fill="black" font-family="Arial" font-size="14">86.7 ms</text>
<rect x="1004.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="384.0" fill="black" font-family="Arial" font-size="14">162 ms</text>
<rect x="1136.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="384.0" fill="black" font-family="Arial" font-size="14">280 ms</text>
<rect x="0" y="400" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="424.0" fill="black" font-family="Arial" font-size="14">Left / Right Rotations (`left_rotate`, `right_rotate`)</text>
<rect x="344.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="424.0" fill="black" font-family="Arial" font-size="14">17.7 ms</text>
<rect x="476.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="424.0" fill="black" font-family="Arial" font-size="14">22.9 ms</text>
<rect x="608.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="424.0" fill="black" font-family="Arial" font-size="14">30.3 ms</text>
<rect x="740.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="424.0" fill="black" font-family="Arial" font-size="14">43.4 ms</text>
<rect x="872.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="424.0" fill="black" font-family="Arial" font-size="14">86.8 ms</text>
<rect x="1004.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="424.0" fill="black" font-family="Arial" font-size="14">162 ms</text>
<rect x="1136.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="424.0" fill="black" font-family="Arial" font-size="14">280 ms</text>
<rect x="0" y="440" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="464.0" fill="black" font-family="Arial" font-size="14">Leading / Trailing zeros/ones</text>
<rect x="344.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="464.0" fill="black" font-family="Arial" font-size="14">29.0 ms</text>
<rect x="476.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="464.0" fill="black" font-family="Arial" font-size="14">25.1 ms</text>
<rect x="608.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="464.0" fill="black" font-family="Arial" font-size="14">33.8 ms</text>
<rect x="740.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="464.0" fill="black" font-family="Arial" font-size="14">44.4 ms</text>
<rect x="872.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="464.0" fill="black" font-family="Arial" font-size="14">62.3 ms</text>
<rect x="1004.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="464.0" fill="black" font-family="Arial" font-size="14">105 ms</text>
<rect x="1136.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="464.0" fill="black" font-family="Arial" font-size="14">195 ms</text>
<rect x="0" y="480" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="504.0" fill="black" font-family="Arial" font-size="14">Log2</text>
<rect x="344.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="504.0" fill="black" font-family="Arial" font-size="14">31.9 ms</text>
<rect x="476.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="504.0" fill="black" font-family="Arial" font-size="14">35.5 ms</text>
<rect x="608.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="504.0" fill="black" font-family="Arial" font-size="14">48.2 ms</text>
<rect x="740.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="504.0" fill="black" font-family="Arial" font-size="14">55.2 ms</text>
<rect x="872.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="504.0" fill="black" font-family="Arial" font-size="14">73.9 ms</text>
<rect x="1004.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="504.0" fill="black" font-family="Arial" font-size="14">113 ms</text>
<rect x="1136.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="504.0" fill="black" font-family="Arial" font-size="14">210 ms</text>
<rect x="0" y="520" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="544.0" fill="black" font-family="Arial" font-size="14">Select</text>
<rect x="344.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="544.0" fill="black" font-family="Arial" font-size="14">7.16 ms</text>
<rect x="476.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="544.0" fill="black" font-family="Arial" font-size="14">7.76 ms</text>
<rect x="608.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="544.0" fill="black" font-family="Arial" font-size="14">8.72 ms</text>
<rect x="740.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="544.0" fill="black" font-family="Arial" font-size="14">10.7 ms</text>
<rect x="872.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="544.0" fill="black" font-family="Arial" font-size="14">17.5 ms</text>
<rect x="1004.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="544.0" fill="black" font-family="Arial" font-size="14">30.5 ms</text>
<rect x="1136.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="544.0" fill="black" font-family="Arial" font-size="14">48.8 ms</text>
<!-- Borders -->
<line x1="0" y1="0" x2="0" y2="560" stroke="white" />
<line x1="344.0" y1="0" x2="344.0" y2="560" stroke="white" />
<line x1="476.0" y1="0" x2="476.0" y2="560" stroke="white" />
<line x1="608.0" y1="0" x2="608.0" y2="560" stroke="white" />
<line x1="740.0" y1="0" x2="740.0" y2="560" stroke="white" />
<line x1="872.0" y1="0" x2="872.0" y2="560" stroke="white" />
<line x1="1004.0" y1="0" x2="1004.0" y2="560" stroke="white" />
<line x1="1136.0" y1="0" x2="1136.0" y2="560" stroke="white" />
<line x1="0" y1="0" x2="1268.0" y2="0" stroke="white" />
<line x1="0" y1="40" x2="1268.0" y2="40" stroke="white" />
<line x1="0" y1="80" x2="1268.0" y2="80" stroke="white" />
<line x1="0" y1="120" x2="1268.0" y2="120" stroke="white" />
<line x1="0" y1="160" x2="1268.0" y2="160" stroke="white" />
<line x1="0" y1="200" x2="1268.0" y2="200" stroke="white" />
<line x1="0" y1="240" x2="1268.0" y2="240" stroke="white" />
<line x1="0" y1="280" x2="1268.0" y2="280" stroke="white" />
<line x1="0" y1="320" x2="1268.0" y2="320" stroke="white" />
<line x1="0" y1="360" x2="1268.0" y2="360" stroke="white" />
<line x1="0" y1="400" x2="1268.0" y2="400" stroke="white" />
<line x1="0" y1="440" x2="1268.0" y2="440" stroke="white" />
<line x1="0" y1="480" x2="1268.0" y2="480" stroke="white" />
<line x1="0" y1="520" x2="1268.0" y2="520" stroke="white" />
<line x1="0" y1="560" x2="1268.0" y2="560" stroke="white" />
<?xml version="1.0" ?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 560" preserveAspectRatio="meet" width="100%" height="560">
<rect x="0" y="0" width="720" height="40" fill="black"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="6" y="20.0">Operation \ Size</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="29.666666666666668">8</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="29.666666666666668">16</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="29.666666666666668">32</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="29.666666666666668">64</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="29.666666666666668">128</text>
<rect x="0" y="40" width="300" height="520" fill="#fbbc04"/>
<rect x="300" y="40" width="420" height="520" fill="#f3f3f3"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="60.0">Negation (-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="60.0">11.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="60.0">12.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="60.0">17.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="60.0">25.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="60.0">51.1 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="100.0">Add / Sub (+,-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="100.0">11.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="100.0">12.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="100.0">17.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="100.0">25.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="100.0">51.2 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="140.0">Mul (x)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="140.0">23.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="140.0">37.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="140.0">76.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="140.0">237 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="140.0">830 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="180.0">Equal / Not Equal (eq, ne)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="180.0">7.65 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="180.0">11.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="180.0">12.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="180.0">17.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="180.0">24.1 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="220.0">Comparisons (ge, gt, le, lt)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="220.0">11.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="220.0">15.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="220.0">20.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="220.0">26.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="220.0">38.0 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="260.0">Max / Min (max, min)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="260.0">18.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="260.0">24.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="260.0">30.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="260.0">43.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="260.0">68.5 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="300.0">Bitwise operations (&amp;, |, ^)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="300.0">3.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="300.0">4.01 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="300.0">4.58 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="300.0">5.97 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="300.0">11.2 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="340.0">Div / Rem (/, %)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="340.0">154 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="340.0">318 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="340.0">763 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="340.0">2.05 s</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="340.0">6.35 s</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="380.0">Left / Right Shifts (&lt;&lt;, &gt;&gt;)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="380.0">22.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="380.0">30.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="380.0">43.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="380.0">86.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="380.0">162 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="420.0">Left / Right Rotations (left_rotate, right_rotate)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="420.0">22.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="420.0">30.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="420.0">43.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="420.0">86.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="420.0">162 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="460.0">Leading / Trailing zeros/ones</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="460.0">25.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="460.0">33.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="460.0">44.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="460.0">62.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="460.0">105 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="500.0">Log2</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="500.0">35.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="500.0">48.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="500.0">55.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="500.0">73.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="500.0">113 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="540.0">Select</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="540.0">7.76 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="540.0">8.72 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="540.0">10.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="540.0">17.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="540.0">30.5 ms</text>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="720" y2="0"/>
<line stroke="white" stroke-width="2" x1="0" y1="40" x2="720" y2="40"/>
<line stroke="white" stroke-width="2" x1="0" y1="80" x2="720" y2="80"/>
<line stroke="white" stroke-width="2" x1="0" y1="120" x2="720" y2="120"/>
<line stroke="white" stroke-width="2" x1="0" y1="160" x2="720" y2="160"/>
<line stroke="white" stroke-width="2" x1="0" y1="200" x2="720" y2="200"/>
<line stroke="white" stroke-width="2" x1="0" y1="240" x2="720" y2="240"/>
<line stroke="white" stroke-width="2" x1="0" y1="280" x2="720" y2="280"/>
<line stroke="white" stroke-width="2" x1="0" y1="320" x2="720" y2="320"/>
<line stroke="white" stroke-width="2" x1="0" y1="360" x2="720" y2="360"/>
<line stroke="white" stroke-width="2" x1="0" y1="400" x2="720" y2="400"/>
<line stroke="white" stroke-width="2" x1="0" y1="440" x2="720" y2="440"/>
<line stroke="white" stroke-width="2" x1="0" y1="480" x2="720" y2="480"/>
<line stroke="white" stroke-width="2" x1="0" y1="520" x2="720" y2="520"/>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="0" y2="560"/>
<line stroke="white" stroke-width="2" x1="300.0" y1="0" x2="300.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="384.0" y1="0" x2="384.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="468.0" y1="0" x2="468.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="552.0" y1="0" x2="552.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="636.0" y1="0" x2="636.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="720.0" y1="0" x2="720.0" y2="560"/>
</svg>

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,196 +1,95 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1268.0" height="440" viewBox="0 0 1268.0 440">
<!-- Header Row -->
<rect x="0" y="0" width="1268.0" height="40" fill="black" />
<text x="10" y="24.0" fill="white" font-family="Arial" font-size="14">Operation \ Size</text>
<text x="383.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint4</text>
<text x="515.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint8</text>
<text x="643.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint16</text>
<text x="775.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint32</text>
<text x="907.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint64</text>
<text x="1035.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint128</text>
<text x="1167.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint256</text>
<!-- Data Rows -->
<rect x="0" y="40" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="64.0" fill="black" font-family="Arial" font-size="14">Add / Sub (`+`,`-`)</text>
<rect x="344.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="64.0" fill="black" font-family="Arial" font-size="14">11.1 ms</text>
<rect x="476.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="64.0" fill="black" font-family="Arial" font-size="14">11.4 ms</text>
<rect x="608.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="64.0" fill="black" font-family="Arial" font-size="14">12.6 ms</text>
<rect x="740.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="64.0" fill="black" font-family="Arial" font-size="14">17.8 ms</text>
<rect x="872.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="64.0" fill="black" font-family="Arial" font-size="14">25.4 ms</text>
<rect x="1004.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="64.0" fill="black" font-family="Arial" font-size="14">51.4 ms</text>
<rect x="1136.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="64.0" fill="black" font-family="Arial" font-size="14">83.1 ms</text>
<rect x="0" y="80" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="104.0" fill="black" font-family="Arial" font-size="14">Mul (`x`)</text>
<rect x="344.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="104.0" fill="black" font-family="Arial" font-size="14">11.4 ms</text>
<rect x="476.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="104.0" fill="black" font-family="Arial" font-size="14">18.1 ms</text>
<rect x="608.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="104.0" fill="black" font-family="Arial" font-size="14">26.1 ms</text>
<rect x="740.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="104.0" fill="black" font-family="Arial" font-size="14">46.6 ms</text>
<rect x="872.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="104.0" fill="black" font-family="Arial" font-size="14">109 ms</text>
<rect x="1004.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="104.0" fill="black" font-family="Arial" font-size="14">330 ms</text>
<rect x="1136.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="104.0" fill="black" font-family="Arial" font-size="14">1.17 s</text>
<rect x="0" y="120" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="144.0" fill="black" font-family="Arial" font-size="14">Equal / Not Equal (`eq`, `ne`)</text>
<rect x="344.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="144.0" fill="black" font-family="Arial" font-size="14">7.82 ms</text>
<rect x="476.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="144.0" fill="black" font-family="Arial" font-size="14">7.81 ms</text>
<rect x="608.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="144.0" fill="black" font-family="Arial" font-size="14">8.08 ms</text>
<rect x="740.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="144.0" fill="black" font-family="Arial" font-size="14">12.0 ms</text>
<rect x="872.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="144.0" fill="black" font-family="Arial" font-size="14">13.0 ms</text>
<rect x="1004.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="144.0" fill="black" font-family="Arial" font-size="14">18.8 ms</text>
<rect x="1136.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="144.0" fill="black" font-family="Arial" font-size="14">25.8 ms</text>
<rect x="0" y="160" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="184.0" fill="black" font-family="Arial" font-size="14">Comparisons (`ge`, `gt`, `le`, `lt`)</text>
<rect x="344.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="184.0" fill="black" font-family="Arial" font-size="14">9.31 ms</text>
<rect x="476.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="184.0" fill="black" font-family="Arial" font-size="14">9.61 ms</text>
<rect x="608.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="184.0" fill="black" font-family="Arial" font-size="14">13.3 ms</text>
<rect x="740.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="184.0" fill="black" font-family="Arial" font-size="14">17.4 ms</text>
<rect x="872.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="184.0" fill="black" font-family="Arial" font-size="14">22.3 ms</text>
<rect x="1004.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="184.0" fill="black" font-family="Arial" font-size="14">29.0 ms</text>
<rect x="1136.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="184.0" fill="black" font-family="Arial" font-size="14">41.8 ms</text>
<rect x="0" y="200" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="224.0" fill="black" font-family="Arial" font-size="14">Max / Min (`max`,`min`)</text>
<rect x="344.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="224.0" fill="black" font-family="Arial" font-size="14">16.5 ms</text>
<rect x="476.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="224.0" fill="black" font-family="Arial" font-size="14">17.3 ms</text>
<rect x="608.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="224.0" fill="black" font-family="Arial" font-size="14">21.9 ms</text>
<rect x="740.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="224.0" fill="black" font-family="Arial" font-size="14">28.1 ms</text>
<rect x="872.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="224.0" fill="black" font-family="Arial" font-size="14">39.7 ms</text>
<rect x="1004.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="224.0" fill="black" font-family="Arial" font-size="14">59.4 ms</text>
<rect x="1136.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="224.0" fill="black" font-family="Arial" font-size="14">90.7 ms</text>
<rect x="0" y="240" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="264.0" fill="black" font-family="Arial" font-size="14">Bitwise operations (`&#38;`, `&#124;`, `^`)</text>
<rect x="344.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="391.0" y="264.0" fill="black" font-family="Arial" font-size="14">3.3 ms</text>
<rect x="476.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="264.0" fill="black" font-family="Arial" font-size="14">3.63 ms</text>
<rect x="608.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="264.0" fill="black" font-family="Arial" font-size="14">4.11 ms</text>
<rect x="740.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="264.0" fill="black" font-family="Arial" font-size="14">4.65 ms</text>
<rect x="872.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="264.0" fill="black" font-family="Arial" font-size="14">6.03 ms</text>
<rect x="1004.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="264.0" fill="black" font-family="Arial" font-size="14">11.2 ms</text>
<rect x="1136.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="264.0" fill="black" font-family="Arial" font-size="14">19.0 ms</text>
<rect x="0" y="280" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="304.0" fill="black" font-family="Arial" font-size="14">Div (`/`)</text>
<rect x="344.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="304.0" fill="black" font-family="Arial" font-size="14">16.3 ms</text>
<rect x="476.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="304.0" fill="black" font-family="Arial" font-size="14">28.4 ms</text>
<rect x="608.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="304.0" fill="black" font-family="Arial" font-size="14">41.6 ms</text>
<rect x="740.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="304.0" fill="black" font-family="Arial" font-size="14">83.7 ms</text>
<rect x="872.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="304.0" fill="black" font-family="Arial" font-size="14">214 ms</text>
<rect x="1004.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="304.0" fill="black" font-family="Arial" font-size="14">664 ms</text>
<rect x="1136.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="304.0" fill="black" font-family="Arial" font-size="14">2.34 s</text>
<rect x="0" y="320" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="344.0" fill="black" font-family="Arial" font-size="14">Rem (`%`)</text>
<rect x="344.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="344.0" fill="black" font-family="Arial" font-size="14">35.5 ms</text>
<rect x="476.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="344.0" fill="black" font-family="Arial" font-size="14">56.5 ms</text>
<rect x="608.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="344.0" fill="black" font-family="Arial" font-size="14">80.6 ms</text>
<rect x="740.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="344.0" fill="black" font-family="Arial" font-size="14">149 ms</text>
<rect x="872.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="344.0" fill="black" font-family="Arial" font-size="14">351 ms</text>
<rect x="1004.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="344.0" fill="black" font-family="Arial" font-size="14">1.04 s</text>
<rect x="1136.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="344.0" fill="black" font-family="Arial" font-size="14">3.68 s</text>
<rect x="0" y="360" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="384.0" fill="black" font-family="Arial" font-size="14">Left / Right Shifts (`&#60;&#60;`, `&#62;&#62;`)</text>
<rect x="344.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="384.0" fill="black" font-family="Arial" font-size="14">3.49 ms</text>
<rect x="476.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="384.0" fill="black" font-family="Arial" font-size="14">3.63 ms</text>
<rect x="608.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="384.0" fill="black" font-family="Arial" font-size="14">4.1 ms</text>
<rect x="740.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="384.0" fill="black" font-family="Arial" font-size="14">4.63 ms</text>
<rect x="872.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="384.0" fill="black" font-family="Arial" font-size="14">6.03 ms</text>
<rect x="1004.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="384.0" fill="black" font-family="Arial" font-size="14">11.2 ms</text>
<rect x="1136.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="384.0" fill="black" font-family="Arial" font-size="14">19.0 ms</text>
<rect x="0" y="400" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="424.0" fill="black" font-family="Arial" font-size="14">Left / Right Rotations (`left_rotate`, `right_rotate`)</text>
<rect x="344.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="391.0" y="424.0" fill="black" font-family="Arial" font-size="14">3.5 ms</text>
<rect x="476.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="424.0" fill="black" font-family="Arial" font-size="14">3.63 ms</text>
<rect x="608.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="424.0" fill="black" font-family="Arial" font-size="14">4.11 ms</text>
<rect x="740.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="424.0" fill="black" font-family="Arial" font-size="14">4.64 ms</text>
<rect x="872.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="424.0" fill="black" font-family="Arial" font-size="14">6.03 ms</text>
<rect x="1004.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="424.0" fill="black" font-family="Arial" font-size="14">11.3 ms</text>
<rect x="1136.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="424.0" fill="black" font-family="Arial" font-size="14">19.0 ms</text>
<!-- Borders -->
<line x1="0" y1="0" x2="0" y2="440" stroke="white" />
<line x1="344.0" y1="0" x2="344.0" y2="440" stroke="white" />
<line x1="476.0" y1="0" x2="476.0" y2="440" stroke="white" />
<line x1="608.0" y1="0" x2="608.0" y2="440" stroke="white" />
<line x1="740.0" y1="0" x2="740.0" y2="440" stroke="white" />
<line x1="872.0" y1="0" x2="872.0" y2="440" stroke="white" />
<line x1="1004.0" y1="0" x2="1004.0" y2="440" stroke="white" />
<line x1="1136.0" y1="0" x2="1136.0" y2="440" stroke="white" />
<line x1="0" y1="0" x2="1268.0" y2="0" stroke="white" />
<line x1="0" y1="40" x2="1268.0" y2="40" stroke="white" />
<line x1="0" y1="80" x2="1268.0" y2="80" stroke="white" />
<line x1="0" y1="120" x2="1268.0" y2="120" stroke="white" />
<line x1="0" y1="160" x2="1268.0" y2="160" stroke="white" />
<line x1="0" y1="200" x2="1268.0" y2="200" stroke="white" />
<line x1="0" y1="240" x2="1268.0" y2="240" stroke="white" />
<line x1="0" y1="280" x2="1268.0" y2="280" stroke="white" />
<line x1="0" y1="320" x2="1268.0" y2="320" stroke="white" />
<line x1="0" y1="360" x2="1268.0" y2="360" stroke="white" />
<line x1="0" y1="400" x2="1268.0" y2="400" stroke="white" />
<line x1="0" y1="440" x2="1268.0" y2="440" stroke="white" />
<?xml version="1.0" ?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 440" preserveAspectRatio="meet" width="100%" height="440">
<rect x="0" y="0" width="720" height="40" fill="black"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="6" y="20.0">Operation \ Size</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="29.666666666666668">8</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="29.666666666666668">16</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="29.666666666666668">32</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="29.666666666666668">64</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="29.666666666666668">128</text>
<rect x="0" y="40" width="300" height="400" fill="#fbbc04"/>
<rect x="300" y="40" width="420" height="400" fill="#f3f3f3"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="60.0">Add / Sub (+,-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="60.0">11.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="60.0">12.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="60.0">17.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="60.0">25.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="60.0">51.4 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="100.0">Mul (x)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="100.0">18.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="100.0">26.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="100.0">46.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="100.0">109 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="100.0">330 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="140.0">Equal / Not Equal (eq, ne)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="140.0">7.81 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="140.0">8.08 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="140.0">12.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="140.0">13.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="140.0">18.8 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="180.0">Comparisons (ge, gt, le, lt)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="180.0">9.61 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="180.0">13.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="180.0">17.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="180.0">22.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="180.0">29.0 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="220.0">Max / Min (max, min)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="220.0">17.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="220.0">21.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="220.0">28.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="220.0">39.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="220.0">59.4 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="260.0">Bitwise operations (&amp;, |, ^)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="260.0">3.63 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="260.0">4.11 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="260.0">4.65 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="260.0">6.03 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="260.0">11.2 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="300.0">Div (/)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="300.0">28.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="300.0">41.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="300.0">83.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="300.0">214 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="300.0">664 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="340.0">Rem (%)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="340.0">56.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="340.0">80.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="340.0">149 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="340.0">351 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="340.0">1.04 s</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="380.0">Left / Right Shifts (&lt;&lt;, &gt;&gt;)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="380.0">3.63 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="380.0">4.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="380.0">4.63 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="380.0">6.03 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="380.0">11.2 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="420.0">Left / Right Rotations (left_rotate, right_rotate)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="420.0">3.63 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="420.0">4.11 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="420.0">4.64 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="420.0">6.03 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="420.0">11.3 ms</text>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="720" y2="0"/>
<line stroke="white" stroke-width="2" x1="0" y1="40" x2="720" y2="40"/>
<line stroke="white" stroke-width="2" x1="0" y1="80" x2="720" y2="80"/>
<line stroke="white" stroke-width="2" x1="0" y1="120" x2="720" y2="120"/>
<line stroke="white" stroke-width="2" x1="0" y1="160" x2="720" y2="160"/>
<line stroke="white" stroke-width="2" x1="0" y1="200" x2="720" y2="200"/>
<line stroke="white" stroke-width="2" x1="0" y1="240" x2="720" y2="240"/>
<line stroke="white" stroke-width="2" x1="0" y1="280" x2="720" y2="280"/>
<line stroke="white" stroke-width="2" x1="0" y1="320" x2="720" y2="320"/>
<line stroke="white" stroke-width="2" x1="0" y1="360" x2="720" y2="360"/>
<line stroke="white" stroke-width="2" x1="0" y1="400" x2="720" y2="400"/>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="0" y2="440"/>
<line stroke="white" stroke-width="2" x1="300.0" y1="0" x2="300.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="384.0" y1="0" x2="384.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="468.0" y1="0" x2="468.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="552.0" y1="0" x2="552.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="636.0" y1="0" x2="636.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="720.0" y1="0" x2="720.0" y2="440"/>
</svg>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,247 +1,116 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1268.0" height="560" viewBox="0 0 1268.0 560">
<!-- Header Row -->
<rect x="0" y="0" width="1268.0" height="40" fill="black" />
<text x="10" y="24.0" fill="white" font-family="Arial" font-size="14">Operation \ Size</text>
<text x="383.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint4</text>
<text x="515.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint8</text>
<text x="643.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint16</text>
<text x="775.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint32</text>
<text x="907.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint64</text>
<text x="1035.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint128</text>
<text x="1167.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint256</text>
<!-- Data Rows -->
<rect x="0" y="40" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="64.0" fill="black" font-family="Arial" font-size="14">Negation (`-`)</text>
<rect x="344.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="64.0" fill="black" font-family="Arial" font-size="14">11.2 ms</text>
<rect x="476.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="64.0" fill="black" font-family="Arial" font-size="14">11.4 ms</text>
<rect x="608.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="64.0" fill="black" font-family="Arial" font-size="14">11.6 ms</text>
<rect x="740.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="64.0" fill="black" font-family="Arial" font-size="14">16.4 ms</text>
<rect x="872.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="64.0" fill="black" font-family="Arial" font-size="14">21.9 ms</text>
<rect x="1004.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="64.0" fill="black" font-family="Arial" font-size="14">36.7 ms</text>
<rect x="1136.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="64.0" fill="black" font-family="Arial" font-size="14">57.6 ms</text>
<rect x="0" y="80" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="104.0" fill="black" font-family="Arial" font-size="14">Add / Sub (`+`,`-`)</text>
<rect x="344.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="104.0" fill="black" font-family="Arial" font-size="14">11.2 ms</text>
<rect x="476.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="104.0" fill="black" font-family="Arial" font-size="14">11.4 ms</text>
<rect x="608.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="104.0" fill="black" font-family="Arial" font-size="14">11.7 ms</text>
<rect x="740.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="104.0" fill="black" font-family="Arial" font-size="14">16.4 ms</text>
<rect x="872.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="104.0" fill="black" font-family="Arial" font-size="14">21.9 ms</text>
<rect x="1004.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="104.0" fill="black" font-family="Arial" font-size="14">36.7 ms</text>
<rect x="1136.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="104.0" fill="black" font-family="Arial" font-size="14">57.6 ms</text>
<rect x="0" y="120" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="144.0" fill="black" font-family="Arial" font-size="14">Mul (`x`)</text>
<rect x="344.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="144.0" fill="black" font-family="Arial" font-size="14">18.4 ms</text>
<rect x="476.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="144.0" fill="black" font-family="Arial" font-size="14">22.7 ms</text>
<rect x="608.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="144.0" fill="black" font-family="Arial" font-size="14">31.3 ms</text>
<rect x="740.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="144.0" fill="black" font-family="Arial" font-size="14">63.4 ms</text>
<rect x="872.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="144.0" fill="black" font-family="Arial" font-size="14">164 ms</text>
<rect x="1004.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="144.0" fill="black" font-family="Arial" font-size="14">545 ms</text>
<rect x="1136.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="144.0" fill="black" font-family="Arial" font-size="14">2.11 s</text>
<rect x="0" y="160" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="184.0" fill="black" font-family="Arial" font-size="14">Equal / Not Equal (`eq`, `ne`)</text>
<rect x="344.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="184.0" fill="black" font-family="Arial" font-size="14">7.81 ms</text>
<rect x="476.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="184.0" fill="black" font-family="Arial" font-size="14">7.95 ms</text>
<rect x="608.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="184.0" fill="black" font-family="Arial" font-size="14">11.6 ms</text>
<rect x="740.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="184.0" fill="black" font-family="Arial" font-size="14">12.3 ms</text>
<rect x="872.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="184.0" fill="black" font-family="Arial" font-size="14">16.8 ms</text>
<rect x="1004.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="184.0" fill="black" font-family="Arial" font-size="14">19.2 ms</text>
<rect x="1136.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="184.0" fill="black" font-family="Arial" font-size="14">30.2 ms</text>
<rect x="0" y="200" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="224.0" fill="black" font-family="Arial" font-size="14">Comparisons (`ge`, `gt`, `le`, `lt`)</text>
<rect x="344.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="224.0" fill="black" font-family="Arial" font-size="14">11.6 ms</text>
<rect x="476.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="224.0" fill="black" font-family="Arial" font-size="14">11.7 ms</text>
<rect x="608.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="224.0" fill="black" font-family="Arial" font-size="14">15.3 ms</text>
<rect x="740.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="224.0" fill="black" font-family="Arial" font-size="14">19.7 ms</text>
<rect x="872.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="224.0" fill="black" font-family="Arial" font-size="14">24.6 ms</text>
<rect x="1004.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="224.0" fill="black" font-family="Arial" font-size="14">31.6 ms</text>
<rect x="1136.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="224.0" fill="black" font-family="Arial" font-size="14">45.8 ms</text>
<rect x="0" y="240" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="264.0" fill="black" font-family="Arial" font-size="14">Max / Min (`max`,`min`)</text>
<rect x="344.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="264.0" fill="black" font-family="Arial" font-size="14">18.7 ms</text>
<rect x="476.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="264.0" fill="black" font-family="Arial" font-size="14">18.9 ms</text>
<rect x="608.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="264.0" fill="black" font-family="Arial" font-size="14">23.3 ms</text>
<rect x="740.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="264.0" fill="black" font-family="Arial" font-size="14">28.7 ms</text>
<rect x="872.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="264.0" fill="black" font-family="Arial" font-size="14">35.9 ms</text>
<rect x="1004.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="264.0" fill="black" font-family="Arial" font-size="14">50.0 ms</text>
<rect x="1136.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="264.0" fill="black" font-family="Arial" font-size="14">77.4 ms</text>
<rect x="0" y="280" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="304.0" fill="black" font-family="Arial" font-size="14">Bitwise operations (`&#38;`, `&#124;`, `^`)</text>
<rect x="344.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="304.0" fill="black" font-family="Arial" font-size="14">3.52 ms</text>
<rect x="476.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="304.0" fill="black" font-family="Arial" font-size="14">3.54 ms</text>
<rect x="608.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="304.0" fill="black" font-family="Arial" font-size="14">3.66 ms</text>
<rect x="740.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="304.0" fill="black" font-family="Arial" font-size="14">4.24 ms</text>
<rect x="872.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="304.0" fill="black" font-family="Arial" font-size="14">4.82 ms</text>
<rect x="1004.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="304.0" fill="black" font-family="Arial" font-size="14">6.43 ms</text>
<rect x="1136.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="304.0" fill="black" font-family="Arial" font-size="14">12.0 ms</text>
<rect x="0" y="320" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="344.0" fill="black" font-family="Arial" font-size="14">Div / Rem (`/`, `%`)</text>
<rect x="344.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="391.0" y="344.0" fill="black" font-family="Arial" font-size="14">122 ms</text>
<rect x="476.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="523.0" y="344.0" fill="black" font-family="Arial" font-size="14">273 ms</text>
<rect x="608.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="344.0" fill="black" font-family="Arial" font-size="14">580 ms</text>
<rect x="740.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="344.0" fill="black" font-family="Arial" font-size="14">1.28 s</text>
<rect x="872.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="344.0" fill="black" font-family="Arial" font-size="14">2.97 s</text>
<rect x="1004.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="344.0" fill="black" font-family="Arial" font-size="14">7.41 s</text>
<rect x="1136.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="344.0" fill="black" font-family="Arial" font-size="14">20.4 s</text>
<rect x="0" y="360" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="384.0" fill="black" font-family="Arial" font-size="14">Left / Right Shifts (`&#60;&#60;`, `&#62;&#62;`)</text>
<rect x="344.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="384.0" fill="black" font-family="Arial" font-size="14">17.9 ms</text>
<rect x="476.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="384.0" fill="black" font-family="Arial" font-size="14">21.8 ms</text>
<rect x="608.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="384.0" fill="black" font-family="Arial" font-size="14">27.9 ms</text>
<rect x="740.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="384.0" fill="black" font-family="Arial" font-size="14">36.5 ms</text>
<rect x="872.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="384.0" fill="black" font-family="Arial" font-size="14">53.1 ms</text>
<rect x="1004.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="384.0" fill="black" font-family="Arial" font-size="14">106 ms</text>
<rect x="1136.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="384.0" fill="black" font-family="Arial" font-size="14">197 ms</text>
<rect x="0" y="400" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="424.0" fill="black" font-family="Arial" font-size="14">Left / Right Rotations (`left_rotate`, `right_rotate`)</text>
<rect x="344.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="424.0" fill="black" font-family="Arial" font-size="14">17.9 ms</text>
<rect x="476.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="424.0" fill="black" font-family="Arial" font-size="14">21.8 ms</text>
<rect x="608.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="424.0" fill="black" font-family="Arial" font-size="14">27.9 ms</text>
<rect x="740.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="424.0" fill="black" font-family="Arial" font-size="14">36.5 ms</text>
<rect x="872.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="424.0" fill="black" font-family="Arial" font-size="14">53.2 ms</text>
<rect x="1004.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="424.0" fill="black" font-family="Arial" font-size="14">106 ms</text>
<rect x="1136.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="424.0" fill="black" font-family="Arial" font-size="14">197 ms</text>
<rect x="0" y="440" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="464.0" fill="black" font-family="Arial" font-size="14">Leading / Trailing zeros/ones</text>
<rect x="344.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="464.0" fill="black" font-family="Arial" font-size="14">29.5 ms</text>
<rect x="476.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="464.0" fill="black" font-family="Arial" font-size="14">25.5 ms</text>
<rect x="608.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="464.0" fill="black" font-family="Arial" font-size="14">32.9 ms</text>
<rect x="740.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="464.0" fill="black" font-family="Arial" font-size="14">42.9 ms</text>
<rect x="872.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="464.0" fill="black" font-family="Arial" font-size="14">56.5 ms</text>
<rect x="1004.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="464.0" fill="black" font-family="Arial" font-size="14">78.5 ms</text>
<rect x="1136.0" y="440" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="464.0" fill="black" font-family="Arial" font-size="14">136 ms</text>
<rect x="0" y="480" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="504.0" fill="black" font-family="Arial" font-size="14">Log2</text>
<rect x="344.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="504.0" fill="black" font-family="Arial" font-size="14">32.6 ms</text>
<rect x="476.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="504.0" fill="black" font-family="Arial" font-size="14">43.8 ms</text>
<rect x="608.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="504.0" fill="black" font-family="Arial" font-size="14">57.7 ms</text>
<rect x="740.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="504.0" fill="black" font-family="Arial" font-size="14">99.5 ms</text>
<rect x="872.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="504.0" fill="black" font-family="Arial" font-size="14">280 ms</text>
<rect x="1004.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="504.0" fill="black" font-family="Arial" font-size="14">962 ms</text>
<rect x="1136.0" y="480" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="504.0" fill="black" font-family="Arial" font-size="14">4.78 s</text>
<rect x="0" y="520" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="544.0" fill="black" font-family="Arial" font-size="14">Select</text>
<rect x="344.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="544.0" fill="black" font-family="Arial" font-size="14">7.08 ms</text>
<rect x="476.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="544.0" fill="black" font-family="Arial" font-size="14">7.38 ms</text>
<rect x="608.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="544.0" fill="black" font-family="Arial" font-size="14">7.98 ms</text>
<rect x="740.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="544.0" fill="black" font-family="Arial" font-size="14">9.02 ms</text>
<rect x="872.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="544.0" fill="black" font-family="Arial" font-size="14">11.3 ms</text>
<rect x="1004.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="544.0" fill="black" font-family="Arial" font-size="14">18.6 ms</text>
<rect x="1136.0" y="520" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="544.0" fill="black" font-family="Arial" font-size="14">32.8 ms</text>
<!-- Borders -->
<line x1="0" y1="0" x2="0" y2="560" stroke="white" />
<line x1="344.0" y1="0" x2="344.0" y2="560" stroke="white" />
<line x1="476.0" y1="0" x2="476.0" y2="560" stroke="white" />
<line x1="608.0" y1="0" x2="608.0" y2="560" stroke="white" />
<line x1="740.0" y1="0" x2="740.0" y2="560" stroke="white" />
<line x1="872.0" y1="0" x2="872.0" y2="560" stroke="white" />
<line x1="1004.0" y1="0" x2="1004.0" y2="560" stroke="white" />
<line x1="1136.0" y1="0" x2="1136.0" y2="560" stroke="white" />
<line x1="0" y1="0" x2="1268.0" y2="0" stroke="white" />
<line x1="0" y1="40" x2="1268.0" y2="40" stroke="white" />
<line x1="0" y1="80" x2="1268.0" y2="80" stroke="white" />
<line x1="0" y1="120" x2="1268.0" y2="120" stroke="white" />
<line x1="0" y1="160" x2="1268.0" y2="160" stroke="white" />
<line x1="0" y1="200" x2="1268.0" y2="200" stroke="white" />
<line x1="0" y1="240" x2="1268.0" y2="240" stroke="white" />
<line x1="0" y1="280" x2="1268.0" y2="280" stroke="white" />
<line x1="0" y1="320" x2="1268.0" y2="320" stroke="white" />
<line x1="0" y1="360" x2="1268.0" y2="360" stroke="white" />
<line x1="0" y1="400" x2="1268.0" y2="400" stroke="white" />
<line x1="0" y1="440" x2="1268.0" y2="440" stroke="white" />
<line x1="0" y1="480" x2="1268.0" y2="480" stroke="white" />
<line x1="0" y1="520" x2="1268.0" y2="520" stroke="white" />
<line x1="0" y1="560" x2="1268.0" y2="560" stroke="white" />
<?xml version="1.0" ?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 560" preserveAspectRatio="meet" width="100%" height="560">
<rect x="0" y="0" width="720" height="40" fill="black"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="6" y="20.0">Operation \ Size</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="29.666666666666668">8</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="29.666666666666668">16</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="29.666666666666668">32</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="29.666666666666668">64</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="29.666666666666668">128</text>
<rect x="0" y="40" width="300" height="520" fill="#fbbc04"/>
<rect x="300" y="40" width="420" height="520" fill="#f3f3f3"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="60.0">Negation (-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="60.0">11.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="60.0">11.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="60.0">16.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="60.0">21.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="60.0">36.7 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="100.0">Add / Sub (+,-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="100.0">11.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="100.0">11.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="100.0">16.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="100.0">21.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="100.0">36.7 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="140.0">Mul (x)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="140.0">22.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="140.0">31.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="140.0">63.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="140.0">164 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="140.0">545 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="180.0">Equal / Not Equal (eq, ne)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="180.0">7.95 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="180.0">11.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="180.0">12.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="180.0">16.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="180.0">19.2 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="220.0">Comparisons (ge, gt, le, lt)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="220.0">11.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="220.0">15.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="220.0">19.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="220.0">24.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="220.0">31.6 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="260.0">Max / Min (max, min)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="260.0">18.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="260.0">23.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="260.0">28.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="260.0">35.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="260.0">50.0 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="300.0">Bitwise operations (&amp;, |, ^)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="300.0">3.54 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="300.0">3.66 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="300.0">4.24 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="300.0">4.82 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="300.0">6.43 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="340.0">Div / Rem (/, %)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="340.0">273 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="340.0">580 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="340.0">1.28 s</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="340.0">2.97 s</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="340.0">7.41 s</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="380.0">Left / Right Shifts (&lt;&lt;, &gt;&gt;)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="380.0">21.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="380.0">27.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="380.0">36.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="380.0">53.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="380.0">106 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="420.0">Left / Right Rotations (left_rotate, right_rotate)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="420.0">21.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="420.0">27.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="420.0">36.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="420.0">53.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="420.0">106 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="460.0">Leading / Trailing zeros/ones</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="460.0">25.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="460.0">32.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="460.0">42.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="460.0">56.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="460.0">78.5 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="500.0">Log2</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="500.0">43.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="500.0">57.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="500.0">99.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="500.0">280 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="500.0">962 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="540.0">Select</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="540.0">7.38 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="540.0">7.98 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="540.0">9.02 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="540.0">11.3 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="540.0">18.6 ms</text>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="720" y2="0"/>
<line stroke="white" stroke-width="2" x1="0" y1="40" x2="720" y2="40"/>
<line stroke="white" stroke-width="2" x1="0" y1="80" x2="720" y2="80"/>
<line stroke="white" stroke-width="2" x1="0" y1="120" x2="720" y2="120"/>
<line stroke="white" stroke-width="2" x1="0" y1="160" x2="720" y2="160"/>
<line stroke="white" stroke-width="2" x1="0" y1="200" x2="720" y2="200"/>
<line stroke="white" stroke-width="2" x1="0" y1="240" x2="720" y2="240"/>
<line stroke="white" stroke-width="2" x1="0" y1="280" x2="720" y2="280"/>
<line stroke="white" stroke-width="2" x1="0" y1="320" x2="720" y2="320"/>
<line stroke="white" stroke-width="2" x1="0" y1="360" x2="720" y2="360"/>
<line stroke="white" stroke-width="2" x1="0" y1="400" x2="720" y2="400"/>
<line stroke="white" stroke-width="2" x1="0" y1="440" x2="720" y2="440"/>
<line stroke="white" stroke-width="2" x1="0" y1="480" x2="720" y2="480"/>
<line stroke="white" stroke-width="2" x1="0" y1="520" x2="720" y2="520"/>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="0" y2="560"/>
<line stroke="white" stroke-width="2" x1="300.0" y1="0" x2="300.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="384.0" y1="0" x2="384.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="468.0" y1="0" x2="468.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="552.0" y1="0" x2="552.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="636.0" y1="0" x2="636.0" y2="560"/>
<line stroke="white" stroke-width="2" x1="720.0" y1="0" x2="720.0" y2="560"/>
</svg>

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,196 +1,95 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1268.0" height="440" viewBox="0 0 1268.0 440">
<!-- Header Row -->
<rect x="0" y="0" width="1268.0" height="40" fill="black" />
<text x="10" y="24.0" fill="white" font-family="Arial" font-size="14">Operation \ Size</text>
<text x="383.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint4</text>
<text x="515.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint8</text>
<text x="643.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint16</text>
<text x="775.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint32</text>
<text x="907.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint64</text>
<text x="1035.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint128</text>
<text x="1167.0" y="24.0" fill="white" font-family="Arial" font-size="14">FheUint256</text>
<!-- Data Rows -->
<rect x="0" y="40" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="64.0" fill="black" font-family="Arial" font-size="14">Add / Sub (`+`,`-`)</text>
<rect x="344.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="64.0" fill="black" font-family="Arial" font-size="14">11.2 ms</text>
<rect x="476.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="64.0" fill="black" font-family="Arial" font-size="14">11.4 ms</text>
<rect x="608.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="64.0" fill="black" font-family="Arial" font-size="14">11.7 ms</text>
<rect x="740.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="64.0" fill="black" font-family="Arial" font-size="14">16.5 ms</text>
<rect x="872.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="64.0" fill="black" font-family="Arial" font-size="14">22.0 ms</text>
<rect x="1004.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="64.0" fill="black" font-family="Arial" font-size="14">36.8 ms</text>
<rect x="1136.0" y="40" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="64.0" fill="black" font-family="Arial" font-size="14">57.8 ms</text>
<rect x="0" y="80" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="104.0" fill="black" font-family="Arial" font-size="14">Mul (`x`)</text>
<rect x="344.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="104.0" fill="black" font-family="Arial" font-size="14">11.5 ms</text>
<rect x="476.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="104.0" fill="black" font-family="Arial" font-size="14">18.1 ms</text>
<rect x="608.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="104.0" fill="black" font-family="Arial" font-size="14">24.9 ms</text>
<rect x="740.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="104.0" fill="black" font-family="Arial" font-size="14">41.7 ms</text>
<rect x="872.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="104.0" fill="black" font-family="Arial" font-size="14">93.5 ms</text>
<rect x="1004.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="104.0" fill="black" font-family="Arial" font-size="14">271 ms</text>
<rect x="1136.0" y="80" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="104.0" fill="black" font-family="Arial" font-size="14">991 ms</text>
<rect x="0" y="120" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="144.0" fill="black" font-family="Arial" font-size="14">Equal / Not Equal (`eq`, `ne`)</text>
<rect x="344.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="144.0" fill="black" font-family="Arial" font-size="14">8.04 ms</text>
<rect x="476.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="144.0" fill="black" font-family="Arial" font-size="14">8.26 ms</text>
<rect x="608.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="144.0" fill="black" font-family="Arial" font-size="14">8.53 ms</text>
<rect x="740.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="144.0" fill="black" font-family="Arial" font-size="14">12.4 ms</text>
<rect x="872.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="144.0" fill="black" font-family="Arial" font-size="14">13.2 ms</text>
<rect x="1004.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="144.0" fill="black" font-family="Arial" font-size="14">18.0 ms</text>
<rect x="1136.0" y="120" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="144.0" fill="black" font-family="Arial" font-size="14">21.3 ms</text>
<rect x="0" y="160" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="184.0" fill="black" font-family="Arial" font-size="14">Comparisons (`ge`, `gt`, `le`, `lt`)</text>
<rect x="344.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="391.0" y="184.0" fill="black" font-family="Arial" font-size="14">9.6 ms</text>
<rect x="476.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="184.0" fill="black" font-family="Arial" font-size="14">9.95 ms</text>
<rect x="608.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="184.0" fill="black" font-family="Arial" font-size="14">13.7 ms</text>
<rect x="740.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="184.0" fill="black" font-family="Arial" font-size="14">17.4 ms</text>
<rect x="872.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="184.0" fill="black" font-family="Arial" font-size="14">21.7 ms</text>
<rect x="1004.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="184.0" fill="black" font-family="Arial" font-size="14">27.4 ms</text>
<rect x="1136.0" y="160" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="184.0" fill="black" font-family="Arial" font-size="14">35.3 ms</text>
<rect x="0" y="200" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="224.0" fill="black" font-family="Arial" font-size="14">Max / Min (`max`,`min`)</text>
<rect x="344.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="224.0" fill="black" font-family="Arial" font-size="14">16.8 ms</text>
<rect x="476.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="224.0" fill="black" font-family="Arial" font-size="14">17.0 ms</text>
<rect x="608.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="224.0" fill="black" font-family="Arial" font-size="14">21.6 ms</text>
<rect x="740.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="224.0" fill="black" font-family="Arial" font-size="14">26.4 ms</text>
<rect x="872.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="224.0" fill="black" font-family="Arial" font-size="14">33.4 ms</text>
<rect x="1004.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="224.0" fill="black" font-family="Arial" font-size="14">46.2 ms</text>
<rect x="1136.0" y="200" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="224.0" fill="black" font-family="Arial" font-size="14">68.1 ms</text>
<rect x="0" y="240" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="264.0" fill="black" font-family="Arial" font-size="14">Bitwise operations (`&#38;`, `&#124;`, `^`)</text>
<rect x="344.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="264.0" fill="black" font-family="Arial" font-size="14">3.41 ms</text>
<rect x="476.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="264.0" fill="black" font-family="Arial" font-size="14">3.64 ms</text>
<rect x="608.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="264.0" fill="black" font-family="Arial" font-size="14">3.79 ms</text>
<rect x="740.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="264.0" fill="black" font-family="Arial" font-size="14">4.36 ms</text>
<rect x="872.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="264.0" fill="black" font-family="Arial" font-size="14">4.91 ms</text>
<rect x="1004.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="264.0" fill="black" font-family="Arial" font-size="14">6.54 ms</text>
<rect x="1136.0" y="240" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="264.0" fill="black" font-family="Arial" font-size="14">12.1 ms</text>
<rect x="0" y="280" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="304.0" fill="black" font-family="Arial" font-size="14">Div (`/`)</text>
<rect x="344.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="304.0" fill="black" font-family="Arial" font-size="14">15.7 ms</text>
<rect x="476.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="304.0" fill="black" font-family="Arial" font-size="14">26.7 ms</text>
<rect x="608.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="304.0" fill="black" font-family="Arial" font-size="14">39.4 ms</text>
<rect x="740.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="304.0" fill="black" font-family="Arial" font-size="14">71.8 ms</text>
<rect x="872.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="304.0" fill="black" font-family="Arial" font-size="14">176 ms</text>
<rect x="1004.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="304.0" fill="black" font-family="Arial" font-size="14">544 ms</text>
<rect x="1136.0" y="280" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="304.0" fill="black" font-family="Arial" font-size="14">1.99 s</text>
<rect x="0" y="320" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="344.0" fill="black" font-family="Arial" font-size="14">Rem (`%`)</text>
<rect x="344.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="344.0" fill="black" font-family="Arial" font-size="14">36.4 ms</text>
<rect x="476.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="344.0" fill="black" font-family="Arial" font-size="14">56.9 ms</text>
<rect x="608.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="344.0" fill="black" font-family="Arial" font-size="14">77.4 ms</text>
<rect x="740.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="787.0" y="344.0" fill="black" font-family="Arial" font-size="14">131 ms</text>
<rect x="872.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="919.0" y="344.0" fill="black" font-family="Arial" font-size="14">292 ms</text>
<rect x="1004.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1051.0" y="344.0" fill="black" font-family="Arial" font-size="14">839 ms</text>
<rect x="1136.0" y="320" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1183.0" y="344.0" fill="black" font-family="Arial" font-size="14">2.97 s</text>
<rect x="0" y="360" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="384.0" fill="black" font-family="Arial" font-size="14">Left / Right Shifts (`&#60;&#60;`, `&#62;&#62;`)</text>
<rect x="344.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="384.0" fill="black" font-family="Arial" font-size="14">3.54 ms</text>
<rect x="476.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="384.0" fill="black" font-family="Arial" font-size="14">3.55 ms</text>
<rect x="608.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="655.0" y="384.0" fill="black" font-family="Arial" font-size="14">3.7 ms</text>
<rect x="740.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="384.0" fill="black" font-family="Arial" font-size="14">4.28 ms</text>
<rect x="872.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="384.0" fill="black" font-family="Arial" font-size="14">4.82 ms</text>
<rect x="1004.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="384.0" fill="black" font-family="Arial" font-size="14">6.45 ms</text>
<rect x="1136.0" y="360" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="384.0" fill="black" font-family="Arial" font-size="14">11.9 ms</text>
<rect x="0" y="400" width="1268.0" height="40" fill="#fbbc04" />
<text x="10" y="424.0" fill="black" font-family="Arial" font-size="14">Left / Right Rotations (`left_rotate`, `right_rotate`)</text>
<rect x="344.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="387.0" y="424.0" fill="black" font-family="Arial" font-size="14">3.54 ms</text>
<rect x="476.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="519.0" y="424.0" fill="black" font-family="Arial" font-size="14">3.55 ms</text>
<rect x="608.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="651.0" y="424.0" fill="black" font-family="Arial" font-size="14">3.71 ms</text>
<rect x="740.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="783.0" y="424.0" fill="black" font-family="Arial" font-size="14">4.28 ms</text>
<rect x="872.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="915.0" y="424.0" fill="black" font-family="Arial" font-size="14">4.82 ms</text>
<rect x="1004.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1047.0" y="424.0" fill="black" font-family="Arial" font-size="14">6.46 ms</text>
<rect x="1136.0" y="400" width="1268.0" height="40" fill="#f3f3f3" />
<text x="1179.0" y="424.0" fill="black" font-family="Arial" font-size="14">12.0 ms</text>
<!-- Borders -->
<line x1="0" y1="0" x2="0" y2="440" stroke="white" />
<line x1="344.0" y1="0" x2="344.0" y2="440" stroke="white" />
<line x1="476.0" y1="0" x2="476.0" y2="440" stroke="white" />
<line x1="608.0" y1="0" x2="608.0" y2="440" stroke="white" />
<line x1="740.0" y1="0" x2="740.0" y2="440" stroke="white" />
<line x1="872.0" y1="0" x2="872.0" y2="440" stroke="white" />
<line x1="1004.0" y1="0" x2="1004.0" y2="440" stroke="white" />
<line x1="1136.0" y1="0" x2="1136.0" y2="440" stroke="white" />
<line x1="0" y1="0" x2="1268.0" y2="0" stroke="white" />
<line x1="0" y1="40" x2="1268.0" y2="40" stroke="white" />
<line x1="0" y1="80" x2="1268.0" y2="80" stroke="white" />
<line x1="0" y1="120" x2="1268.0" y2="120" stroke="white" />
<line x1="0" y1="160" x2="1268.0" y2="160" stroke="white" />
<line x1="0" y1="200" x2="1268.0" y2="200" stroke="white" />
<line x1="0" y1="240" x2="1268.0" y2="240" stroke="white" />
<line x1="0" y1="280" x2="1268.0" y2="280" stroke="white" />
<line x1="0" y1="320" x2="1268.0" y2="320" stroke="white" />
<line x1="0" y1="360" x2="1268.0" y2="360" stroke="white" />
<line x1="0" y1="400" x2="1268.0" y2="400" stroke="white" />
<line x1="0" y1="440" x2="1268.0" y2="440" stroke="white" />
<?xml version="1.0" ?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 440" preserveAspectRatio="meet" width="100%" height="440">
<rect x="0" y="0" width="720" height="40" fill="black"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="6" y="20.0">Operation \ Size</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="342.0" y="29.666666666666668">8</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="426.0" y="29.666666666666668">16</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="510.0" y="29.666666666666668">32</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="594.0" y="29.666666666666668">64</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="13.333333333333334">FheUint</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="bold" fill="white" x="678.0" y="29.666666666666668">128</text>
<rect x="0" y="40" width="300" height="400" fill="#fbbc04"/>
<rect x="300" y="40" width="420" height="400" fill="#f3f3f3"/>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="60.0">Add / Sub (+,-)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="60.0">11.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="60.0">11.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="60.0">16.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="60.0">22.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="60.0">36.8 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="100.0">Mul (x)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="100.0">18.1 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="100.0">24.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="100.0">41.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="100.0">93.5 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="100.0">271 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="140.0">Equal / Not Equal (eq, ne)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="140.0">8.26 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="140.0">8.53 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="140.0">12.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="140.0">13.2 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="140.0">18.0 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="180.0">Comparisons (ge, gt, le, lt)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="180.0">9.95 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="180.0">13.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="180.0">17.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="180.0">21.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="180.0">27.4 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="220.0">Max / Min (max, min)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="220.0">17.0 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="220.0">21.6 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="220.0">26.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="220.0">33.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="220.0">46.2 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="260.0">Bitwise operations (&amp;, |, ^)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="260.0">3.64 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="260.0">3.79 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="260.0">4.36 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="260.0">4.91 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="260.0">6.54 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="300.0">Div (/)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="300.0">26.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="300.0">39.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="300.0">71.8 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="300.0">176 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="300.0">544 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="340.0">Rem (%)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="340.0">56.9 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="340.0">77.4 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="340.0">131 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="340.0">292 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="340.0">839 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="380.0">Left / Right Shifts (&lt;&lt;, &gt;&gt;)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="380.0">3.55 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="380.0">3.7 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="380.0">4.28 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="380.0">4.82 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="380.0">6.45 ms</text>
<text dominant-baseline="middle" text-anchor="start" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="6" y="420.0">Left / Right Rotations (left_rotate, right_rotate)</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="342.0" y="420.0">3.55 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="426.0" y="420.0">3.71 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="510.0" y="420.0">4.28 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="594.0" y="420.0">4.82 ms</text>
<text dominant-baseline="middle" text-anchor="middle" font-family="Arial" font-size="14" font-weight="normal" fill="black" x="678.0" y="420.0">6.46 ms</text>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="720" y2="0"/>
<line stroke="white" stroke-width="2" x1="0" y1="40" x2="720" y2="40"/>
<line stroke="white" stroke-width="2" x1="0" y1="80" x2="720" y2="80"/>
<line stroke="white" stroke-width="2" x1="0" y1="120" x2="720" y2="120"/>
<line stroke="white" stroke-width="2" x1="0" y1="160" x2="720" y2="160"/>
<line stroke="white" stroke-width="2" x1="0" y1="200" x2="720" y2="200"/>
<line stroke="white" stroke-width="2" x1="0" y1="240" x2="720" y2="240"/>
<line stroke="white" stroke-width="2" x1="0" y1="280" x2="720" y2="280"/>
<line stroke="white" stroke-width="2" x1="0" y1="320" x2="720" y2="320"/>
<line stroke="white" stroke-width="2" x1="0" y1="360" x2="720" y2="360"/>
<line stroke="white" stroke-width="2" x1="0" y1="400" x2="720" y2="400"/>
<line stroke="white" stroke-width="2" x1="0" y1="0" x2="0" y2="440"/>
<line stroke="white" stroke-width="2" x1="300.0" y1="0" x2="300.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="384.0" y1="0" x2="384.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="468.0" y1="0" x2="468.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="552.0" y1="0" x2="552.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="636.0" y1="0" x2="636.0" y2="440"/>
<line stroke="white" stroke-width="2" x1="720.0" y1="0" x2="720.0" y2="440"/>
</svg>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -12,4 +12,4 @@ make print_doc_bench_parameters
### Operation time over FheUint 64
![Click to enlarge](../../_static/cpu_gpu_integer_benchmark_fheuint64_tuniform_2m64_ciphertext.svg)
![](../../_static/cpu_gpu_integer_benchmark_fheuint64_tuniform_2m64_ciphertext.svg)

View File

@@ -14,21 +14,21 @@ The following tables benchmark the execution time of some operation sets using `
The next table shows the operation timings on CPU when all inputs are encrypted:
![Click to enlarge](../../../_static/cpu_integer_benchmark_tuniform_2m64_ciphertext.svg)
![](../../../_static/cpu_integer_benchmark_tuniform_2m64_ciphertext.svg)
The next table shows the operation timings on CPU when the left input is encrypted and the right is a clear scalar of the same size:
![Click to enlarge](../../../_static/cpu_integer_benchmark_tuniform_2m64_plaintext.svg)
![](../../../_static/cpu_integer_benchmark_tuniform_2m64_plaintext.svg)
## Pfail: $$2^{-128}$$
The next table shows the operation timings on CPU when all inputs are encrypted:
![Click to enlarge](../../../_static/cpu_integer_benchmark_tuniform_2m128_ciphertext.svg)
![](../../../_static/cpu_integer_benchmark_tuniform_2m128_ciphertext.svg)
The next table shows the operation timings on CPU when the left input is encrypted and the right is a clear scalar of the same size:
![Click to enlarge](../../../_static/cpu_integer_benchmark_tuniform_2m128_plaintext.svg)
![](../../../_static/cpu_integer_benchmark_tuniform_2m128_plaintext.svg)
All timings are based on parallelized Radix-based integer operations where each block is encrypted using the default parameters `PARAM_MESSAGE_2_CARRY_2_KS_PBS`. To ensure predictable timings, we perform operations in the `default` mode, which ensures that the input and output encoding are similar (i.e., the carries are always emptied).

View File

@@ -13,15 +13,15 @@ Note that these benchmarks use Gaussian parameters. `MB-PBS` stands for multi-bi
## P-fail: $$2^{-40}$$
![Click to enlarge](../../../_static/cpu_pbs_benchmark_tuniform_2m40.svg)
![](../../../_static/cpu_pbs_benchmark_tuniform_2m40.svg)
## P-fail: $$2^{-64}$$
![Click to enlarge](../../../_static/cpu_pbs_benchmark_tuniform_2m64.svg)
![](../../../_static/cpu_pbs_benchmark_tuniform_2m64.svg)
## P-fail: $$2^{-128}$$
![Click to enlarge](../../../_static/cpu_pbs_benchmark_tuniform_2m128.svg)
![](../../../_static/cpu_pbs_benchmark_tuniform_2m128.svg)
## Reproducing TFHE-rs benchmarks

View File

@@ -12,22 +12,22 @@ The cryptographic parameters `PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_P
Below come the results for the execution on a single H100.
The following table shows the performance when the inputs of the benchmarked operation are encrypted:
![Click to enlarge](../../../_static/gpu_integer_benchmark_h100x1_multi_bit_tuniform_2m64_ciphertext.svg)
![](../../../_static/gpu_integer_benchmark_h100x1_multi_bit_tuniform_2m64_ciphertext.svg)
The following table shows the performance when the left input of the benchmarked operation is encrypted and the other is a clear scalar of the same size:
![Click to enlarge](../../../_static/gpu_integer_benchmark_h100x1_multi_bit_tuniform_2m64_plaintext.svg)
![](../../../_static/gpu_integer_benchmark_h100x1_multi_bit_tuniform_2m64_plaintext.svg)
## 2xH100
Below come the results for the execution on two H100's.
The following table shows the performance when the inputs of the benchmarked operation are encrypted:
![Click to enlarge](../../../_static/gpu_integer_benchmark_h100x2_multi_bit_tuniform_2m64_ciphertext.svg)
![](../../../_static/gpu_integer_benchmark_h100x2_multi_bit_tuniform_2m64_ciphertext.svg)
The following table shows the performance when the left input of the benchmarked operation is encrypted and the other is a clear scalar of the same size:
![Click to enlarge](../../../_static/gpu_integer_benchmark_h100x2_multi_bit_tuniform_2m64_plaintext.svg)
![](../../../_static/gpu_integer_benchmark_h100x2_multi_bit_tuniform_2m64_plaintext.svg)
## Reproducing TFHE-rs benchmarks

View File

@@ -8,11 +8,11 @@ All GPU benchmarks were launched on H100 GPUs, and rely on the multithreaded PBS
## P-fail: $$2^{-40}$$
![Click to enlarge](../../../_static/gpu_pbs_benchmark_tuniform_2m40.svg)
![](../../../_static/gpu_pbs_benchmark_tuniform_2m40.svg)
## P-fail: $$2^{-64}$$
![Click to enlarge](../../../_static/gpu_pbs_benchmark_tuniform_2m64.svg)
![](../../../_static/gpu_pbs_benchmark_tuniform_2m64.svg)
## Reproducing TFHE-rs benchmarks

View File

@@ -2,7 +2,7 @@ use crate::core_crypto::prelude::{CastFrom, CastInto, Numeric};
use crate::integer::bigint::static_signed::StaticSignedBigInt;
use crate::integer::bigint::static_unsigned::StaticUnsignedBigInt;
use core::ops::{AddAssign, BitAnd, ShlAssign, ShrAssign};
use std::ops::{BitOrAssign, Shl, Sub};
use std::ops::{BitOrAssign, Not, Shl, Shr, Sub};
// These work for signed number as rust uses 2-Complements
// And Arithmetic shift for signed number (logical for unsigned)
@@ -14,8 +14,10 @@ pub trait Decomposable:
+ ShrAssign<u32>
+ Eq
+ CastFrom<u32>
+ Shr<u32, Output = Self>
+ Shl<u32, Output = Self>
+ BitOrAssign<Self>
+ Not<Output = Self>
{
}
pub trait Recomposable:
@@ -86,13 +88,20 @@ impl<const N: usize> RecomposableFrom<u8> for StaticUnsignedBigInt<N> {}
impl<const N: usize> DecomposableInto<u64> for StaticUnsignedBigInt<N> {}
impl<const N: usize> DecomposableInto<u8> for StaticUnsignedBigInt<N> {}
#[derive(Copy, Clone)]
#[repr(u32)]
pub enum PaddingBitValue {
Zero = 0,
One = 1,
}
#[derive(Clone)]
pub struct BlockDecomposer<T> {
data: T,
bit_mask: T,
num_bits_in_mask: u32,
num_bits_valid: u32,
padding_bit: T,
padding_bit: Option<PaddingBitValue>,
limit: Option<T>,
}
@@ -100,19 +109,27 @@ impl<T> BlockDecomposer<T>
where
T: Decomposable,
{
/// Creates a block decomposer that will stop when the value reaches zero
pub fn with_early_stop_at_zero(value: T, bits_per_block: u32) -> Self {
Self::new_(value, bits_per_block, Some(T::ZERO), T::ZERO)
Self::new_(value, bits_per_block, Some(T::ZERO), None)
}
pub fn with_padding_bit(value: T, bits_per_block: u32, padding_bit: T) -> Self {
Self::new_(value, bits_per_block, None, padding_bit)
/// Creates a block decomposer that will set the surplus bits to a specific value
/// when bits_per_block is not a multiple of T::BITS
pub fn with_padding_bit(value: T, bits_per_block: u32, padding_bit: PaddingBitValue) -> Self {
Self::new_(value, bits_per_block, None, Some(padding_bit))
}
pub fn new(value: T, bits_per_block: u32) -> Self {
Self::new_(value, bits_per_block, None, T::ZERO)
Self::new_(value, bits_per_block, None, None)
}
fn new_(value: T, bits_per_block: u32, limit: Option<T>, padding_bit: T) -> Self {
fn new_(
value: T,
bits_per_block: u32,
limit: Option<T>,
padding_bit: Option<PaddingBitValue>,
) -> Self {
assert!(bits_per_block <= T::BITS as u32);
let num_bits_valid = T::BITS as u32;
@@ -129,6 +146,31 @@ where
padding_bit,
}
}
// We concretize the iterator type to allow usage of callbacks working on iterator for generic
// integer encryption
pub fn iter_as<V>(self) -> std::iter::Map<Self, fn(T) -> V>
where
V: Numeric,
T: CastInto<V>,
{
assert!(self.num_bits_in_mask <= V::BITS as u32);
self.map(CastInto::cast_into)
}
pub fn next_as<V>(&mut self) -> Option<V>
where
V: CastFrom<T>,
{
self.next().map(|masked| V::cast_from(masked))
}
pub fn checked_next_as<V>(&mut self) -> Option<V>
where
V: TryFrom<T>,
{
self.next().and_then(|masked| V::try_from(masked).ok())
}
}
impl<T> Iterator for BlockDecomposer<T>
@@ -159,11 +201,18 @@ where
if self.num_bits_valid < self.num_bits_in_mask {
// This will be the case when self.num_bits_in_mask is not a multiple
// of T::BITS. We replace bits that
// do not come from the actual T but from the padding
// intoduced by the shift, to a specific value.
for i in self.num_bits_valid..self.num_bits_in_mask {
masked |= self.padding_bit << i;
// of T::BITS.
//
// We replace bits that do not come from the actual T but from the padding
// introduced by the shift, to a specific value, if one was provided.
if let Some(padding_bit) = self.padding_bit {
let padding_mask = (self.bit_mask >> self.num_bits_valid) << self.num_bits_valid;
masked = masked & !padding_mask;
let padding_bit = T::cast_from(padding_bit as u32);
for i in self.num_bits_valid..self.num_bits_in_mask {
masked |= padding_bit << i;
}
}
}
@@ -184,36 +233,6 @@ where
}
}
impl<T> BlockDecomposer<T>
where
T: Decomposable,
{
// We concretize the iterator type to allow usage of callbacks working on iterator for generic
// integer encryption
pub fn iter_as<V>(self) -> std::iter::Map<Self, fn(T) -> V>
where
V: Numeric,
T: CastInto<V>,
{
assert!(self.num_bits_in_mask <= V::BITS as u32);
self.map(CastInto::cast_into)
}
pub fn next_as<V>(&mut self) -> Option<V>
where
V: CastFrom<T>,
{
self.next().map(|masked| V::cast_from(masked))
}
pub fn checked_next_as<V>(&mut self) -> Option<V>
where
V: TryFrom<T>,
{
self.next().and_then(|masked| V::try_from(masked).ok())
}
}
pub struct BlockRecomposer<T> {
data: T,
bit_mask: T,
@@ -310,6 +329,36 @@ mod tests {
assert_eq!(expected_blocks, blocks);
}
#[test]
fn test_bit_block_decomposer_3() {
let bits_per_block = 3;
let value = -1i8;
let blocks = BlockDecomposer::new(value, bits_per_block)
.iter_as::<u64>()
.collect::<Vec<_>>();
// We expect the last block padded with 1s as a consequence of arithmetic shift
let expected_blocks = vec![7, 7, 7];
assert_eq!(expected_blocks, blocks);
let value = i8::MIN;
let blocks = BlockDecomposer::new(value, bits_per_block)
.iter_as::<u64>()
.collect::<Vec<_>>();
// We expect the last block padded with 1s as a consequence of arithmetic shift
let expected_blocks = vec![0, 0, 6];
assert_eq!(expected_blocks, blocks);
let value = -1i8;
let blocks =
BlockDecomposer::with_padding_bit(value, bits_per_block, PaddingBitValue::Zero)
.iter_as::<u64>()
.collect::<Vec<_>>();
// We expect the last block padded with 0s as we force that
let expected_blocks = vec![7, 7, 3];
assert_eq!(expected_blocks, blocks);
}
#[test]
fn test_bit_block_decomposer_recomposer_carry_handling_in_between() {
let value = u16::MAX as u32;

View File

@@ -139,17 +139,17 @@ impl CudaBooleanBlock {
let h_lwe_ciphertext_list = self.0.ciphertext.d_blocks.to_lwe_ciphertext_list(streams);
let ciphertext_modulus = h_lwe_ciphertext_list.ciphertext_modulus();
let block = Ciphertext {
ct: LweCiphertextOwned::from_container(
let block = Ciphertext::new(
LweCiphertextOwned::from_container(
h_lwe_ciphertext_list.into_container(),
ciphertext_modulus,
),
degree: self.0.ciphertext.info.blocks[0].degree,
noise_level: self.0.ciphertext.info.blocks[0].noise_level,
message_modulus: self.0.ciphertext.info.blocks[0].message_modulus,
carry_modulus: self.0.ciphertext.info.blocks[0].carry_modulus,
pbs_order: self.0.ciphertext.info.blocks[0].pbs_order,
};
self.0.ciphertext.info.blocks[0].degree,
self.0.ciphertext.info.blocks[0].noise_level,
self.0.ciphertext.info.blocks[0].message_modulus,
self.0.ciphertext.info.blocks[0].carry_modulus,
self.0.ciphertext.info.blocks[0].pbs_order,
);
BooleanBlock::new_unchecked(block)
}

View File

@@ -161,13 +161,15 @@ impl CudaRadixCiphertext {
.into_container()
.chunks(lwe_size)
.zip(&self.info.blocks)
.map(|(data, i)| Ciphertext {
ct: LweCiphertextOwned::from_container(data.to_vec(), ciphertext_modulus),
degree: i.degree,
noise_level: i.noise_level,
message_modulus: i.message_modulus,
carry_modulus: i.carry_modulus,
pbs_order: i.pbs_order,
.map(|(data, i)| {
Ciphertext::new(
LweCiphertextOwned::from_container(data.to_vec(), ciphertext_modulus),
i.degree,
i.noise_level,
i.message_modulus,
i.carry_modulus,
i.pbs_order,
)
})
.collect()
}

View File

@@ -1249,7 +1249,7 @@ pub unsafe fn unchecked_scalar_comparison_integer_radix_kb_async<T: UnsignedInte
/// is required
pub unsafe fn full_propagate_assign_async<T: UnsignedInteger, B: Numeric>(
streams: &CudaStreams,
radix_lwe_input: &mut CudaVec<T>,
radix_lwe_input: &mut CudaRadixCiphertext,
bootstrapping_key: &CudaVec<B>,
keyswitch_key: &CudaVec<T>,
lwe_dimension: LweDimension,
@@ -1267,7 +1267,7 @@ pub unsafe fn full_propagate_assign_async<T: UnsignedInteger, B: Numeric>(
) {
assert_eq!(
streams.gpu_indexes[0],
radix_lwe_input.gpu_index(0),
radix_lwe_input.d_blocks.0.d_vec.gpu_index(0),
"GPU error: all data should reside on the same GPU."
);
assert_eq!(
@@ -1281,6 +1281,23 @@ pub unsafe fn full_propagate_assign_async<T: UnsignedInteger, B: Numeric>(
"GPU error: all data should reside on the same GPU."
);
let mut mem_ptr: *mut i8 = std::ptr::null_mut();
let mut radix_lwe_input_degrees = radix_lwe_input
.info
.blocks
.iter()
.map(|b| b.degree.0)
.collect();
let mut radix_lwe_input_noise_levels = radix_lwe_input
.info
.blocks
.iter()
.map(|b| b.noise_level.0)
.collect();
let mut cuda_ffi_radix_lwe_input = prepare_cuda_radix_ffi(
radix_lwe_input,
&mut radix_lwe_input_degrees,
&mut radix_lwe_input_noise_levels,
);
scratch_cuda_full_propagation_64(
streams.ptr.as_ptr(),
streams.gpu_indexes_ptr(),
@@ -1303,7 +1320,7 @@ pub unsafe fn full_propagate_assign_async<T: UnsignedInteger, B: Numeric>(
streams.ptr.as_ptr(),
streams.gpu_indexes_ptr(),
streams.len() as u32,
radix_lwe_input.as_mut_c_ptr(0),
&mut cuda_ffi_radix_lwe_input,
mem_ptr,
keyswitch_key.ptr.as_ptr(),
bootstrapping_key.ptr.as_ptr(),
@@ -1315,6 +1332,7 @@ pub unsafe fn full_propagate_assign_async<T: UnsignedInteger, B: Numeric>(
streams.len() as u32,
std::ptr::addr_of_mut!(mem_ptr),
);
update_noise_degree(radix_lwe_input, &cuda_ffi_radix_lwe_input);
}
#[allow(clippy::too_many_arguments)]

View File

@@ -569,7 +569,7 @@ impl CudaServerKey {
let output_flag = OutputFlag::from_signedness(CudaSignedRadixCiphertext::IS_SIGNED);
let mut ct_res = lhs.duplicate_async(stream);
let mut carry_out: CudaSignedRadixCiphertext = self
let carry_out: CudaSignedRadixCiphertext = self
.add_and_propagate_single_carry_assign_async(
&mut ct_res,
rhs,
@@ -578,14 +578,6 @@ impl CudaServerKey {
output_flag,
);
if lhs.as_ref().info.blocks.last().unwrap().noise_level == NoiseLevel::ZERO
&& rhs.as_ref().info.blocks.last().unwrap().noise_level == NoiseLevel::ZERO
{
carry_out.as_mut().info = carry_out.as_ref().info.boolean_info(NoiseLevel::ZERO);
} else {
carry_out.as_mut().info = carry_out.as_ref().info.boolean_info(NoiseLevel::NOMINAL);
}
let ct_overflowed = CudaBooleanBlock::from_cuda_radix_ciphertext(carry_out.ciphertext);
(ct_res, ct_overflowed)

View File

@@ -383,7 +383,7 @@ impl CudaServerKey {
CudaBootstrappingKey::Classic(d_bsk) => {
full_propagate_assign_async(
streams,
&mut ciphertext.d_blocks.0.d_vec,
ciphertext,
&d_bsk.d_vec,
&self.key_switching_key.d_vec,
d_bsk.input_lwe_dimension(),
@@ -403,7 +403,7 @@ impl CudaServerKey {
CudaBootstrappingKey::MultiBit(d_multibit_bsk) => {
full_propagate_assign_async(
streams,
&mut ciphertext.d_blocks.0.d_vec,
ciphertext,
&d_multibit_bsk.d_vec,
&self.key_switching_key.d_vec,
d_multibit_bsk.input_lwe_dimension(),
@@ -422,14 +422,6 @@ impl CudaServerKey {
}
}
}
ciphertext.info.blocks.iter_mut().for_each(|b| {
b.degree = Degree::new(b.message_modulus.0 - 1);
b.noise_level = if b.noise_level == NoiseLevel::ZERO {
NoiseLevel::ZERO
} else {
NoiseLevel::NOMINAL
};
});
}
/// Prepend trivial zero LSB blocks to an existing [`CudaUnsignedRadixCiphertext`] or

View File

@@ -49,7 +49,7 @@ impl ServerKey {
&& self
.key
.max_noise_level
.validate(ct_i.noise_level * scalar)
.validate(ct_i.noise_level() * scalar)
.is_ok()
{
self.key.unchecked_scalar_mul_assign(ct_i, scalar_i);

View File

@@ -60,7 +60,7 @@ impl ServerKey {
&& self
.key
.max_noise_level
.validate(ct_i.noise_level * scalar)
.validate(ct_i.noise_level() * scalar)
.is_ok()
{
self.key.unchecked_scalar_mul_assign(ct_i, scalar_i);

View File

@@ -1,5 +1,5 @@
use crate::core_crypto::prelude::Numeric;
use crate::integer::block_decomposition::{BlockDecomposer, DecomposableInto};
use crate::integer::block_decomposition::{BlockDecomposer, DecomposableInto, PaddingBitValue};
use crate::integer::ciphertext::{IntegerRadixCiphertext, RadixCiphertext};
use crate::integer::server_key::CheckError;
use crate::integer::ServerKey;
@@ -92,17 +92,12 @@ impl ServerKey {
// The only case where these msb could become 0 after the addition
// is if scalar == T::ZERO (=> !T::ZERO == T::MAX => T::MAX + 1 == overflow),
// but this case has been handled earlier.
let padding_bit = 1u32; // To handle when bits is not a multiple of T::BITS
// All bits of message set to one
let pad_block = (1 << bits_in_message as u8) - 1;
let decomposer = BlockDecomposer::with_padding_bit(
neg_scalar,
bits_in_message,
Scalar::cast_from(padding_bit),
)
.iter_as::<u8>()
.chain(std::iter::repeat(pad_block));
let decomposer =
BlockDecomposer::with_padding_bit(neg_scalar, bits_in_message, PaddingBitValue::One)
.iter_as::<u8>()
.chain(std::iter::repeat(pad_block));
Some(decomposer)
}

View File

@@ -65,7 +65,7 @@ impl ServerKey {
result
.blocks_mut()
.par_iter_mut()
.filter(|b| b.noise_level > NoiseLevel::NOMINAL)
.filter(|b| b.noise_level() > NoiseLevel::NOMINAL)
.for_each(|block| self.key.message_extract_assign(block));
return result;
}
@@ -81,7 +81,7 @@ impl ServerKey {
ct.blocks().iter().all(|block| self
.key
.max_noise_level
.validate(block.noise_level + NoiseLevel::NOMINAL)
.validate(block.noise_level() + NoiseLevel::NOMINAL)
.is_ok()),
"Blocks of ciphertext to be shifted has a noise level too high"
);
@@ -152,7 +152,7 @@ impl ServerKey {
assert!(current_blocks.iter().all(|block| {
self.key
.max_noise_level
.validate(block.noise_level + shift_bit.noise_level())
.validate(block.noise_level() + shift_bit.noise_level())
.is_ok()
}));

View File

@@ -240,7 +240,7 @@ impl ServerKey {
s.spawn(|_| {
to_be_cleaned
.par_iter_mut()
.filter(|block| block.noise_level > NoiseLevel::NOMINAL)
.filter(|block| block.noise_level() > NoiseLevel::NOMINAL)
.for_each(|block| self.key.message_extract_assign(block));
});
}

View File

@@ -169,7 +169,7 @@ impl ServerKey {
if !ct1.block_carries_are_empty() {
self.full_propagate_parallelized(ct1);
}
if ct2.noise_level != NoiseLevel::NOMINAL || !ct2.carry_is_empty() {
if ct2.noise_level() != NoiseLevel::NOMINAL || !ct2.carry_is_empty() {
self.key.message_extract_assign(ct2);
}

View File

@@ -447,15 +447,15 @@ where
let encrypted_result = executor.execute((&ct, &shift));
for (i, b) in encrypted_result.blocks.iter().enumerate() {
if b.noise_level > NoiseLevel::NOMINAL {
println!("{i}: {:?}", b.noise_level);
if b.noise_level() > NoiseLevel::NOMINAL {
println!("{i}: {:?}", b.noise_level());
}
}
assert!(
encrypted_result
.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
"Expected all blocks to have at most NOMINAL noise level"
);
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -472,7 +472,7 @@ where
encrypted_result
.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
"Expected all blocks to have at most NOMINAL noise level"
);
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -530,7 +530,7 @@ where
encrypted_result
.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
"Expected all blocks to have at most NOMINAL noise level"
);
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -546,7 +546,7 @@ where
encrypted_result
.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
"Expected all blocks to have at most NOMINAL noise level"
);
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -606,7 +606,7 @@ where
encrypted_result
.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
"Expected all blocks to have at most NOMINAL noise level"
);
let expected = rotate_left_helper(clear, clear_shift, nb_bits);
@@ -622,7 +622,7 @@ where
encrypted_result
.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
"Expected all blocks to have at most NOMINAL noise level"
);
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -677,7 +677,7 @@ where
encrypted_result
.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
"Expected all blocks to have at most NOMINAL noise level"
);
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -694,7 +694,7 @@ where
encrypted_result
.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
"Expected all blocks to have at most NOMINAL noise level"
);
let decrypted_result: u64 = cks.decrypt_radix(&encrypted_result);
@@ -2421,7 +2421,7 @@ where
assert!(res
.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL));
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL));
assert_eq!(res, tmp);
clear = clear.wrapping_mul(clear2.wrapping_mul(multiplier)) % modulus;
@@ -2821,7 +2821,7 @@ where
assert!(
ct.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
"Invalid noise_level after propagation"
);
@@ -2886,7 +2886,7 @@ where
assert!(
ct.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
"Invalid noise_level after propagation"
);
@@ -2968,7 +2968,7 @@ where
assert!(
ct.blocks
.iter()
.all(|b| b.noise_level <= NoiseLevel::NOMINAL),
.all(|b| b.noise_level() <= NoiseLevel::NOMINAL),
"Invalid noise_level after propagation"
);

View File

@@ -574,7 +574,7 @@ pub(crate) fn random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -624,7 +624,7 @@ pub(crate) fn random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -665,7 +665,7 @@ pub(crate) fn random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -707,12 +707,12 @@ pub(crate) fn random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
assert!(
overflow.0.noise_level <= NoiseLevel::NOMINAL,
overflow.0.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on overflow for op {fn_name}",
);
// Determinism check
@@ -765,12 +765,12 @@ pub(crate) fn random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
assert!(
overflow.0.noise_level <= NoiseLevel::NOMINAL,
overflow.0.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on overflow for op {fn_name}",
);
// Determinism check
@@ -815,7 +815,7 @@ pub(crate) fn random_op_sequence_test<P>(
let res = comparison_op_executor.execute((&left_vec[i], &right_vec[i]));
assert!(
res.0.noise_level <= NoiseLevel::NOMINAL,
res.0.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name}",
);
// Determinism check
@@ -852,7 +852,7 @@ pub(crate) fn random_op_sequence_test<P>(
let res = scalar_comparison_op_executor.execute((&left_vec[i], clear_right_vec[i]));
assert!(
res.0.noise_level <= NoiseLevel::NOMINAL,
res.0.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name}",
);
// Determinism check
@@ -895,7 +895,7 @@ pub(crate) fn random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -942,13 +942,13 @@ pub(crate) fn random_op_sequence_test<P>(
);
res_q.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
res_r.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -1005,13 +1005,13 @@ pub(crate) fn random_op_sequence_test<P>(
);
res_q.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
res_r.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -1073,7 +1073,7 @@ pub(crate) fn random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});

View File

@@ -666,7 +666,7 @@ pub(crate) fn signed_random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -716,7 +716,7 @@ pub(crate) fn signed_random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -757,7 +757,7 @@ pub(crate) fn signed_random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -799,12 +799,12 @@ pub(crate) fn signed_random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
assert!(
overflow.0.noise_level <= NoiseLevel::NOMINAL,
overflow.0.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on overflow for op {fn_name}",
);
// Determinism check
@@ -857,12 +857,12 @@ pub(crate) fn signed_random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
assert!(
overflow.0.noise_level <= NoiseLevel::NOMINAL,
overflow.0.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on overflow for op {fn_name}",
);
// Determinism check
@@ -907,7 +907,7 @@ pub(crate) fn signed_random_op_sequence_test<P>(
let res = comparison_op_executor.execute((&left_vec[i], &right_vec[i]));
assert!(
res.0.noise_level <= NoiseLevel::NOMINAL,
res.0.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name}",
);
// Determinism check
@@ -944,7 +944,7 @@ pub(crate) fn signed_random_op_sequence_test<P>(
let res = scalar_comparison_op_executor.execute((&left_vec[i], clear_right_vec[i]));
assert!(
res.0.noise_level <= NoiseLevel::NOMINAL,
res.0.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name}",
);
// Determinism check
@@ -987,7 +987,7 @@ pub(crate) fn signed_random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -1034,13 +1034,13 @@ pub(crate) fn signed_random_op_sequence_test<P>(
);
res_q.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
res_r.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -1097,13 +1097,13 @@ pub(crate) fn signed_random_op_sequence_test<P>(
);
res_q.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
res_r.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -1165,7 +1165,7 @@ pub(crate) fn signed_random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -1208,7 +1208,7 @@ pub(crate) fn signed_random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});
@@ -1251,7 +1251,7 @@ pub(crate) fn signed_random_op_sequence_test<P>(
);
res.blocks.iter().enumerate().for_each(|(k, b)| {
assert!(
b.noise_level <= NoiseLevel::NOMINAL,
b.noise_level() <= NoiseLevel::NOMINAL,
"Noise level greater than nominal value on op {fn_name} for block {k}",
)
});

View File

@@ -295,6 +295,10 @@ where
expected overflow flag {expected_overflowed}, got {decrypted_overflowed}"
);
assert_eq!(encrypted_overflow.0.degree.get(), 1);
#[cfg(feature = "gpu")]
assert_eq!(encrypted_overflow.0.noise_level(), NoiseLevel::NOMINAL);
#[cfg(not(feature = "gpu"))]
assert_eq!(encrypted_overflow.0.noise_level(), NoiseLevel::ZERO);
}

View File

@@ -224,6 +224,10 @@ where
expected overflow flag {expected_overflowed}, got {decrypted_overflowed}"
);
assert_eq!(encrypted_overflow.0.degree.get(), 1);
#[cfg(feature = "gpu")]
assert_eq!(encrypted_overflow.0.noise_level(), NoiseLevel::NOMINAL);
#[cfg(not(feature = "gpu"))]
assert_eq!(encrypted_overflow.0.noise_level(), NoiseLevel::ZERO);
}

View File

@@ -251,6 +251,10 @@ where
expected overflow flag {expected_overflowed}, got {decrypted_overflowed}"
);
assert_eq!(encrypted_overflow.0.degree.get(), 1);
#[cfg(feature = "gpu")]
assert_eq!(encrypted_overflow.0.noise_level(), NoiseLevel::NOMINAL);
#[cfg(not(feature = "gpu"))]
assert_eq!(encrypted_overflow.0.noise_level(), NoiseLevel::ZERO);
}
}

View File

@@ -248,7 +248,7 @@ fn panic_if_any_block_info_exceeds_max_degree_or_noise(
first_block.degree
);
assert!(
max_noise_level.validate(first_block.noise_level).is_ok(),
max_noise_level.validate(first_block.noise_level()).is_ok(),
"Block at index 0 has a noise level {:?} that exceeds max noise level ({max_noise_level:?})",
first_block.degree
);
@@ -260,7 +260,7 @@ fn panic_if_any_block_info_exceeds_max_degree_or_noise(
block.degree
);
assert!(
max_noise_level.validate(block.noise_level).is_ok(),
max_noise_level.validate(block.noise_level()).is_ok(),
"Block at index {i} has a noise level {:?} that exceeds max noise level ({max_noise_level:?})",
block.degree
);
@@ -283,10 +283,10 @@ where
for (i, block) in ct.blocks.iter().enumerate() {
assert_eq!(
block.noise_level,
block.noise_level(),
NoiseLevel::NOMINAL,
"Block at index {i} / {num_blocks} has a non nominal noise level: {:?}",
block.noise_level
block.noise_level()
);
assert!(
@@ -321,10 +321,10 @@ where
continue;
}
assert_eq!(
block.noise_level,
block.noise_level(),
NoiseLevel::NOMINAL,
"Block at index {i} has a non nominal noise level: {:?}",
block.noise_level
block.noise_level()
);
assert!(
@@ -387,9 +387,10 @@ impl ExpectedNoiseLevels {
.enumerate()
{
assert_eq!(
block.noise_level, expected_noise,
block.noise_level(),
expected_noise,
"Block at index {i} has noise level {:?}, but {expected_noise:?} was expected",
block.noise_level
block.noise_level()
);
}
}

View File

@@ -251,7 +251,7 @@ impl ExpectedNoiseLevels {
lhs.blocks
.iter()
.zip(rhs.blocks.iter())
.map(|(a, b)| a.noise_level + b.noise_level),
.map(|(a, b)| a.noise_level() + b.noise_level()),
);
self
}

View File

@@ -171,7 +171,7 @@ impl ExpectedNoiseLevels {
lhs.blocks
.iter()
.zip(rhs.blocks.iter())
.map(|(a, b)| a.noise_level + b.noise_level),
.map(|(a, b)| a.noise_level() + b.noise_level()),
);
self
}

View File

@@ -397,7 +397,7 @@ where
expected_degrees.panic_if_any_is_not_equal(&result);
expected_noise_level.panic_if_any_is_not_equal(&result);
assert_eq!(is_ok.0.degree.get(), 0);
assert_eq!(is_ok.0.noise_level.get(), 0);
assert_eq!(is_ok.0.noise_level().get(), 0);
assert_eq!(cks.decrypt::<u64>(&result), 0);
assert!(!cks.decrypt_bool(&is_ok));
@@ -456,7 +456,7 @@ where
panic_if_any_block_is_not_clean_or_trivial(&result, &cks);
assert_eq!(is_ok.0.degree, Degree::new(1));
assert_eq!(is_ok.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_ok.0.noise_level(), NoiseLevel::NOMINAL);
let result = cks.decrypt::<u64>(&result);
let is_ok = cks.decrypt_bool(&is_ok);
@@ -531,7 +531,7 @@ where
panic_if_any_block_is_not_clean_or_trivial(&result, &cks);
assert_eq!(is_ok.0.degree, Degree::new(1));
assert_eq!(is_ok.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_ok.0.noise_level(), NoiseLevel::NOMINAL);
let result = cks.decrypt::<u64>(&result);
let is_ok = cks.decrypt_bool(&is_ok);
@@ -743,7 +743,7 @@ where
assert!(result.is_trivial());
assert_eq!(result.0.degree, Degree::new(0));
assert_eq!(result.0.noise_level, NoiseLevel::ZERO);
assert_eq!(result.0.noise_level(), NoiseLevel::ZERO);
assert!(!cks.decrypt_bool(&result));
}
}
@@ -776,7 +776,7 @@ where
// If the mapping only contains numbers (output) that needs less than NB_CTXT
// blocks, some trivial zeros will be appended
assert_eq!(result.0.degree, Degree::new(1));
assert_eq!(result.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(result.0.noise_level(), NoiseLevel::NOMINAL);
let result = cks.decrypt_bool(&result);
@@ -844,7 +844,7 @@ where
// If the mapping only contains numbers (output) that needs less than NB_CTXT
// blocks, some trivial zeros will be appended
assert_eq!(result.0.degree, Degree::new(1));
assert_eq!(result.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(result.0.noise_level(), NoiseLevel::NOMINAL);
let result = cks.decrypt_bool(&result);
@@ -877,7 +877,7 @@ where
assert!(result.is_trivial());
assert_eq!(result.0.degree, Degree::new(0));
assert_eq!(result.0.noise_level, NoiseLevel::ZERO);
assert_eq!(result.0.noise_level(), NoiseLevel::ZERO);
assert!(!cks.decrypt_bool(&result));
}
@@ -908,7 +908,7 @@ where
// If the mapping only contains numbers (output) that needs less than NB_CTXT
// blocks, some trivial zeros will be appended
assert_eq!(result.0.degree, Degree::new(1));
assert_eq!(result.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(result.0.noise_level(), NoiseLevel::NOMINAL);
let result = cks.decrypt_bool(&result);
assert_eq!(result, expected_result);
@@ -972,7 +972,7 @@ where
// If the mapping only contains numbers (output) that needs less than NB_CTXT
// blocks, some trivial zeros will be appended
assert_eq!(result.0.degree, Degree::new(1));
assert_eq!(result.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(result.0.noise_level(), NoiseLevel::NOMINAL);
let result = cks.decrypt_bool(&result);
assert_eq!(result, expected_result);
@@ -1004,7 +1004,7 @@ where
assert!(result.is_trivial());
assert_eq!(result.0.degree, Degree::new(0));
assert_eq!(result.0.noise_level, NoiseLevel::ZERO);
assert_eq!(result.0.noise_level(), NoiseLevel::ZERO);
assert!(!cks.decrypt_bool(&result));
}
@@ -1029,7 +1029,7 @@ where
// If the mapping only contains numbers (output) that needs less than NB_CTXT
// blocks, some trivial zeros will be appended
assert_eq!(result.0.degree, Degree::new(1));
assert_eq!(result.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(result.0.noise_level(), NoiseLevel::NOMINAL);
let result = cks.decrypt_bool(&result);
assert_eq!(result, expected_result);
@@ -1087,7 +1087,7 @@ where
// If the mapping only contains numbers (output) that needs less than NB_CTXT
// blocks, some trivial zeros will be appended
assert_eq!(result.0.degree, Degree::new(1));
assert_eq!(result.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(result.0.noise_level(), NoiseLevel::NOMINAL);
let result = cks.decrypt_bool(&result);
assert_eq!(result, expected_result);
@@ -1122,7 +1122,7 @@ where
assert!(is_in.is_trivial());
assert_eq!(is_in.0.degree, Degree::new(0));
assert_eq!(is_in.0.noise_level, NoiseLevel::ZERO);
assert_eq!(is_in.0.noise_level(), NoiseLevel::ZERO);
assert!(!cks.decrypt_bool(&is_in));
}
@@ -1152,7 +1152,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);
@@ -1217,7 +1217,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);
@@ -1252,7 +1252,7 @@ where
assert!(is_in.is_trivial());
assert_eq!(is_in.0.degree, Degree::new(0));
assert_eq!(is_in.0.noise_level, NoiseLevel::ZERO);
assert_eq!(is_in.0.noise_level(), NoiseLevel::ZERO);
assert!(!cks.decrypt_bool(&is_in));
}
@@ -1282,7 +1282,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);
@@ -1346,7 +1346,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);
@@ -1384,7 +1384,7 @@ where
assert!(is_in.is_trivial());
assert_eq!(is_in.0.degree, Degree::new(0));
assert_eq!(is_in.0.noise_level, NoiseLevel::ZERO);
assert_eq!(is_in.0.noise_level(), NoiseLevel::ZERO);
assert!(!cks.decrypt_bool(&is_in));
}
@@ -1420,7 +1420,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);
@@ -1495,7 +1495,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);
@@ -1529,7 +1529,7 @@ where
assert!(is_in.is_trivial());
assert_eq!(is_in.0.degree, Degree::new(0));
assert_eq!(is_in.0.noise_level, NoiseLevel::ZERO);
assert_eq!(is_in.0.noise_level(), NoiseLevel::ZERO);
assert!(!cks.decrypt_bool(&is_in));
}
@@ -1564,7 +1564,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);
@@ -1630,7 +1630,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);
@@ -1668,7 +1668,7 @@ where
assert!(is_in.is_trivial());
assert_eq!(is_in.0.degree, Degree::new(0));
assert_eq!(is_in.0.noise_level, NoiseLevel::ZERO);
assert_eq!(is_in.0.noise_level(), NoiseLevel::ZERO);
assert!(!cks.decrypt_bool(&is_in));
}
@@ -1709,7 +1709,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);
@@ -1793,7 +1793,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);
@@ -1827,7 +1827,7 @@ where
assert!(is_in.is_trivial());
assert_eq!(is_in.0.degree, Degree::new(0));
assert_eq!(is_in.0.noise_level, NoiseLevel::ZERO);
assert_eq!(is_in.0.noise_level(), NoiseLevel::ZERO);
assert!(!cks.decrypt_bool(&is_in));
}
@@ -1867,7 +1867,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);
@@ -1930,7 +1930,7 @@ where
assert_eq!(index, expected_index as u16);
assert_eq!(is_in.0.degree, Degree::new(1));
assert_eq!(is_in.0.noise_level, NoiseLevel::NOMINAL);
assert_eq!(is_in.0.noise_level(), NoiseLevel::NOMINAL);
let is_in = cks.decrypt_bool(&is_in);
assert_eq!(is_in, expected_is_in);

View File

@@ -128,14 +128,14 @@ impl CompactCiphertextList {
lwe_view.as_ref().to_vec(),
self.ct_list.ciphertext_modulus(),
);
let shortint_ct_to_cast = Ciphertext {
ct: lwe_to_cast,
degree: self.degree,
message_modulus: self.message_modulus,
carry_modulus: self.carry_modulus,
let shortint_ct_to_cast = Ciphertext::new(
lwe_to_cast,
self.degree,
NoiseLevel::UNKNOWN,
self.message_modulus,
self.carry_modulus,
pbs_order,
noise_level: NoiseLevel::UNKNOWN,
};
);
casting_key
.cast_and_apply_functions(&shortint_ct_to_cast, functions.as_deref())
@@ -151,14 +151,14 @@ impl CompactCiphertextList {
lwe_view.as_ref().to_vec(),
self.ct_list.ciphertext_modulus(),
);
Ciphertext {
Ciphertext::new(
ct,
degree: self.degree,
message_modulus: self.message_modulus,
carry_modulus: self.carry_modulus,
self.degree,
NoiseLevel::NOMINAL,
self.message_modulus,
self.carry_modulus,
pbs_order,
noise_level: NoiseLevel::NOMINAL,
}
)
})
.collect::<Vec<_>>();

View File

@@ -56,14 +56,14 @@ impl CompressedCiphertext {
noise_level,
} = self;
Ciphertext {
ct: ct.decompress_into_lwe_ciphertext(),
degree: *degree,
message_modulus: *message_modulus,
carry_modulus: *carry_modulus,
pbs_order: *pbs_order,
noise_level: *noise_level,
}
Ciphertext::new(
ct.decompress_into_lwe_ciphertext(),
*degree,
*noise_level,
*message_modulus,
*carry_modulus,
*pbs_order,
)
}
/// Deconstruct a [`CompressedCiphertext`] into its constituents.

View File

@@ -17,7 +17,9 @@ use tfhe_versionable::Versionize;
pub struct Ciphertext {
pub ct: LweCiphertextOwned<u64>,
pub degree: Degree,
pub(crate) noise_level: NoiseLevel,
// For correctness reasons this field MUST remain private, this forces the use of the accessor
// which has noise checks enabled on demand
noise_level: NoiseLevel,
pub message_modulus: MessageModulus,
pub carry_modulus: CarryModulus,
pub pbs_order: PBSOrder,

View File

@@ -170,14 +170,14 @@ impl ServerKey {
}
};
Ciphertext {
Ciphertext::new(
ct,
degree: Degree::new(p - 1),
noise_level: NoiseLevel::NOMINAL,
message_modulus: self.message_modulus,
carry_modulus: self.carry_modulus,
pbs_order: self.pbs_order,
}
Degree::new(p - 1),
NoiseLevel::NOMINAL,
self.message_modulus,
self.carry_modulus,
self.pbs_order,
)
}
}

View File

@@ -35,7 +35,7 @@ where
assert_eq!(clear, dec);
assert_eq!(ctxt.degree, decompressed_ct.degree);
assert_eq!(decompressed_ct.noise_level, NoiseLevel::NOMINAL);
assert_eq!(decompressed_ct.noise_level(), NoiseLevel::NOMINAL);
assert_eq!(ctxt.message_modulus, decompressed_ct.message_modulus);
assert_eq!(ctxt.carry_modulus, decompressed_ct.carry_modulus);
assert_eq!(ctxt.pbs_order, decompressed_ct.pbs_order);
@@ -50,7 +50,7 @@ where
assert_eq!((clear + 1) % modulus, dec % modulus);
assert_eq!(decompressed_ct.noise_level, NoiseLevel::NOMINAL);
assert_eq!(decompressed_ct.noise_level(), NoiseLevel::NOMINAL);
assert_eq!(ctxt.message_modulus, decompressed_ct.message_modulus);
assert_eq!(ctxt.carry_modulus, decompressed_ct.carry_modulus);
assert_eq!(ctxt.pbs_order, decompressed_ct.pbs_order);

View File

@@ -1 +1 @@
nightly-2025-02-19
nightly-2025-02-20

View File

@@ -9,11 +9,11 @@ publish = false
crate-type = ["cdylib"]
[dependencies]
clippy_utils = { git = "https://github.com/rust-lang/rust-clippy", rev = "ff4a26d442bead94a4c96fb1de967374bc4fbd8e" }
dylint_linting = "3.2.1"
clippy_utils = { git = "https://github.com/rust-lang/rust-clippy", rev = "238edf273d195c8e472851ebd60571f77f978ac8" }
dylint_linting = "4.0.0"
[dev-dependencies]
dylint_testing = "3.2.1"
dylint_testing = "4.0.0"
serde = { version = "1.0", features = ["derive"] }
tfhe-versionable = "0.4.0"
@@ -21,5 +21,5 @@ tfhe-versionable = "0.4.0"
rustc_private = true
[[example]]
name = "ui"
path = "ui/main.rs"
name = "ui"
path = "ui/main.rs"

View File

@@ -1,3 +1,4 @@
[toolchain]
channel = "nightly-2024-11-28"
channel = "nightly-2025-02-20"
components = ["llvm-tools-preview", "rustc-dev"]
profile = "default"

View File

@@ -23,7 +23,8 @@ impl SerializeWithoutVersionizeInner {
self.versionize_trait
.get_or_init(|| {
let versionize_trait = cx.tcx.all_traits().find(|def_id| {
cx.match_def_path(*def_id, symbols_list_from_str(&VERSIONIZE_TRAIT).as_slice())
let path = cx.get_def_path(*def_id);
path == symbols_list_from_str(&VERSIONIZE_TRAIT)
});
versionize_trait
@@ -85,8 +86,8 @@ impl<'tcx> LateLintPass<'tcx> for SerializeWithoutVersionize {
// Check if the implemented trait is `Serialize`
if let Some(def_id) = trait_ref.trait_def_id() {
if cx.match_def_path(def_id, symbols_list_from_str(&SERIALIZE_TRAIT).as_slice())
{
let path = cx.get_def_path(def_id);
if path == symbols_list_from_str(&SERIALIZE_TRAIT) {
// Try to find an implementation of versionize for this type
let mut found_impl = false;
if let Some(versionize_trait) = self.0.versionize_trait(cx) {

View File

@@ -1,5 +1,6 @@
use rustc_ast::tokenstream::TokenTree;
use rustc_hir::def_id::DefId;
use rustc_hir::AttrArgs;
use rustc_lint::LateContext;
use rustc_middle::ty::{Ty, TyKind};
use rustc_span::Symbol;
@@ -11,16 +12,19 @@ pub fn symbols_list_from_str(list: &[&str]) -> Vec<Symbol> {
/// Checks if the lint is allowed for the item represented by [`DefId`].
/// This shouldn't be necessary since the lints are declared with the
/// `declare_tool_lint` macro but for a mysterious reason this does not
/// `impl_late_lint` macro but for a mysterious reason this does not
/// work automatically.
pub fn is_allowed_lint(cx: &LateContext<'_>, target: DefId, lint_name: &str) -> bool {
for attr in cx.tcx.get_attrs(target, Symbol::intern("allow")) {
let tokens = attr.get_normal_item().args.inner_tokens();
let mut trees = tokens.trees();
if let AttrArgs::Delimited(args) = &attr.get_normal_item().args {
let len = args.tokens.len();
if let Some(TokenTree::Token(tool_token, _)) = trees.next() {
if tool_token.is_ident_named(Symbol::intern(lint_name)) {
return true;
for id in 0..len {
if let Some(TokenTree::Token(tool_token, _)) = args.tokens.get(id) {
if tool_token.is_ident_named(Symbol::intern(lint_name)) {
return true;
}
}
}
}
}