Skip to content

fix: guard point-at-infinity in projective→affine conversion - #17

Merged
gaxiom merged 3 commits into
mainfrom
grigorii/int-7614-sppark-follow-ups
Aug 3, 2026
Merged

fix: guard point-at-infinity in projective→affine conversion #17
gaxiom merged 3 commits into
mainfrom
grigorii/int-7614-sppark-follow-ups

Conversation

@gaxiom

@gaxiom gaxiom commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Closes INT-7614

Two latent, sppark-inherited defects in the CUDA curve headers, fixed with the smallest correct change :

  • operator affine_t() on jacobian_t and xyzz_t divided by Z/ZZZ unconditionally — a divide-by-zero at the point at infinity (Z==0). It now returns the (0,0) affine-infinity encoding that affine_t::is_inf() already recognizes (verified against both headers' is_inf() and the pinned halo2curves identity()), instead of dividing.
  • xyzz_t.hpp now compiles standalone (added the missing forward declaration of jacobian_t).

gaxiom added 2 commits July 31, 2026 16:37
jacobian_t::affine_t::operator= and xyzz_t::affine_t::operator= computed the
affine coordinates by dividing by Z (resp. ZZZ) unconditionally. For a point
at infinity (Z==0 / ZZZ==0) that is a field division by zero. Guard the
zero-denominator case and return the affine infinity encoding (0,0) that the
matching is_inf() already recognizes, instead of dividing.

The nonzero path is unchanged (the guard is false for every affine point with
a nonzero denominator), so this is behavior-preserving for all finite points.
xyzz_t defines conversion operators returning jacobian_t<field_t> but neither
included nor forward-declared jacobian_t, so including xyzz_t.hpp on its own
failed to compile ("jacobian_t is not a template"). Add a forward declaration
of the jacobian_t class template. A declaration suffices: the conversion-
operator bodies that construct a jacobian_t are only instantiated when used,
and every current consumer includes jacobian_t.hpp first.
@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown

Code review

No issues found. Checked for bugs and CLAUDE.md compliance.

Last reviewed head: 4cd11ede1e224f590040ce6be295402b95302c6f

Advances the openvm deps from the temporary chore/stark-backend-main-track
branch (97f24c2) to openvm main (9e523422), and the openvm-org/stark-backend
git deps to main (cf013ae8) — pulling in the mont_t inverse carry fix (#393)
that the BN254 field path relies on.

openvm main already tracks stark-backend main and drops the removed
INTERACTION_MEMORY_OVERHEAD symbol (#385), so the two openvm-org deps unify
consistently. openvm's Sdk::verify_evm_halo2_proof/prove_for_evm now returns
a fallible EvmProof, so the benchmark propagates it with ?.

Removes the now-obsolete main-track workaround comment (its stated condition
'once the openvm change lands' is met).
@gaxiom
gaxiom force-pushed the grigorii/int-7614-sppark-follow-ups branch from 7490204 to 4cd11ed Compare July 31, 2026 20:19
@stephenh-axiom-xyz stephenh-axiom-xyz added the benchmark Runs the e2e benchmark label Aug 3, 2026
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
group total_proof_time_ms populate_inputs_time_ms halo2_wrapper_k halo2_verifier_k graph_witness_gen_time_ms collect_pvs_time_ms
halo2_outer 2,779 1 23 146 0
halo2_wrapper 1,455 22
group phase halo2_section_time_ms
halo2_outer create_proof 2,630
halo2_outer create_proof.commit_vanishing_random_poly 0
halo2_outer create_proof.commit_vanishing_random_poly.vanishing.commit 0
halo2_outer create_proof.gpu_pk_from_host 0
halo2_outer create_proof.phase1 760
halo2_outer create_proof.phase1.convert_raw_advice 759
halo2_outer create_proof.phase1.convert_raw_advice.add_blinding_factors 0
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice 642
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread 627
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_ifft 0
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_ifft.domain.lagrange_to_coeff_many_device_inputs 0
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_ifft.domain.lagrange_to_coeff_many_device_inputs.ifft_many_device_to_device 0
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_msms 542
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_msms.kzg.g_lagrange_device_first_touch 0
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_msms.multiexp_device_scalars_device_bases 48
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.batch_normalize_commitments 0
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.instance_ifft 20
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.instance_ifft.domain.lagrange_to_coeff_many_device_inputs 0
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.instance_ifft.domain.lagrange_to_coeff_many_device_inputs.ifft_many_device_to_device 0
halo2_outer create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.instance_to_device 64
halo2_outer create_proof.phase1.convert_raw_advice.transcript_write_squeeze 0
halo2_outer create_proof.phase2 100
halo2_outer create_proof.phase2.column_pool.upload 0
halo2_outer create_proof.phase2.lookup_commit_permuted 100
halo2_outer create_proof.phase2.lookup_commit_permuted.compress_expressions_in_place_device 0
halo2_outer create_proof.phase2.lookup_commit_permuted.kzg.g_lagrange_device_first_touch 0
halo2_outer create_proof.phase2.lookup_commit_permuted.multiexp_device_scalars_device_bases 13
halo2_outer create_proof.phase2.lookup_commit_permuted.permute_expression_pair 0
halo2_outer create_proof.phase3 356
halo2_outer create_proof.phase3.phase3a 282
halo2_outer create_proof.phase3.phase3a.permutation_commit 282
halo2_outer create_proof.phase3.phase3a.permutation_commit.domain.lagrange_to_coeff_device_input 0
halo2_outer create_proof.phase3.phase3a.permutation_commit.domain.lagrange_to_coeff_device_input.ifft_many_device_to_device 0
halo2_outer create_proof.phase3.phase3a.permutation_commit.grand_product_scan 0
halo2_outer create_proof.phase3.phase3a.permutation_commit.grand_product_scan.grand_product_device_inputs 0
halo2_outer create_proof.phase3.phase3a.permutation_commit.kzg.g_lagrange_device_first_touch 0
halo2_outer create_proof.phase3.phase3a.permutation_commit.multiexp_device_scalars_device_bases 48
halo2_outer create_proof.phase3.phase3a.permutation_commit.permutation_product_device_inputs 0
halo2_outer create_proof.phase3.phase3b 73
halo2_outer create_proof.phase3.phase3b.lookup_commit_product 73
halo2_outer create_proof.phase3.phase3b.lookup_commit_product.domain.lagrange_to_coeff_device_input 0
halo2_outer create_proof.phase3.phase3b.lookup_commit_product.domain.lagrange_to_coeff_device_input.ifft_many_device_to_device 0
halo2_outer create_proof.phase3.phase3b.lookup_commit_product.grand_product_device_inputs 0
halo2_outer create_proof.phase3.phase3b.lookup_commit_product.kzg.g_lagrange_device_first_touch 0
halo2_outer create_proof.phase3.phase3b.lookup_commit_product.lookup_product_device 0
halo2_outer create_proof.phase3.phase3b.lookup_commit_product.multiexp_device_scalars_device_bases 73
halo2_outer create_proof.phase4a 928
halo2_outer create_proof.phase4a.evaluate_h 928
halo2_outer create_proof.phase4a.evaluate_h.coeff_to_extended_part 0
halo2_outer create_proof.phase4a.evaluate_h.coeff_to_extended_part.domain.coeff_to_extended_part_many_device_device_inputs 0
halo2_outer create_proof.phase4a.evaluate_h.coeff_to_extended_part.domain.coeff_to_extended_part_many_device_device_inputs.cosetfft_many_device_to_device 0
halo2_outer create_proof.phase4a.evaluate_h.column_pool.upload 0
halo2_outer create_proof.phase4a.evaluate_h.custom_gates 46
halo2_outer create_proof.phase4a.evaluate_h.extended_from_lagrange_vec_device 0
halo2_outer create_proof.phase4a.evaluate_h.lookups 154
halo2_outer create_proof.phase4a.evaluate_h.lookups.gpu_quotient_lookups 110
halo2_outer create_proof.phase4a.evaluate_h.lookups.gpu_quotient_lookups.quotient_lookups_gpu.calculate_constraints_full_device 110
halo2_outer create_proof.phase4a.evaluate_h.lookups.gpu_quotient_lookups.quotient_lookups_gpu.calculate_constraints_full_device.fft_normal 8
halo2_outer create_proof.phase4a.evaluate_h.lookups.gpu_quotient_lookups.quotient_lookups_gpu.calculate_constraints_full_device.quotient_lookups 0
halo2_outer create_proof.phase4a.evaluate_h.lookups.table_values 43
halo2_outer create_proof.phase4a.evaluate_h.lookups.table_values.compress_expressions_with_runtime_constants_device 43
halo2_outer create_proof.phase4a.evaluate_h.lookups.take_values_device_for_assembly 0
halo2_outer create_proof.phase4a.evaluate_h.lookups.take_values_device_for_assembly.quotient_lookups_gpu.take_values_device 0
halo2_outer create_proof.phase4a.evaluate_h.permutation_quotient_poly_part 0
halo2_outer create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations 0
halo2_outer create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations.permutation_coset_fft 0
halo2_outer create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations.permutation_coset_fft.domain.coeff_to_extended_part_many_device_device_inputs 0
halo2_outer create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations.permutation_coset_fft.domain.coeff_to_extended_part_many_device_device_inputs.cosetfft_many_device_to_device 0
halo2_outer create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations.quotient_lookups_gpu.add_permutation_constraints 0
halo2_outer create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations.quotient_lookups_gpu.add_permutation_constraints.quotient_permutation 0
halo2_outer create_proof.phase4a.evaluate_h.quotient_lookups_gpu.new_with_device_selectors 26
halo2_outer create_proof.phase4b 200
halo2_outer create_proof.phase4b.commit_vanishing_h_x 200
halo2_outer create_proof.phase4b.commit_vanishing_h_x.vanishing.construct 200
halo2_outer create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.domain.divide_by_vanishing_poly_device 0
halo2_outer create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.domain.divide_by_vanishing_poly_device.divide_by_vanishing_poly_device 0
halo2_outer create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.domain.extended_to_coeff_device 0
halo2_outer create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.domain.extended_to_coeff_device.distribute_powers_zeta_device 0
halo2_outer create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.domain.extended_to_coeff_device.fft_normal_device 0
halo2_outer create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.kzg.g_device_first_touch 0
halo2_outer create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.multiexp_device_scalars_device_bases 50
halo2_outer create_proof.phase5 283
halo2_outer create_proof.phase5.batch_eval_polynomial_device 3
halo2_outer create_proof.phase5.batch_eval_polynomial_device.batch_eval_polynomial_device_out 0
halo2_outer create_proof.phase5.lagrange_to_coeff 0
halo2_outer create_proof.phase5.lagrange_to_coeff.domain.lagrange_to_coeff_device_input 0
halo2_outer create_proof.phase5.lagrange_to_coeff.domain.lagrange_to_coeff_device_input.ifft_many_device_to_device 0
halo2_outer create_proof.phase5.lookup.evaluate.eval_at_block 18
halo2_outer create_proof.phase5.lookup.evaluate.eval_at_block.batch_eval_polynomial_device 18
halo2_outer create_proof.phase5.lookup.evaluate.eval_at_block.batch_eval_polynomial_device.batch_eval_polynomial_device_out 0
halo2_outer create_proof.phase5.permutation.evaluate.eval_at_loop 6
halo2_outer create_proof.phase5.permutation.evaluate.eval_at_loop.batch_eval_polynomial_device 6
halo2_outer create_proof.phase5.permutation.evaluate.eval_at_loop.batch_eval_polynomial_device.batch_eval_polynomial_device_out 0
halo2_outer create_proof.phase5.permutation_pk.evaluate 10
halo2_outer create_proof.phase5.permutation_pk.evaluate.batch_eval_polynomial_device_out 0
halo2_outer create_proof.phase5.phase5_multiopen 234
halo2_outer create_proof.phase5.phase5_multiopen.shplonk 234
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.construct_intermediate_sets 25
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.construct_intermediate_sets.batch_eval_polynomial_device 25
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.construct_intermediate_sets.batch_eval_polynomial_device.batch_eval_polynomial_device_out 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.h_commit 139
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.h_commit.kzg.g_device_first_touch 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.h_commit.multiexp_device_scalars_device_bases 139
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.h_x_device_reduce 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.poly_multiply_add_device 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.poly_scale_device_with_d_s_minus_one 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.quotient_contribution.rayon_worker 1
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.quotient_contribution.rayon_worker.kate_division_device_padded 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.quotient_contribution.rayon_worker.kate_division_device_with_d_root 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.quotient_contribution.rayon_worker.poly_sub_short_out_of_place_device 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.shplonk.final_l_x_kate_div 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.shplonk.final_l_x_kate_div.kate_division_device 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.shplonk.h_final_commit 65
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.shplonk.h_final_commit.kzg.g_device_first_touch 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.shplonk.h_final_commit.multiexp_device_scalars_device_bases 65
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.shplonk.l_x_device_reduce 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.shplonk.linearisation_contribution.rayon_worker 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.shplonk.linearisation_contribution.rayon_worker.poly_scale_device_with_d_s_minus_one 0
halo2_outer create_proof.phase5.phase5_multiopen.shplonk.shplonk.linearisation_contribution.rayon_worker.poly_sub_scalar_at_zero_device 0
halo2_outer create_proof.phase5.vanishing.evaluate 0
halo2_outer create_proof.phase5.vanishing.evaluate.device_fold 0
halo2_outer create_proof.phase5.vanishing.evaluate.device_fold.poly_scale_device_with_d_s_minus_one 0
halo2_wrapper create_proof 1,191
halo2_wrapper create_proof.batch_invert_witness 23
halo2_wrapper create_proof.batch_invert_witness.batch_invert_device 0
halo2_wrapper create_proof.batch_invert_witness.decode_assigned_into_denom_slice_device 23
halo2_wrapper create_proof.commit_vanishing_random_poly 0
halo2_wrapper create_proof.commit_vanishing_random_poly.vanishing.commit 0
halo2_wrapper create_proof.gpu_pk_from_host 0
halo2_wrapper create_proof.phase1 192
halo2_wrapper create_proof.phase1.convert_raw_advice 192
halo2_wrapper create_proof.phase1.convert_raw_advice.add_blinding_factors 0
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice 131
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread 124
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_ifft 20
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_ifft.domain.lagrange_to_coeff_many_device_inputs 20
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_ifft.domain.lagrange_to_coeff_many_device_inputs.ifft_many_device_to_device 20
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_msms 52
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_msms.kzg.g_lagrange_device_first_touch 0
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.advice_msms.multiexp_device_scalars_device_bases 52
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.batch_normalize_commitments 0
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.instance_ifft 30
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.instance_ifft.domain.lagrange_to_coeff_many_device_inputs 10
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.instance_ifft.domain.lagrange_to_coeff_many_device_inputs.ifft_many_device_to_device 10
halo2_wrapper create_proof.phase1.convert_raw_advice.ifft_msm_instance_advice.new_gpu_thread.instance_to_device 20
halo2_wrapper create_proof.phase1.convert_raw_advice.transcript_write_squeeze 0
halo2_wrapper create_proof.phase2 64
halo2_wrapper create_proof.phase2.column_pool.upload 0
halo2_wrapper create_proof.phase2.lookup_commit_permuted 64
halo2_wrapper create_proof.phase2.lookup_commit_permuted.compress_expressions_in_place_device 10
halo2_wrapper create_proof.phase2.lookup_commit_permuted.kzg.g_lagrange_device_first_touch 0
halo2_wrapper create_proof.phase2.lookup_commit_permuted.multiexp_device_scalars_device_bases 10
halo2_wrapper create_proof.phase2.lookup_commit_permuted.permute_expression_pair 10
halo2_wrapper create_proof.phase3 115
halo2_wrapper create_proof.phase3.phase3a 79
halo2_wrapper create_proof.phase3.phase3a.permutation_commit 79
halo2_wrapper create_proof.phase3.phase3a.permutation_commit.domain.lagrange_to_coeff_device_input 0
halo2_wrapper create_proof.phase3.phase3a.permutation_commit.domain.lagrange_to_coeff_device_input.ifft_many_device_to_device 0
halo2_wrapper create_proof.phase3.phase3a.permutation_commit.grand_product_scan 0
halo2_wrapper create_proof.phase3.phase3a.permutation_commit.grand_product_scan.grand_product_device_inputs 0
halo2_wrapper create_proof.phase3.phase3a.permutation_commit.kzg.g_lagrange_device_first_touch 0
halo2_wrapper create_proof.phase3.phase3a.permutation_commit.multiexp_device_scalars_device_bases 79
halo2_wrapper create_proof.phase3.phase3a.permutation_commit.permutation_product_device_inputs 0
halo2_wrapper create_proof.phase3.phase3b 35
halo2_wrapper create_proof.phase3.phase3b.lookup_commit_product 35
halo2_wrapper create_proof.phase3.phase3b.lookup_commit_product.domain.lagrange_to_coeff_device_input 0
halo2_wrapper create_proof.phase3.phase3b.lookup_commit_product.domain.lagrange_to_coeff_device_input.ifft_many_device_to_device 0
halo2_wrapper create_proof.phase3.phase3b.lookup_commit_product.grand_product_device_inputs 0
halo2_wrapper create_proof.phase3.phase3b.lookup_commit_product.kzg.g_lagrange_device_first_touch 0
halo2_wrapper create_proof.phase3.phase3b.lookup_commit_product.lookup_product_device 0
halo2_wrapper create_proof.phase3.phase3b.lookup_commit_product.multiexp_device_scalars_device_bases 35
halo2_wrapper create_proof.phase4a 261
halo2_wrapper create_proof.phase4a.evaluate_h 261
halo2_wrapper create_proof.phase4a.evaluate_h.coeff_to_extended_part 0
halo2_wrapper create_proof.phase4a.evaluate_h.coeff_to_extended_part.domain.coeff_to_extended_part_many_device_device_inputs 0
halo2_wrapper create_proof.phase4a.evaluate_h.coeff_to_extended_part.domain.coeff_to_extended_part_many_device_device_inputs.cosetfft_many_device_to_device 0
halo2_wrapper create_proof.phase4a.evaluate_h.column_pool.upload 0
halo2_wrapper create_proof.phase4a.evaluate_h.custom_gates 0
halo2_wrapper create_proof.phase4a.evaluate_h.extended_from_lagrange_vec_device 0
halo2_wrapper create_proof.phase4a.evaluate_h.lookups 64
halo2_wrapper create_proof.phase4a.evaluate_h.lookups.gpu_quotient_lookups 64
halo2_wrapper create_proof.phase4a.evaluate_h.lookups.gpu_quotient_lookups.quotient_lookups_gpu.calculate_constraints_full_device 64
halo2_wrapper create_proof.phase4a.evaluate_h.lookups.gpu_quotient_lookups.quotient_lookups_gpu.calculate_constraints_full_device.fft_normal 4
halo2_wrapper create_proof.phase4a.evaluate_h.lookups.gpu_quotient_lookups.quotient_lookups_gpu.calculate_constraints_full_device.quotient_lookups 0
halo2_wrapper create_proof.phase4a.evaluate_h.lookups.table_values 0
halo2_wrapper create_proof.phase4a.evaluate_h.lookups.table_values.compress_expressions_with_runtime_constants_device 0
halo2_wrapper create_proof.phase4a.evaluate_h.lookups.take_values_device_for_assembly 0
halo2_wrapper create_proof.phase4a.evaluate_h.lookups.take_values_device_for_assembly.quotient_lookups_gpu.take_values_device 0
halo2_wrapper create_proof.phase4a.evaluate_h.permutation_quotient_poly_part 0
halo2_wrapper create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations 0
halo2_wrapper create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations.permutation_coset_fft 0
halo2_wrapper create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations.permutation_coset_fft.domain.coeff_to_extended_part_many_device_device_inputs 0
halo2_wrapper create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations.permutation_coset_fft.domain.coeff_to_extended_part_many_device_device_inputs.cosetfft_many_device_to_device 0
halo2_wrapper create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations.quotient_lookups_gpu.add_permutation_constraints 0
halo2_wrapper create_proof.phase4a.evaluate_h.permutation_quotient_poly_part.permutations.quotient_lookups_gpu.add_permutation_constraints.quotient_permutation 0
halo2_wrapper create_proof.phase4a.evaluate_h.quotient_lookups_gpu.new_with_device_selectors 0
halo2_wrapper create_proof.phase4b 133
halo2_wrapper create_proof.phase4b.commit_vanishing_h_x 133
halo2_wrapper create_proof.phase4b.commit_vanishing_h_x.vanishing.construct 133
halo2_wrapper create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.domain.divide_by_vanishing_poly_device 0
halo2_wrapper create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.domain.divide_by_vanishing_poly_device.divide_by_vanishing_poly_device 0
halo2_wrapper create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.domain.extended_to_coeff_device 0
halo2_wrapper create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.domain.extended_to_coeff_device.distribute_powers_zeta_device 0
halo2_wrapper create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.domain.extended_to_coeff_device.fft_normal_device 0
halo2_wrapper create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.kzg.g_device_first_touch 0
halo2_wrapper create_proof.phase4b.commit_vanishing_h_x.vanishing.construct.multiexp_device_scalars_device_bases 27
halo2_wrapper create_proof.phase5 120
halo2_wrapper create_proof.phase5.batch_eval_polynomial_device 1
halo2_wrapper create_proof.phase5.batch_eval_polynomial_device.batch_eval_polynomial_device_out 0
halo2_wrapper create_proof.phase5.lagrange_to_coeff 0
halo2_wrapper create_proof.phase5.lagrange_to_coeff.domain.lagrange_to_coeff_device_input 0
halo2_wrapper create_proof.phase5.lagrange_to_coeff.domain.lagrange_to_coeff_device_input.ifft_many_device_to_device 0
halo2_wrapper create_proof.phase5.lookup.evaluate.eval_at_block 9
halo2_wrapper create_proof.phase5.lookup.evaluate.eval_at_block.batch_eval_polynomial_device 9
halo2_wrapper create_proof.phase5.lookup.evaluate.eval_at_block.batch_eval_polynomial_device.batch_eval_polynomial_device_out 0
halo2_wrapper create_proof.phase5.permutation.evaluate.eval_at_loop 0
halo2_wrapper create_proof.phase5.permutation.evaluate.eval_at_loop.batch_eval_polynomial_device 0
halo2_wrapper create_proof.phase5.permutation.evaluate.eval_at_loop.batch_eval_polynomial_device.batch_eval_polynomial_device_out 0
halo2_wrapper create_proof.phase5.permutation_pk.evaluate 5
halo2_wrapper create_proof.phase5.permutation_pk.evaluate.batch_eval_polynomial_device_out 0
halo2_wrapper create_proof.phase5.phase5_multiopen 101
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk 101
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.construct_intermediate_sets 7
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.construct_intermediate_sets.batch_eval_polynomial_device 6
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.construct_intermediate_sets.batch_eval_polynomial_device.batch_eval_polynomial_device_out 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.h_commit 57
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.h_commit.kzg.g_device_first_touch 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.h_commit.multiexp_device_scalars_device_bases 57
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.h_x_device_reduce 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.poly_multiply_add_device 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.poly_scale_device_with_d_s_minus_one 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.quotient_contribution.rayon_worker 1
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.quotient_contribution.rayon_worker.kate_division_device_padded 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.quotient_contribution.rayon_worker.kate_division_device_with_d_root 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.quotient_contribution.rayon_worker.poly_sub_short_out_of_place_device 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.shplonk.final_l_x_kate_div 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.shplonk.final_l_x_kate_div.kate_division_device 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.shplonk.h_final_commit 34
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.shplonk.h_final_commit.kzg.g_device_first_touch 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.shplonk.h_final_commit.multiexp_device_scalars_device_bases 34
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.shplonk.l_x_device_reduce 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.shplonk.linearisation_contribution.rayon_worker 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.shplonk.linearisation_contribution.rayon_worker.poly_scale_device_with_d_s_minus_one 0
halo2_wrapper create_proof.phase5.phase5_multiopen.shplonk.shplonk.linearisation_contribution.rayon_worker.poly_sub_scalar_at_zero_device 0
halo2_wrapper create_proof.phase5.vanishing.evaluate 0
halo2_wrapper create_proof.phase5.vanishing.evaluate.device_fold 0
halo2_wrapper create_proof.phase5.vanishing.evaluate.device_fold.poly_scale_device_with_d_s_minus_one 0
halo2_wrapper create_proof.synthesize 264
phase halo2_section_time_ms
kzg.g_device_first_touch 20
kzg.g_lagrange_device_first_touch 0

primitives

group primitive halo2_section_time_ms
halo2_outer,halo2_wrapper fft_normal 12
halo2_outer,halo2_wrapper extended_from_lagrange_vec_device 0
halo2_outer,halo2_wrapper distribute_powers_zeta_device 0
halo2_outer,halo2_wrapper divide_by_vanishing_poly_device 0
halo2_outer,halo2_wrapper quotient_lookups 0
halo2_outer,halo2_wrapper quotient_permutation 0
halo2_outer,halo2_wrapper quotient_lookups_gpu.add_permutation_constraints 0
halo2_outer,halo2_wrapper quotient_lookups_gpu.take_values_device 0

@stephenh-axiom-xyz stephenh-axiom-xyz left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Noting that this PR doesn't resolve the following finding, but I don't think we need to fix it anyways

## halo2-gpu (halo2_proofs/cuda/include/field/alt_bn128.hpp shim + cuda/blst/*)
- The shim still embeds host-side blst typedefs because every kernel header uses typedef fr_t scalar_t; outside __CUDA_ARCH__. Replace the host path with an opaque placeholder type and drop cuda/blst/*.

@gaxiom
gaxiom merged commit d49315e into main Aug 3, 2026
8 checks passed
@gaxiom
gaxiom deleted the grigorii/int-7614-sppark-follow-ups branch August 3, 2026 15:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

benchmark Runs the e2e benchmark

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants