29 if (gridDim.x != 16)
return;
30 if (gridDim.y != 1)
return;
31 if (gridDim.z != 1)
return;
32 if (blockDim.x != 256)
return;
33 if (blockDim.y != 1)
return;
34 if (blockDim.z != 1)
return;
36 unsigned tid = threadIdx.x;
37 unsigned bid = blockIdx.x;
39 const int n = 4096, l = 16, k = 256;
43 int input = n - 1 - bid - l * tid;
44 int output = 2*k * bid + tid;
55 g1p_inf(xext[2*k*bid + k + tid]);
__global__ void fk20_hext_fft2hext(g1p_t *hext, const g1p_t *hext_fft)
hext_fft -> hext
__global__ void fk20_setup2xext_fft(g1p_t *xext_fft, const g1p_t *setup)
setup -> xext_fft
__global__ void fk20_h2h_fft(g1p_t *h_fft, const g1p_t *h)
h -> h_fft
__managed__ g1p_t xext_fft[16][512]
__managed__ g1p_t hext_fft[512 *512]
__managed__ g1p_t h_fft[512 *512]
__managed__ g1p_t h[512 *512]
__managed__ g1p_t setup[4097]
__device__ void g1p_ift(g1p_t *output, const g1p_t *input)
Inverse FFT of size 512 over G1 with projective coordinates. Input and output arrays may overlap....
__device__ __host__ void g1p_inf(g1p_t &p)
Set p to the point-at-infinity (0,1,0)
__device__ void g1p_fft(g1p_t *output, const g1p_t *input)
FFT of size 512 over G1 with projective coordinates. Input and output arrays may overlap....
__device__ __host__ void g1p_cpy(g1p_t &p, const g1p_t &q)
Copy from q into p.
G1 point in projective coordinates.