44 maxv = 24*r*r + 36*r + 13;
49 samples.resize( numsamp );
52 for (
uint32 i = 0; i < numsamp; ++i)
56 for (
uint32 i = 1; i < r+1; i++)
57 samples[i] = samples[i-1] + 1;
60 samples[r+1] = samples[r] + r + 1;
63 for (
uint32 i = r+2; i < r+2+r; i++)
64 samples[i] = samples[i-1] + 2*r + 1;
67 for (
uint32 i = r+2+r; i < r+2+r+2*r+1; i++)
68 samples[i] = samples[i-1] + 4*r + 3;
71 for (
uint32 i = r+2+r+2*r+1; i < r+2+r+2*r+1+r+1; i++)
72 samples[i] = samples[i-1] + 2*r + 2;
75 for (
uint32 i = r+2+r+2*r+1+r+1; i < r+2+r+2*r+1+r+1+r; i++)
76 samples[i] = samples[i-1] + 1;
95 thrust::make_counting_iterator<uint32>(
n_output ),
96 thrust::make_counting_iterator<uint32>(
n_output ) + n_suffixes,
98 thrust::device_ptr<const uint32>( d_suffixes ),
100 thrust::device_ptr<uint32>(
dcs.
ranks ) );
114 thrust::device_ptr<const uint32>( d_slots ),
115 thrust::device_ptr<const uint32>( d_slots ) + n_suffixes,
117 thrust::device_ptr<const uint32>( d_suffixes ),
119 thrust::device_ptr<uint32>(
dcs.
ranks ) );
132 const uint32 mod_i = i & (
Q-1);
134 return block_i *
N +
pos[ mod_i ];
148 thrust::host_vector<uint8> h_bitmask(
Q, 0u );
149 thrust::host_vector<uint32> h_lut(
Q*
Q, 0u );
150 thrust::host_vector<uint32> h_pos( Q, 0u );
154 thrust::make_constant_iterator<uint32>(1u),
155 thrust::make_constant_iterator<uint32>(1u) +
N,
161 thrust::make_counting_iterator<uint32>(0u),
162 thrust::make_counting_iterator<uint32>(0u) +
N,
173 if (h_bitmask[ (i + l) & (Q-1) ] &&
174 h_bitmask[ (j + l) & (Q-1) ])
176 h_lut[ i * Q + j ] = l;