Skip to content

Define mlk_polyvec[_mulcache] as typedef for array #895

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

Merged
merged 1 commit into from
Mar 25, 2025
Merged

Conversation

hanno-becker
Copy link
Contributor

@hanno-becker hanno-becker commented Mar 20, 2025

This commit changes the definition of mlk_polyvec from a struct
wrapper struct { mlk_poly vec[MLKEM_K] } to a typedef for
mlk_poly[MLKEM_K]. Similarly, it introduces mlk_polymat
as a typedef for mlk_poly[MLKEM_K * MLKEM_K].

This ensures that when working with polynomial matrices,
the polynomial entries are consecutive in memory.
This needs to be assumed for the correctness of gen_matrix().

From all we know, is a theoretical concern that without this
change, compilers would be free to introduce padding into
mlk_polyvec, breaking gen_matrix(). Yet, the behaviour of
gen_matrix is strictly speaking UB, so even if a compiler
does not use padding in mlk_polyvec, it is better to change it.

Defining mlk_polymat as a typedef for mlk_poly[MLKEM_K * MLKEM_K]
and not mlk_polyvec[MLKEM_K] is deliberate: In the latter case, one
would not be able to pass a mlk_polymat to a function expecting
const polymat because of how qualifiers are (not) propagated,
forcing cumbersome manual casts.

@hanno-becker hanno-becker requested a review from a team as a code owner March 20, 2025 05:08
@hanno-becker hanno-becker force-pushed the polyvec_arr branch 2 times, most recently from 579738a to e7893df Compare March 20, 2025 05:12
@hanno-becker hanno-becker marked this pull request as draft March 20, 2025 05:15
@hanno-becker hanno-becker force-pushed the polyvec_arr branch 7 times, most recently from b713230 to 1aadee9 Compare March 20, 2025 06:49
@hanno-becker hanno-becker added the benchmark this PR should be benchmarked in CI label Mar 20, 2025
Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Intel Xeon 4th gen (c7i)

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 9511 cycles 9477 cycles 1.00
ML-KEM-512 encaps 11045 cycles 11217 cycles 0.98
ML-KEM-512 decaps 15295 cycles 15166 cycles 1.01
ML-KEM-768 keypair 16300 cycles 16303 cycles 1.00
ML-KEM-768 encaps 17698 cycles 17790 cycles 0.99
ML-KEM-768 decaps 23325 cycles 23444 cycles 0.99
ML-KEM-1024 keypair 21974 cycles 22001 cycles 1.00
ML-KEM-1024 encaps 24062 cycles 24012 cycles 1.00
ML-KEM-1024 decaps 31755 cycles 31587 cycles 1.01

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Intel Xeon 4th gen (c7i) (no-opt)

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 28969 cycles 30164 cycles 0.96
ML-KEM-512 encaps 34849 cycles 35677 cycles 0.98
ML-KEM-512 decaps 44489 cycles 45084 cycles 0.99
ML-KEM-768 keypair 47644 cycles 48448 cycles 0.98
ML-KEM-768 encaps 55592 cycles 55690 cycles 1.00
ML-KEM-768 decaps 67719 cycles 68876 cycles 0.98
ML-KEM-1024 keypair 73246 cycles 74942 cycles 0.98
ML-KEM-1024 encaps 85261 cycles 83410 cycles 1.02
ML-KEM-1024 decaps 99188 cycles 99614 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

AMD EPYC 4th gen (c7a)

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 11734 cycles 11702 cycles 1.00
ML-KEM-512 encaps 13449 cycles 13439 cycles 1.00
ML-KEM-512 decaps 18310 cycles 18310 cycles 1
ML-KEM-768 keypair 20213 cycles 20125 cycles 1.00
ML-KEM-768 encaps 21188 cycles 21112 cycles 1.00
ML-KEM-768 decaps 28361 cycles 28224 cycles 1.00
ML-KEM-1024 keypair 27021 cycles 27067 cycles 1.00
ML-KEM-1024 encaps 29171 cycles 29123 cycles 1.00
ML-KEM-1024 decaps 38640 cycles 38639 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

AMD EPYC 3rd gen (c6a)

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 17199 cycles 17264 cycles 1.00
ML-KEM-512 encaps 18986 cycles 19057 cycles 1.00
ML-KEM-512 decaps 24460 cycles 24513 cycles 1.00
ML-KEM-768 keypair 29571 cycles 29552 cycles 1.00
ML-KEM-768 encaps 30807 cycles 30875 cycles 1.00
ML-KEM-768 decaps 38658 cycles 38640 cycles 1.00
ML-KEM-1024 keypair 42933 cycles 42962 cycles 1.00
ML-KEM-1024 encaps 45574 cycles 45604 cycles 1.00
ML-KEM-1024 decaps 55945 cycles 55827 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Intel Xeon 3rd gen (c6i)

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 16160 cycles 16149 cycles 1.00
ML-KEM-512 encaps 18378 cycles 18247 cycles 1.01
ML-KEM-512 decaps 24861 cycles 24723 cycles 1.01
ML-KEM-768 keypair 27847 cycles 27803 cycles 1.00
ML-KEM-768 encaps 29470 cycles 29387 cycles 1.00
ML-KEM-768 decaps 38888 cycles 38836 cycles 1.00
ML-KEM-1024 keypair 37635 cycles 37578 cycles 1.00
ML-KEM-1024 encaps 40616 cycles 40554 cycles 1.00
ML-KEM-1024 decaps 53209 cycles 53168 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

AMD EPYC 4th gen (c7a) (no-opt)

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 35983 cycles 36358 cycles 0.99
ML-KEM-512 encaps 42702 cycles 42959 cycles 0.99
ML-KEM-512 decaps 55624 cycles 55963 cycles 0.99
ML-KEM-768 keypair 59251 cycles 59249 cycles 1.00
ML-KEM-768 encaps 67882 cycles 67706 cycles 1.00
ML-KEM-768 decaps 84973 cycles 84932 cycles 1.00
ML-KEM-1024 keypair 87551 cycles 87560 cycles 1.00
ML-KEM-1024 encaps 99961 cycles 98317 cycles 1.02
ML-KEM-1024 decaps 121161 cycles 120104 cycles 1.01

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Arm Cortex-A55 (Snapdragon 888) benchmarks

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 59376 cycles 59330 cycles 1.00
ML-KEM-512 encaps 66964 cycles 66920 cycles 1.00
ML-KEM-512 decaps 85989 cycles 86014 cycles 1.00
ML-KEM-768 keypair 101050 cycles 101087 cycles 1.00
ML-KEM-768 encaps 112066 cycles 112317 cycles 1.00
ML-KEM-768 decaps 139354 cycles 139358 cycles 1.00
ML-KEM-1024 keypair 153416 cycles 153471 cycles 1.00
ML-KEM-1024 encaps 173222 cycles 170285 cycles 1.02
ML-KEM-1024 decaps 207524 cycles 207958 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

AMD EPYC 3rd gen (c6a) (no-opt)

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 39028 cycles 39026 cycles 1.00
ML-KEM-512 encaps 47207 cycles 47097 cycles 1.00
ML-KEM-512 decaps 60983 cycles 60745 cycles 1.00
ML-KEM-768 keypair 62786 cycles 63315 cycles 0.99
ML-KEM-768 encaps 73731 cycles 73946 cycles 1.00
ML-KEM-768 decaps 91275 cycles 91861 cycles 0.99
ML-KEM-1024 keypair 94638 cycles 94031 cycles 1.01
ML-KEM-1024 encaps 108342 cycles 107041 cycles 1.01
ML-KEM-1024 decaps 131630 cycles 129724 cycles 1.01

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Intel Xeon 3rd gen (c6i) (no-opt)

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 46352 cycles 47466 cycles 0.98
ML-KEM-512 encaps 54720 cycles 55344 cycles 0.99
ML-KEM-512 decaps 70044 cycles 71556 cycles 0.98
ML-KEM-768 keypair 75161 cycles 77538 cycles 0.97
ML-KEM-768 encaps 86346 cycles 87559 cycles 0.99
ML-KEM-768 decaps 106296 cycles 108276 cycles 0.98
ML-KEM-1024 keypair 111110 cycles 113314 cycles 0.98
ML-KEM-1024 encaps 125180 cycles 126306 cycles 0.99
ML-KEM-1024 decaps 150981 cycles 152929 cycles 0.99

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Graviton4

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 17795 cycles 17771 cycles 1.00
ML-KEM-512 encaps 21020 cycles 21026 cycles 1.00
ML-KEM-512 decaps 27681 cycles 27696 cycles 1.00
ML-KEM-768 keypair 30634 cycles 30710 cycles 1.00
ML-KEM-768 encaps 33565 cycles 33580 cycles 1.00
ML-KEM-768 decaps 43128 cycles 43195 cycles 1.00
ML-KEM-1024 keypair 44316 cycles 44315 cycles 1.00
ML-KEM-1024 encaps 49592 cycles 49591 cycles 1.00
ML-KEM-1024 decaps 62582 cycles 62497 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Graviton2

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 29402 cycles 29444 cycles 1.00
ML-KEM-512 encaps 34606 cycles 34680 cycles 1.00
ML-KEM-512 decaps 45218 cycles 45279 cycles 1.00
ML-KEM-768 keypair 50045 cycles 50139 cycles 1.00
ML-KEM-768 encaps 55297 cycles 55224 cycles 1.00
ML-KEM-768 decaps 70206 cycles 70096 cycles 1.00
ML-KEM-1024 keypair 73102 cycles 73098 cycles 1.00
ML-KEM-1024 encaps 81496 cycles 81514 cycles 1.00
ML-KEM-1024 decaps 101335 cycles 101471 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Graviton3

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 18875 cycles 18877 cycles 1.00
ML-KEM-512 encaps 22363 cycles 22358 cycles 1.00
ML-KEM-512 decaps 29607 cycles 29566 cycles 1.00
ML-KEM-768 keypair 32301 cycles 32250 cycles 1.00
ML-KEM-768 encaps 35744 cycles 35598 cycles 1.00
ML-KEM-768 decaps 46049 cycles 45965 cycles 1.00
ML-KEM-1024 keypair 46410 cycles 46487 cycles 1.00
ML-KEM-1024 encaps 52060 cycles 52080 cycles 1.00
ML-KEM-1024 decaps 65864 cycles 65962 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Graviton4 (no-opt)

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 35986 cycles 35918 cycles 1.00
ML-KEM-512 encaps 41033 cycles 40842 cycles 1.00
ML-KEM-512 decaps 52119 cycles 52306 cycles 1.00
ML-KEM-768 keypair 59553 cycles 60759 cycles 0.98
ML-KEM-768 encaps 66794 cycles 67536 cycles 0.99
ML-KEM-768 decaps 81139 cycles 81425 cycles 1.00
ML-KEM-1024 keypair 88514 cycles 89028 cycles 0.99
ML-KEM-1024 encaps 98571 cycles 98877 cycles 1.00
ML-KEM-1024 decaps 117454 cycles 117716 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Arm Cortex-A76 (Raspberry Pi 5) benchmarks

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 29402 cycles 29440 cycles 1.00
ML-KEM-512 encaps 34609 cycles 34675 cycles 1.00
ML-KEM-512 decaps 45191 cycles 45264 cycles 1.00
ML-KEM-768 keypair 50052 cycles 50138 cycles 1.00
ML-KEM-768 encaps 55297 cycles 55220 cycles 1.00
ML-KEM-768 decaps 70175 cycles 70075 cycles 1.00
ML-KEM-1024 keypair 73091 cycles 73079 cycles 1.00
ML-KEM-1024 encaps 81485 cycles 81517 cycles 1.00
ML-KEM-1024 decaps 101331 cycles 101473 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Graviton2 (no-opt)

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 61132 cycles 59431 cycles 1.03
ML-KEM-512 encaps 67969 cycles 68011 cycles 1.00
ML-KEM-512 decaps 86728 cycles 86649 cycles 1.00
ML-KEM-768 keypair 98894 cycles 98924 cycles 1.00
ML-KEM-768 encaps 111164 cycles 110402 cycles 1.01
ML-KEM-768 decaps 134569 cycles 134811 cycles 1.00
ML-KEM-1024 keypair 148703 cycles 148822 cycles 1.00
ML-KEM-1024 encaps 164019 cycles 163875 cycles 1.00
ML-KEM-1024 decaps 195825 cycles 195498 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Graviton3 (no-opt)

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 38872 cycles 39685 cycles 0.98
ML-KEM-512 encaps 44719 cycles 44864 cycles 1.00
ML-KEM-512 decaps 56426 cycles 56842 cycles 0.99
ML-KEM-768 keypair 64262 cycles 64182 cycles 1.00
ML-KEM-768 encaps 72260 cycles 72669 cycles 0.99
ML-KEM-768 decaps 87830 cycles 88056 cycles 1.00
ML-KEM-1024 keypair 95851 cycles 96095 cycles 1.00
ML-KEM-1024 encaps 106786 cycles 106211 cycles 1.01
ML-KEM-1024 decaps 127065 cycles 127057 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

SpacemiT K1 8 (Banana Pi F3) benchmarks

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 225587 cycles 225593 cycles 1.00
ML-KEM-512 encaps 271816 cycles 271821 cycles 1.00
ML-KEM-512 decaps 346351 cycles 346326 cycles 1.00
ML-KEM-768 keypair 374190 cycles 374216 cycles 1.00
ML-KEM-768 encaps 433744 cycles 433736 cycles 1.00
ML-KEM-768 decaps 532470 cycles 532650 cycles 1.00
ML-KEM-1024 keypair 554460 cycles 554463 cycles 1.00
ML-KEM-1024 encaps 632572 cycles 632521 cycles 1.00
ML-KEM-1024 decaps 754426 cycles 754358 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

@hanno-becker
Copy link
Contributor Author

hanno-becker commented Mar 20, 2025

I am rather inclined not to do this. There is a pain point here in that T (*)[N] does not cast to const T (*)[N]. See https://gustedt.wordpress.com/2011/02/12/const-and-arrays/. Concretely, if you have a function void foo(const T[N][M]), and a local T x[N][M], then calling foo(x) is not valid C. You would need to explicitly cast foo((const T(*)[M]) x) (@tautschnig @remi-delmas-3000 Would such cast actually be UB?) For mlk_polyvec alone, this only surfaces twice when calling matvec_mul, so it's not too bad.

However, it's a fair question why one would not also make mlk_poly a typedef, which the above issue renders entirely impractical. So the only option we have is turning mlk_polyvec into an array, but not mlk_poly. That's good enough for gen_matrix, but a bit inconsistent.

If we don't do this, gen_matrix exhibits UB, albeit one which is highly unlikely to cause any practical problem.

@hanno-becker hanno-becker changed the title Define mlk_polyvec[_mulcache] as typedef for array [TEST] Define mlk_polyvec[_mulcache] as typedef for array Mar 20, 2025
Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Mac Mini (M1, 2020) benchmarks

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 12254 cycles 12254 cycles 1
ML-KEM-512 encaps 14838 cycles 14846 cycles 1.00
ML-KEM-512 decaps 19715 cycles 19721 cycles 1.00
ML-KEM-768 keypair 21051 cycles 21051 cycles 1
ML-KEM-768 encaps 23677 cycles 23679 cycles 1.00
ML-KEM-768 decaps 30514 cycles 30515 cycles 1.00
ML-KEM-1024 keypair 29978 cycles 29978 cycles 1
ML-KEM-1024 encaps 34478 cycles 34478 cycles 1
ML-KEM-1024 decaps 43428 cycles 43442 cycles 1.00

This comment was automatically generated by workflow using github-action-benchmark.

@hanno-becker
Copy link
Contributor Author

hanno-becker commented Mar 20, 2025

@mkannwischer Do you have an opinion here?

Another option would be to define mlk_polyvec as a typedef, but avoid mlk_polyvec[MLKEM_K] and instead use mlk_poly[MLKEM_K * MLKEM_K] throughout. There aren't many instances where matrices are used anyway.

@hanno-becker hanno-becker force-pushed the polyvec_arr branch 5 times, most recently from 0574488 to 3b28c14 Compare March 23, 2025 14:10
@hanno-becker hanno-becker changed the title [TEST] Define mlk_polyvec[_mulcache] as typedef for array Define mlk_polyvec[_mulcache] as typedef for array Mar 23, 2025
@hanno-becker hanno-becker force-pushed the polyvec_arr branch 5 times, most recently from 2a17dbe to 60e019b Compare March 23, 2025 18:37
@hanno-becker hanno-becker marked this pull request as ready for review March 23, 2025 19:32
@hanno-becker hanno-becker added benchmark this PR should be benchmarked in CI and removed benchmark this PR should be benchmarked in CI labels Mar 23, 2025
Copy link

@oqs-bot oqs-bot left a comment

Choose a reason for hiding this comment

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

Arm Cortex-A72 (Raspberry Pi 4) benchmarks

Benchmark suite Current: 60e019b Previous: 8dba13b Ratio
ML-KEM-512 keypair 53183 cycles 53196 cycles 1.00
ML-KEM-512 encaps 61013 cycles 61239 cycles 1.00
ML-KEM-512 decaps 78268 cycles 77578 cycles 1.01
ML-KEM-768 keypair 89696 cycles 89929 cycles 1.00
ML-KEM-768 encaps 97419 cycles 98860 cycles 0.99
ML-KEM-768 decaps 122199 cycles 123436 cycles 0.99
ML-KEM-1024 keypair 135525 cycles 134458 cycles 1.01
ML-KEM-1024 encaps 148040 cycles 147089 cycles 1.01
ML-KEM-1024 decaps 181769 cycles 180649 cycles 1.01

This comment was automatically generated by workflow using github-action-benchmark.

This commit changes the definition of `mlk_polyvec` from a struct
wrapper `struct { mlk_poly vec[MLKEM_K] }` to a typedef for
`mlk_poly[MLKEM_K]`. Similarly, it introduces `mlk_polymat`
as a typedef for `mlk_poly[MLKEM_K * MLKEM_K]`.

This ensures that when working with polynomial matrices
-- that is, arrays of `mlk_polyvec`s -- the polynomial
entries are consecutive in memory. This needs to be assumed
for the correctness of `gen_matrix()`.

From all we know, is a theoretical concern that without this
change, compilers would be free to introduce padding into
`mlk_polyvec`, breaking `gen_matrix()`. Yet, the behaviour of
`gen_matrix` is strictly speaking UB, so even if a compiler
does not use padding in `mlk_polyvec`, it is better to change it.

Defining `mlk_polymat` as a typedef for `mlk_poly[MLKEM_K * MLKEM_K]`
and not `mlk_polyvec[MLKEM_K]` is deliberate: In the latter case, one
would not be able to pass a `mlk_polymat` to a function expecting
`const polymat`, forcing cumbersome manual casts.

Signed-off-by: Hanno Becker <[email protected]>
Copy link
Contributor

@mkannwischer mkannwischer left a comment

Choose a reason for hiding this comment

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

LGTM. Thanks @hanno-becker for resolving this!
I have no concerns about this change.

@mkannwischer mkannwischer merged commit 118f091 into main Mar 25, 2025
200 checks passed
@mkannwischer mkannwischer deleted the polyvec_arr branch March 25, 2025 12:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
benchmark this PR should be benchmarked in CI
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Define mlkem_polyvec as array rather than struct wrapper
3 participants