21 if (gridDim.y != 1)
return;
22 if (gridDim.z != 1)
return;
23 if (blockDim.x != 256)
return;
24 if (blockDim.y != 1)
return;
25 if (blockDim.z != 1)
return;
27 unsigned tid = threadIdx.x;
28 unsigned bid = blockIdx.x;
40 for (
int i=0; i<16; i++) {
44 g1p_cpy(t, xe_fft[512*i+tid+0]);
45 g1p_mul(t, tc_fft[512*i+tid+0]);
48 g1p_cpy(t, xe_fft[512*i+tid+256]);
49 g1p_mul(t, tc_fft[512*i+tid+256]);
__global__ void fk20_msm(g1p_t *he_fft, const fr_t *tc_fft, const g1p_t *xe_fft)
toeplitz_coefficients_fft + xext_fft -> hext_fft
uint64_t fr_t[4]
Subgroup element stored as a 256-bit array (a 4-element little-endian array of uint64_t)....
__device__ __host__ void g1p_inf(g1p_t &p)
Set p to the point-at-infinity (0,1,0)
__device__ void g1p_add(g1p_t &p, const g1p_t &q)
Computes the sum of two points q into p, using projective coordinates. and stores in p.
__device__ void g1p_mul(g1p_t &p, const fr_t &x)
p ← k·p Point multiplication by scalar, in projective coordinates. That result is stored back into p.
__device__ __host__ void g1p_cpy(g1p_t &p, const g1p_t &q)
Copy from q into p.
G1 point in projective coordinates.