Fermat
Classes | Functions
Parallel Primitives

Detailed Description

This module provides a set of convenience wrappers to invoke system-wide CUB's parallel primitives without worrying about the memory management. All temporary storage is in fact allocated within a single thrust::system_vector passed by the user, which can be safely reused across function calls.

Classes

struct  cugar::for_each_enactor< system_tag >
 
struct  cugar::for_each_enactor< device_tag >
 

Functions

template<typename system_tag , typename PredicateIterator >
bool cugar::any (const uint32 n, const PredicateIterator pred)
 
template<typename system_tag , typename PredicateIterator >
bool cugar::all (const uint32 n, const PredicateIterator pred)
 
template<typename system_tag , typename Iterator >
bool cugar::is_sorted (const uint32 n, const Iterator values)
 
template<typename system_tag , typename Iterator , typename Headflags >
bool cugar::is_segment_sorted (const uint32 n, const Iterator values, const Headflags flags)
 
template<typename system_tag , typename Iterator , typename Functor >
void cugar::for_each (const uint64 n, const Iterator in, Functor functor)
 
template<typename system_tag , typename Iterator , typename Output , typename Functor >
void cugar::transform (const uint32 n, const Iterator in, const Output out, const Functor functor)
 
template<typename system_tag , typename Iterator1 , typename Iterator2 , typename Output , typename Functor >
void cugar::transform (const uint32 n, const Iterator1 in1, const Iterator2 in2, const Output out, const Functor functor)
 
template<typename system_tag , typename InputIterator , typename BinaryOp >
std::iterator_traits< InputIterator >::value_type cugar::reduce (const uint32 n, InputIterator in, BinaryOp op, cugar::vector< system_tag, uint8 > &temp_storage)
 
template<typename system_tag , typename InputIterator , typename OutputIterator , typename BinaryOp >
void cugar::inclusive_scan (const uint32 n, InputIterator in, OutputIterator out, BinaryOp op, cugar::vector< system_tag, uint8 > &temp_storage)
 
template<typename system_tag , typename InputIterator , typename OutputIterator , typename BinaryOp , typename Identity >
void cugar::exclusive_scan (const uint32 n, InputIterator in, OutputIterator out, BinaryOp op, Identity identity, cugar::vector< system_tag, uint8 > &temp_storage)
 
template<typename system_tag , typename InputIterator , typename FlagsIterator , typename OutputIterator >
uint32 cugar::copy_flagged (const uint32 n, InputIterator in, FlagsIterator flags, OutputIterator out, cugar::vector< system_tag, uint8 > &temp_storage)
 
template<typename system_tag , typename InputIterator , typename OutputIterator , typename Predicate >
uint32 cugar::copy_if (const uint32 n, InputIterator in, OutputIterator out, const Predicate pred, cugar::vector< system_tag, uint8 > &temp_storage)
 
template<typename system_tag , typename InputIterator , typename OutputIterator , typename CountIterator >
uint32 cugar::runlength_encode (const uint32 n, InputIterator in, OutputIterator out, CountIterator counts, cugar::vector< system_tag, uint8 > &temp_storage)
 
template<typename system_tag , typename KeyIterator , typename ValueIterator , typename OutputKeyIterator , typename OutputValueIterator , typename ReductionOp >
uint32 cugar::reduce_by_key (const uint32 n, KeyIterator keys_in, ValueIterator values_in, OutputKeyIterator keys_out, OutputValueIterator values_out, ReductionOp reduction_op, cugar::vector< system_tag, uint8 > &temp_storage)
 
template<typename system_tag , typename KeyIterator , typename ValueIterator , typename OutputIterator >
void cugar::lower_bound (const uint32 n, ValueIterator values, const uint32 n_keys, KeyIterator keys, OutputIterator indices)
 
template<typename system_tag , typename KeyIterator , typename ValueIterator , typename OutputIterator >
void cugar::upper_bound (const uint32 n, ValueIterator values, const uint32 n_keys, KeyIterator keys, OutputIterator indices)
 
template<typename system_tag , typename KeyIterator >
void cugar::radix_sort (const uint32 n, KeyIterator keys, cugar::vector< system_tag, uint8 > &temp_storage)
 
template<typename system_tag , typename KeyIterator , typename ValueIterator >
void cugar::radix_sort (const uint32 n, KeyIterator keys, ValueIterator values, cugar::vector< system_tag, uint8 > &temp_storage)
 
template<typename system_tag , typename key_iterator1 , typename key_iterator2 , typename value_iterator1 , typename value_iterator2 , typename key_output , typename value_output >
void cugar::merge_by_key (const uint32 A_len, const uint32 B_len, const key_iterator1 A_keys, const key_iterator2 B_keys, const value_iterator1 A_values, const value_iterator2 B_values, key_output C_keys, value_output C_values, cugar::vector< system_tag, uint8 > &temp_storage)
 

Function Documentation

◆ all()

template<typename system_tag , typename PredicateIterator >
bool cugar::all ( const uint32  n,
const PredicateIterator  pred 
)

return true if all items in the range [0,n) evaluate to true

◆ any()

template<typename system_tag , typename PredicateIterator >
bool cugar::any ( const uint32  n,
const PredicateIterator  pred 
)

return true if any item in the range [0,n) evaluates to true

◆ copy_flagged()

template<typename system_tag , typename InputIterator , typename FlagsIterator , typename OutputIterator >
uint32 cugar::copy_flagged ( const uint32  n,
InputIterator  in,
FlagsIterator  flags,
OutputIterator  out,
cugar::vector< system_tag, uint8 > &  temp_storage 
)

system-wide copy of flagged items

Parameters
nnumber of input items
ina system input iterator
flagsa system flags iterator
outa system output iterator
temp_storagesome temporary storage
Returns
the number of copied items

◆ copy_if()

template<typename system_tag , typename InputIterator , typename OutputIterator , typename Predicate >
uint32 cugar::copy_if ( const uint32  n,
InputIterator  in,
OutputIterator  out,
const Predicate  pred,
cugar::vector< system_tag, uint8 > &  temp_storage 
)

system-wide copy of predicated items

Parameters
nnumber of input items
ina system input iterator
outa system output iterator
preda unary predicate functor
temp_storagesome temporary storage
Returns
the number of copied items

◆ exclusive_scan()

template<typename system_tag , typename InputIterator , typename OutputIterator , typename BinaryOp , typename Identity >
void cugar::exclusive_scan ( const uint32  n,
InputIterator  in,
OutputIterator  out,
BinaryOp  op,
Identity  identity,
cugar::vector< system_tag, uint8 > &  temp_storage 
)

system-wide exclusive scan

Parameters
nnumber of items to reduce
ina system input iterator
outa system output iterator
opthe binary reduction operator
identitythe identity element
temp_storagesome temporary storage

◆ for_each()

template<typename system_tag , typename Iterator , typename Functor >
void cugar::for_each ( const uint64  n,
const Iterator  in,
Functor  functor 
)

invoke a functor for each element of the given sequence

◆ inclusive_scan()

template<typename system_tag , typename InputIterator , typename OutputIterator , typename BinaryOp >
void cugar::inclusive_scan ( const uint32  n,
InputIterator  in,
OutputIterator  out,
BinaryOp  op,
cugar::vector< system_tag, uint8 > &  temp_storage 
)

system-wide inclusive scan

Parameters
nnumber of items to reduce
ina system input iterator
outa system output iterator
opthe binary reduction operator
temp_storagesome temporary storage

◆ is_segment_sorted()

template<typename system_tag , typename Iterator , typename Headflags >
bool cugar::is_segment_sorted ( const uint32  n,
const Iterator  values,
const Headflags  flags 
)

return true if the items in the range [0,n) are sorted by segment, where the beginning of each segment is identified by a set head flag

◆ is_sorted()

template<typename system_tag , typename Iterator >
bool cugar::is_sorted ( const uint32  n,
const Iterator  values 
)

return true if the items in the range [0,n) are sorted

◆ lower_bound()

template<typename system_tag , typename KeyIterator , typename ValueIterator , typename OutputIterator >
void cugar::lower_bound ( const uint32  n,
ValueIterator  values,
const uint32  n_keys,
KeyIterator  keys,
OutputIterator  indices 
)

system-wide lower_bound

Parameters
nnumber of input items
valuesa system input iterator of values to be searched
n_keysnumber of sorted keys
keysa system input iterator of sorted keys
indicesa system output iterator

◆ merge_by_key()

template<typename system_tag , typename key_iterator1 , typename key_iterator2 , typename value_iterator1 , typename value_iterator2 , typename key_output , typename value_output >
void cugar::merge_by_key ( const uint32  A_len,
const uint32  B_len,
const key_iterator1  A_keys,
const key_iterator2  B_keys,
const value_iterator1  A_values,
const value_iterator2  B_values,
key_output  C_keys,
value_output  C_values,
cugar::vector< system_tag, uint8 > &  temp_storage 
)

merge two sequences by key

Parameters
A_lennumber of input items in the first sequence
B_lennumber of input items in the second sequence
A_keysa system input iterator of keys to be merged from the first sequence
B_keysa system input iterator of keys to be merged from the second sequence
A_valuesa system input iterator of values to be merged from the first sequence
B_valuesa system input iterator of values to be merged from the second sequence
C_keysa system output iterator to the final merged keys
C_valuesa system output iterator of the final merged values
temp_storagesome temporary storage

◆ radix_sort() [1/2]

template<typename system_tag , typename KeyIterator >
void cugar::radix_sort ( const uint32  n,
KeyIterator  keys,
cugar::vector< system_tag, uint8 > &  temp_storage 
)

system-wide radix-sort

Parameters
nnumber of input items
keysa system input iterator of keys to be sorted
temp_storagesome temporary storage

◆ radix_sort() [2/2]

template<typename system_tag , typename KeyIterator , typename ValueIterator >
void cugar::radix_sort ( const uint32  n,
KeyIterator  keys,
ValueIterator  values,
cugar::vector< system_tag, uint8 > &  temp_storage 
)

system-wide radix-sort by key

Parameters
nnumber of input items
keysa system input iterator of keys to be sorted
valuesa system input iterator of values to be sorted
temp_storagesome temporary storage

◆ reduce()

template<typename system_tag , typename InputIterator , typename BinaryOp >
std::iterator_traits< InputIterator >::value_type cugar::reduce ( const uint32  n,
InputIterator  in,
BinaryOp  op,
cugar::vector< system_tag, uint8 > &  temp_storage 
)

system-wide reduce

Parameters
nnumber of items to reduce
ina system iterator
opthe binary reduction operator
temp_storagesome temporary storage

◆ reduce_by_key()

template<typename system_tag , typename KeyIterator , typename ValueIterator , typename OutputKeyIterator , typename OutputValueIterator , typename ReductionOp >
uint32 cugar::reduce_by_key ( const uint32  n,
KeyIterator  keys_in,
ValueIterator  values_in,
OutputKeyIterator  keys_out,
OutputValueIterator  values_out,
ReductionOp  reduction_op,
cugar::vector< system_tag, uint8 > &  temp_storage 
)

system-wide run-length encode

Parameters
nnumber of input items
keys_ina system input iterator
values_ina system input iterator
keys_outa system output iterator
values_outa system output iterator
reduction_opa reduction operator
temp_storagesome temporary storage
Returns
the number of copied items

◆ runlength_encode()

template<typename system_tag , typename InputIterator , typename OutputIterator , typename CountIterator >
uint32 cugar::runlength_encode ( const uint32  n,
InputIterator  in,
OutputIterator  out,
CountIterator  counts,
cugar::vector< system_tag, uint8 > &  temp_storage 
)

system-wide run-length encode

Parameters
nnumber of input items
ina system input iterator
outa system output iterator
countsa system output count iterator
temp_storagesome temporary storage
Returns
the number of copied items

◆ transform() [1/2]

template<typename system_tag , typename Iterator , typename Output , typename Functor >
void cugar::transform ( const uint32  n,
const Iterator  in,
const Output  out,
const Functor  functor 
)

apply a functor to each element of the given sequence

◆ transform() [2/2]

template<typename system_tag , typename Iterator1 , typename Iterator2 , typename Output , typename Functor >
void cugar::transform ( const uint32  n,
const Iterator1  in1,
const Iterator2  in2,
const Output  out,
const Functor  functor 
)

apply a binary functor to each pair of elements of the given sequences

◆ upper_bound()

template<typename system_tag , typename KeyIterator , typename ValueIterator , typename OutputIterator >
void cugar::upper_bound ( const uint32  n,
ValueIterator  values,
const uint32  n_keys,
KeyIterator  keys,
OutputIterator  indices 
)

system-wide upper_bound

Parameters
nnumber of input items
valuesa system input iterator of values to be searched
n_keysnumber of sorted keys
keysa system input iterator of sorted keys
indicesa system output iterator