thrust::scatter_if#
Overloads#
scatter_if(exec, first, last, map, stencil, output)#
-
template<typename DerivedPolicy, typename InputIterator1, typename InputIterator2, typename InputIterator3, typename RandomAccessIterator>
void thrust::scatter_if( - const thrust::detail::execution_policy_base<DerivedPolicy> &exec,
- InputIterator1 first,
- InputIterator1 last,
- InputIterator2 map,
- InputIterator3 stencil,
- RandomAccessIterator output,
scatter_ifconditionally copies elements from a source range into an output array according to a map. For each iteratoriin the range[first, last)such that*(stencil + (i - first))is true, the value*iis assigned tooutput[*(map + (i - first))]. The output iterator must permit random access. If the same index appears more than once in the range[map, map + (last - first))the result is undefined.The algorithm’s execution is parallelized as determined by
exec.#include <thrust/scatter.h> #include <thrust/execution_policy.h> ... int V[8] = {10, 20, 30, 40, 50, 60, 70, 80}; int M[8] = {0, 5, 1, 6, 2, 7, 3, 4}; int S[8] = {1, 0, 1, 0, 1, 0, 1, 0}; int D[8] = {0, 0, 0, 0, 0, 0, 0, 0}; thrust::scatter_if(thrust::host, V, V + 8, M, S, D); // D contains [10, 30, 50, 70, 0, 0, 0, 0];
Note
scatter_ifis the inverse of thrust::gather_if.- Parameters:
exec – The execution policy to use for parallelization.
first – Beginning of the sequence of values to scatter.
last – End of the sequence of values to scatter.
map – Beginning of the sequence of output indices.
stencil – Beginning of the sequence of predicate values.
output – Beginning of the destination range.
- Template Parameters:
DerivedPolicy – The name of the derived execution policy.
InputIterator1 – must be a model of Input Iterator and
InputIterator1'svalue_typemust be convertible toRandomAccessIterator'svalue_type.InputIterator2 – must be a model of Input Iterator and
InputIterator2'svalue_typemust be convertible toRandomAccessIterator'sdifference_type.InputIterator3 – must be a model of Input Iterator and
InputIterator3'svalue_typemust be convertible tobool.RandomAccessIterator – must be a model of Random Access iterator.
- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[first,last)for all iteratorsiin the range[map,map + (last - first)).- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[map,map + (last - first))for all iteratorsiin the range[map,map + (last - first)).- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[stencil,stencil + (last - first))for all iteratorsiin the range[map,map + (last - first)).- Pre:
The expression
result[*i]shall be valid for all iteratorsiin the range[map,map + (last - first))for which the following condition holds:*(stencil + i) != false.
scatter_if(first, last, map, stencil, output)#
-
template<typename InputIterator1, typename InputIterator2, typename InputIterator3, typename RandomAccessIterator>
void thrust::scatter_if( - InputIterator1 first,
- InputIterator1 last,
- InputIterator2 map,
- InputIterator3 stencil,
- RandomAccessIterator output,
scatter_ifconditionally copies elements from a source range into an output array according to a map. For each iteratoriin the range[first, last)such that*(stencil + (i - first))is true, the value*iis assigned tooutput[*(map + (i - first))]. The output iterator must permit random access. If the same index appears more than once in the range[map, map + (last - first))the result is undefined.#include <thrust/scatter.h> ... int V[8] = {10, 20, 30, 40, 50, 60, 70, 80}; int M[8] = {0, 5, 1, 6, 2, 7, 3, 4}; int S[8] = {1, 0, 1, 0, 1, 0, 1, 0}; int D[8] = {0, 0, 0, 0, 0, 0, 0, 0}; thrust::scatter_if(V, V + 8, M, S, D); // D contains [10, 30, 50, 70, 0, 0, 0, 0];
Note
scatter_ifis the inverse of thrust::gather_if.- Parameters:
first – Beginning of the sequence of values to scatter.
last – End of the sequence of values to scatter.
map – Beginning of the sequence of output indices.
stencil – Beginning of the sequence of predicate values.
output – Beginning of the destination range.
- Template Parameters:
InputIterator1 – must be a model of Input Iterator and
InputIterator1'svalue_typemust be convertible toRandomAccessIterator'svalue_type.InputIterator2 – must be a model of Input Iterator and
InputIterator2'svalue_typemust be convertible toRandomAccessIterator'sdifference_type.InputIterator3 – must be a model of Input Iterator and
InputIterator3'svalue_typemust be convertible tobool.RandomAccessIterator – must be a model of Random Access iterator.
- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[first,last)for all iteratorsiin the range[map,map + (last - first)).- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[map,map + (last - first))for all iteratorsiin the range[map,map + (last - first)).- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[stencil,stencil + (last - first))for all iteratorsiin the range[map,map + (last - first)).- Pre:
The expression
result[*i]shall be valid for all iteratorsiin the range[map,map + (last - first))for which the following condition holds:*(stencil + i) != false.
scatter_if(exec, first, last, map, stencil, output, pred)#
-
template<typename DerivedPolicy, typename InputIterator1, typename InputIterator2, typename InputIterator3, typename RandomAccessIterator, typename Predicate>
void thrust::scatter_if( - const thrust::detail::execution_policy_base<DerivedPolicy> &exec,
- InputIterator1 first,
- InputIterator1 last,
- InputIterator2 map,
- InputIterator3 stencil,
- RandomAccessIterator output,
- Predicate pred,
scatter_ifconditionally copies elements from a source range into an output array according to a map. For each iteratoriin the range[first, last)such thatpred(*(stencil + (i - first)))istrue, the value*iis assigned tooutput[*(map + (i - first))]. The output iterator must permit random access. If the same index appears more than once in the range[map, map + (last - first))the result is undefined.The algorithm’s execution is parallelized as determined by
exec.#include <thrust/scatter.h> #include <thrust/execution_policy.h> struct is_even { __host__ __device__ bool operator()(int x) { return (x % 2) == 0; } }; ... int V[8] = {10, 20, 30, 40, 50, 60, 70, 80}; int M[8] = {0, 5, 1, 6, 2, 7, 3, 4}; int S[8] = {2, 1, 2, 1, 2, 1, 2, 1}; int D[8] = {0, 0, 0, 0, 0, 0, 0, 0}; is_even pred; thrust::scatter_if(thrust::host, V, V + 8, M, S, D, pred); // D contains [10, 30, 50, 70, 0, 0, 0, 0];
Note
scatter_ifis the inverse of thrust::gather_if.- Parameters:
exec – The execution policy to use for parallelization.
first – Beginning of the sequence of values to scatter.
last – End of the sequence of values to scatter.
map – Beginning of the sequence of output indices.
stencil – Beginning of the sequence of predicate values.
output – Beginning of the destination range.
pred – Predicate to apply to the stencil values.
- Template Parameters:
DerivedPolicy – The name of the derived execution policy.
InputIterator1 – must be a model of Input Iterator and
InputIterator1'svalue_typemust be convertible toRandomAccessIterator'svalue_type.InputIterator2 – must be a model of Input Iterator and
InputIterator2'svalue_typemust be convertible toRandomAccessIterator'sdifference_type.InputIterator3 – must be a model of Input Iterator and
InputIterator3'svalue_typemust be convertible toPredicate'sargument type.RandomAccessIterator – must be a model of Random Access iterator.
Predicate – must be a model of Predicate.
- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[first,last)for all iteratorsiin the range[map,map + (last - first)).- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[map,map + (last - first))for all iteratorsiin the range[map,map + (last - first)).- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[stencil,stencil + (last - first))for all iteratorsiin the range[map,map + (last - first)).- Pre:
The expression
result[*i]shall be valid for all iteratorsiin the range[map,map + (last - first))for which the following condition holds:pred(*(stencil + i)) != false.
scatter_if(first, last, map, stencil, output, pred)#
-
template<typename InputIterator1, typename InputIterator2, typename InputIterator3, typename RandomAccessIterator, typename Predicate>
void thrust::scatter_if( - InputIterator1 first,
- InputIterator1 last,
- InputIterator2 map,
- InputIterator3 stencil,
- RandomAccessIterator output,
- Predicate pred,
scatter_ifconditionally copies elements from a source range into an output array according to a map. For each iteratoriin the range[first, last)such thatpred(*(stencil + (i - first)))istrue, the value*iis assigned tooutput[*(map + (i - first))]. The output iterator must permit random access. If the same index appears more than once in the range[map, map + (last - first))the result is undefined.#include <thrust/scatter.h> struct is_even { __host__ __device__ bool operator()(int x) { return (x % 2) == 0; } }; ... int V[8] = {10, 20, 30, 40, 50, 60, 70, 80}; int M[8] = {0, 5, 1, 6, 2, 7, 3, 4}; int S[8] = {2, 1, 2, 1, 2, 1, 2, 1}; int D[8] = {0, 0, 0, 0, 0, 0, 0, 0}; is_even pred; thrust::scatter_if(V, V + 8, M, S, D, pred); // D contains [10, 30, 50, 70, 0, 0, 0, 0];
Note
scatter_ifis the inverse of thrust::gather_if.- Parameters:
first – Beginning of the sequence of values to scatter.
last – End of the sequence of values to scatter.
map – Beginning of the sequence of output indices.
stencil – Beginning of the sequence of predicate values.
output – Beginning of the destination range.
pred – Predicate to apply to the stencil values.
- Template Parameters:
InputIterator1 – must be a model of Input Iterator and
InputIterator1'svalue_typemust be convertible toRandomAccessIterator'svalue_type.InputIterator2 – must be a model of Input Iterator and
InputIterator2'svalue_typemust be convertible toRandomAccessIterator'sdifference_type.InputIterator3 – must be a model of Input Iterator and
InputIterator3'svalue_typemust be convertible toPredicate'sargument type.RandomAccessIterator – must be a model of Random Access iterator.
Predicate – must be a model of Predicate.
- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[first,last)for all iteratorsiin the range[map,map + (last - first)).- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[map,map + (last - first))for all iteratorsiin the range[map,map + (last - first)).- Pre:
The iterator
result + ishall not refer to any element referenced by any iteratorjin the range[stencil,stencil + (last - first))for all iteratorsiin the range[map,map + (last - first)).- Pre:
The expression
result[*i]shall be valid for all iteratorsiin the range[map,map + (last - first))for which the following condition holds:pred(*(stencil + i)) != false.