Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

poly_ABC optimization #21

Open
sragss opened this issue Jan 31, 2024 · 1 comment
Open

poly_ABC optimization #21

sragss opened this issue Jan 31, 2024 · 1 comment

Comments

@sragss
Copy link
Collaborator

sragss commented Jan 31, 2024

No description provided.

@GUJustin
Copy link

Currently expensive and it doesn't have to be: computing \tA(r, x) for fixed r (the randomness chosen during the first sum-check) as x ranges over {0, 1}^{log n} where n is number of columns.

Because A has so much repeated structure, computing this should be super fast.

Other than an edge case at the very end, you can index rows by (constraint, timestep) and columns by (value, timestep).

For i=(constraint, timestep) and j = (value, timestep'):

\tA(i, j) is just smallA(constraint, value) * eq(timestep, timestep'),

where smallA captures the constraints just for one timestep.

Write r=(r_constraint, r_timestep), x=(x_value, x_timestep). Then A(r, x) = smallA(r_constraint, x_value) * eq(r_timestep, x_timestep).

Need a table of eq(r_timestep, x_timestep) values as x_{timestep} ranges over {0, 1}^{log num_timesteps}.

So you just do the expensive vector-matrix multiplication to compute smallA(r_constraint, x_value) as x_{value} ranges over {0, 1}^{log 100} where 100 is the number of entries in z per step of the CPU.

Now each entry of A(r, x) can be filled in with one mult: smallA(r_constraint, x_value) * eq(r_timestep, x_timestep).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants