STLdoc
STLdocumentation
|
The Concurrency
namespace provides classes and functions that provide access to the Concurrency Runtime, a concurrent programming framework for C++. For more information, see Concurrency Runtime.
More...
Namespaces | |
details | |
direct3d | |
extensibility | |
fast_math | |
Functions in the fast_math namespace have lower accuracy, and support only single-precision float. | |
graphics | |
precise_math | |
Functions in the precise_math namespace have higher accuracy, but require double-precision support, which not all accelerators do. | |
Classes | |
class | _AllocatedBufferHolder |
struct | _Binary_transform_impl_helper |
struct | _Binary_transform_impl_helper< std::random_access_iterator_tag, std::random_access_iterator_tag, std::random_access_iterator_tag > |
class | _Continuation_func_transformer |
A helper class template that transforms a continuation lambda that either takes or returns void, or both, into a lambda that takes and returns a non-void type (details::_Unit_type is used to substitute for void). This is to minimize the special handling required for 'void'. More... | |
class | _Continuation_func_transformer< _InType, void > |
class | _Continuation_func_transformer< void, _OutType > |
class | _Continuation_func_transformer< void, void > |
class | _Greedy_node |
Helper class used in multi-type greedy join blocks Ordered node is a single-target, single-source ordered propagator block More... | |
class | _Init_func_transformer |
class | _Init_func_transformer< void > |
class | _Iterator_helper |
class | _Iterator_helper< _Random_iterator, std::random_access_iterator_tag > |
class | _Join_node |
Defines a block allowing sources of distinct types to be joined. Join node is a single-target, multi-source ordered propagator block More... | |
class | _Network_link_iterator |
Const iterator for network link registry. Message blocks should use the link_registry::iterator type for iteration. More... | |
class | _Non_greedy_node |
Helper class used in multi-type non-greedy join blocks Ordered node is a single-target, single-source ordered propagator block More... | |
class | _Order_combinable |
class | _Order_node_base |
Base class for Helper node used in multi-type join and choice blocks Order node is a single-target, single-source ordered propagator block The main property of an order node is that it accepts a message of _Type and outputs a message of int, with some unique assigned index number. More... | |
class | _Parallel_chunk_helper |
class | _Parallel_chunk_helper_invoke |
class | _Parallel_chunk_helper_invoke< _Random_iterator, _Index_type, _Function, false > |
class | _Parallel_fixed_chunk_helper |
class | _Parallel_for_each_helper |
class | _Parallel_localized_chunk_helper |
class | _Parallel_reduce_fixed_worker |
struct | _Parallel_reduce_forward_executor_helper |
class | _Parallel_transform_binary_helper |
class | _Parallel_transform_unary_helper |
struct | _Radix_sort_default_function |
class | _Range |
struct | _Reduce_functor_helper |
class | _Reserving_node |
Helper class used in multi-type choice blocks Ordered node is a single-target, single-source ordered propagator block More... | |
class | _Source_link_iterator |
Const Iterator for referenced link manager. More... | |
class | _Tiled_index_base |
A _Tiled_index_base is the base class of all three kinds of tiled_index to share the common code. More... | |
struct | _Unary_transform_impl_helper |
struct | _Unary_transform_impl_helper< std::random_access_iterator_tag, std::random_access_iterator_tag > |
struct | _Unwrap |
struct | _Unwrap< std::tuple< _Types...> > |
Template specialization used to unwrap the types from within a tuple. More... | |
class | _Worker_proxy |
class | accelerator |
Class represents a accelerator abstraction for C++ AMP data-parallel devices More... | |
class | accelerator_view |
Class represents a virtual device abstraction on a C++ AMP data-parallel accelerator More... | |
class | accelerator_view_removed |
Exception thrown when an underlying DirectX call fails due to the Windows timeout detection and recovery mechanism More... | |
class | affinity_partitioner |
The affinity_partitioner class is similar to the static_partitioner class, but it improves cache affinity by its choice of mapping subranges to worker threads. It can improve performance significantly when a loop is re-executed over the same data set, and the data fits in cache. Note that the same affinity_partitioner object must be used with subsequent iterations of a parallel loop that is executed over a particular data set, to benefit from data locality. More... | |
class | agent |
A class intended to be used as a base class for all independent agents. It is used to hide state from other agents and interact using message-passing. More... | |
class | array |
An array is a multi-dimensional data aggregate on a accelerator_view. More... | |
class | array_view |
An array_view is an N-dimensional view over data held in another container (such as array<T,N> or other container. It exposes an indexing interface congruent to that of array<T,N>). More... | |
class | array_view< const _Value_type, _Rank > |
class | auto_partitioner |
The auto_partitioner class represents the default method parallel_for , parallel_for_each and parallel_transform use to partition the range they iterates over. This method of partitioning employes range stealing for load balancing as well as per-iterate cancellation. More... | |
class | bad_target |
This class describes an exception thrown when a messaging block is given a pointer to a target which is invalid for the operation being performed. More... | |
class | call |
A call messaging block is a multi-source, ordered target_block that invokes a specified function when receiving a message. More... | |
class | cancellation_token |
The cancellation_token class represents the ability to determine whether some operation has been requested to cancel. A given token can be associated with a task_group , structured_task_group , or task to provide implicit cancellation. It can also be polled for cancellation or have a callback registered for if and when the associated cancellation_token_source is canceled. More... | |
class | cancellation_token_registration |
The cancellation_token_registration class represents a callback notification from a cancellation_token . When the register method on a cancellation_token is used to receive notification of when cancellation occurs, a cancellation_token_registration object is returned as a handle to the callback so that the caller can request a specific callback no longer be made through use of the deregister method. More... | |
class | cancellation_token_source |
The cancellation_token_source class represents the ability to cancel some cancelable operation. More... | |
class | choice |
A choice messaging block is a multi-source, single-target block that represents a control-flow interaction with a set of sources. The choice block will wait for any one of multiple sources to produce a message and will propagate the index of the source that produced the message. More... | |
class | combinable |
The combinable<T> object is intended to provide thread-private copies of data, to perform lock-free thread-local sub-computations during parallel algorithms. At the end of the parallel operation, the thread-private sub-computations can then be merged into a final result. This class can be used instead of a shared variable, and can result in a performance improvement if there would otherwise be a lot of contention on that shared variable. More... | |
class | completion_future |
Class represents a future corresponding to a C++ AMP asynchronous operation More... | |
class | concurrent_priority_queue |
The concurrent_priority_queue class is a container that allows multiple threads to concurrently push and pop items. Items are popped in priority order where priority is determined by a functor supplied as a template argument. More... | |
class | concurrent_queue |
The concurrent_queue class is a sequence container class that allows first-in, first-out access to its elements. It enables a limited set of concurrency-safe operations, such as push and try_pop . More... | |
class | concurrent_unordered_map |
The concurrent_unordered_map class is a concurrency-safe container that controls a varying-length sequence of elements of type std::pair<const _Key_type, _Element_type> . The sequence is represented in a way that enables concurrency-safe append, element access, iterator access, and iterator traversal operations. More... | |
class | concurrent_unordered_multimap |
The concurrent_unordered_multimap class is an concurrency-safe container that controls a varying-length sequence of elements of type std::pair<const _Key_type, _Element_type> . The sequence is represented in a way that enables concurrency-safe append, element access, iterator access and iterator traversal operations. More... | |
class | concurrent_unordered_multiset |
The concurrent_unordered_multiset class is an concurrency-safe container that controls a varying-length sequence of elements of type _Key_type. The sequence is represented in a way that enables concurrency-safe append, element access, iterator access and iterator traversal operations. More... | |
class | concurrent_unordered_set |
The concurrent_unordered_set class is an concurrency-safe container that controls a varying-length sequence of elements of type _Key_type. The sequence is represented in a way that enables concurrency-safe append, element access, iterator access and iterator traversal operations. More... | |
class | concurrent_vector |
The concurrent_vector class is a sequence container class that allows random access to any element. It enables concurrency-safe append, element access, iterator access, and iterator traversal operations. More... | |
class | context_self_unblock |
This class describes an exception thrown when the Unblock method of a Context object is called from the same context. This would indicate an attempt by a given context to unblock itself. More... | |
class | context_unblock_unbalanced |
This class describes an exception thrown when calls to the Block and Unblock methods of a Context object are not properly paired. More... | |
class | critical_section |
A non-reentrant mutex which is explicitly aware of the Concurrency Runtime. More... | |
class | default_scheduler_exists |
This class describes an exception thrown when the Scheduler::SetDefaultSchedulerPolicy method is called when a default scheduler already exists within the process. More... | |
class | event |
A manual reset event which is explicitly aware of the Concurrency Runtime. More... | |
class | extent |
The extent<N> type represents an N-dimensional vector of int which specifies the bounds of an N-dimensional space with an origin of 0. The values in the coordinate vector are ordered from most-significant to least-significant. Thus, in 2-dimensional space, the extent vector (5,3) represents a space with 5 rows and 3 columns. More... | |
class | improper_lock |
This class describes an exception thrown when a lock is acquired improperly. More... | |
class | improper_scheduler_attach |
This class describes an exception thrown when the Attach method is called on a Scheduler object which is already attached to the current context. More... | |
class | improper_scheduler_detach |
This class describes an exception thrown when the CurrentScheduler::Detach method is called on a context which has not been attached to any scheduler using the Attach method of a Scheduler object. More... | |
class | improper_scheduler_reference |
This class describes an exception thrown when the Reference method is called on a Scheduler object that is shutting down, from a context that is not part of that scheduler. More... | |
class | index |
Define an N-dimensional index point; which may also be viewed as a vector based at the origin in N-space. More... | |
class | invalid_compute_domain |
Exception thrown when the runtime fails to launch a kernel using the compute domain specified at the parallel_for_each call site. More... | |
class | invalid_link_target |
This class describes an exception thrown when the link_target method of a messaging block is called and the messaging block is unable to link to the target. This can be the result of exceeding the number of links the messaging block is allowed or attempting to link a specific target twice to the same source. More... | |
class | invalid_multiple_scheduling |
This class describes an exception thrown when a task_handle object is scheduled multiple times using the run method of a task_group or structured_task_group object without an intervening call to either the wait or run_and_wait methods. More... | |
class | invalid_operation |
This class describes an exception thrown when an invalid operation is performed that is not more accurately described by another exception type thrown by the Concurrency Runtime. More... | |
class | invalid_oversubscribe_operation |
This class describes an exception thrown when the Context::Oversubscribe method is called with the _BeginOversubscription parameter set to false without a prior call to the Context::Oversubscribe method with the _BeginOversubscription parameter set to true . More... | |
class | invalid_scheduler_policy_key |
This class describes an exception thrown when an invalid or unknown key is passed to a SchedulerPolicy object constructor, or the SetPolicyValue method of a SchedulerPolicy object is passed a key that must be changed using other means such as the SetConcurrencyLimits method. More... | |
class | invalid_scheduler_policy_thread_specification |
This class describes an exception thrown when an attempt is made to set the concurrency limits of a SchedulerPolicy object such that the value of the MinConcurrency key is less than the value of the MaxConcurrency key. More... | |
class | invalid_scheduler_policy_value |
This class describes an exception thrown when a policy key of a SchedulerPolicy object is set to an invalid value for that key. More... | |
class | ISource |
The ISource class is the interface for all source blocks. Source blocks propagate messages to ITarget blocks. More... | |
class | ITarget |
The ITarget class is the interface for all target blocks. Target blocks consume messages offered to them by ISource blocks. More... | |
class | join |
A join messaging block is a single-target, multi-source, ordered propagator_block which combines together messages of type _Type from each of its sources. More... | |
class | location |
An abstraction of a physical location on hardware. More... | |
class | message |
The basic message envelope containing the data payload being passed between messaging blocks. More... | |
class | message_not_found |
This class describes an exception thrown when a messaging block is unable to find a requested message. More... | |
class | message_processor |
The message_processor class is the abstract base class for processing of message objects. There is no guarantee on the ordering of the messages. More... | |
class | missing_wait |
This class describes an exception thrown when there are tasks still scheduled to a task_group or structured_task_group object at the time that object's destructor executes. This exception will never be thrown if the destructor is reached because of a stack unwinding as the result of an exception. More... | |
class | multi_link_registry |
The multi_link_registry object is a network_link_registry that manages multiple source blocks or multiple target blocks. More... | |
class | multitype_join |
A multitype_join messaging block is a multi-source, single-target messaging block that combines together messages of different types from each of its sources and offers a tuple of the combined messages to its targets. More... | |
class | nested_scheduler_missing_detach |
This class describes an exception thrown when the Concurrency Runtime detects that you neglected to call the CurrentScheduler::Detach method on a context that attached to a second scheduler using the Attach method of the Scheduler object. More... | |
class | network_link_registry |
The network_link_registry abstract base class manages the links between source and target blocks. More... | |
class | operation_timed_out |
This class describes an exception thrown when an operation has timed out. More... | |
class | ordered_message_processor |
An ordered_message_processor is a message_processor that allows message blocks to process messages in the order they were received. More... | |
class | out_of_memory |
Exception thrown when an underlying OS/DirectX call fails due to lack of system or device memory More... | |
class | overwrite_buffer |
An overwrite_buffer messaging block is a multi-target, multi-source, ordered propagator_block capable of storing a single message at a time. New messages overwrite previously held ones. More... | |
class | propagator_block |
The propagator_block class is an abstract base class for message blocks that are both a source and target. It combines the functionality of both the source_block and target_block classes. More... | |
class | reader_writer_lock |
A writer-preference queue-based reader-writer lock with local only spinning. The lock grants first in - first out (FIFO) access to writers and starves readers under a continuous load of writers. More... | |
class | runtime_exception |
Exception thrown due to a C++ AMP runtime_exception. This is the base type for all C++ AMP exception types. More... | |
class | scheduler_not_attached |
This class describes an exception thrown when an operation is performed which requires a scheduler to be attached to the current context and one is not. More... | |
struct | scheduler_ptr |
Represents a pointer to a scheduler. This class exists to allow the the specification of a shared lifetime by using shared_ptr or just a plain reference by using raw pointer. More... | |
class | scheduler_resource_allocation_error |
This class describes an exception thrown because of a failure to acquire a critical resource in the Concurrency Runtime. More... | |
class | scheduler_worker_creation_error |
This class describes an exception thrown because of a failure to create a worker execution context in the Concurrency Runtime. More... | |
class | simple_partitioner |
The simple_partitioner class represents a static partitioning of the range iterated over by parallel_for . The partitioner divides the range into chunks such that each chunk has at least the number of iterations specified by the chunk size. More... | |
class | single_assignment |
A single_assignment messaging block is a multi-target, multi-source, ordered propagator_block capable of storing a single, write-once message . More... | |
class | single_link_registry |
The single_link_registry object is a network_link_registry that manages only a single source or target block. More... | |
class | source_block |
The source_block class is an abstract base class for source-only blocks. The class provides basic link management functionality as well as common error checks. More... | |
class | source_link_manager |
The source_link_manager object manages messaging block network links to ISource blocks. More... | |
class | static_partitioner |
The static_partitioner class represents a static partitioning of the range iterated over by parallel_for . The partitioner divides the range into as many chunks as there are workers available to the underyling scheduler. More... | |
class | structured_task_group |
The structured_task_group class represents a highly structured collection of parallel work. You can queue individual parallel tasks to a structured_task_group using task_handle objects, and wait for them to complete, or cancel the task group before they have finished executing, which will abort any tasks that have not begun execution. More... | |
class | target_block |
The target_block class is an abstract base class that provides basic link management functionality and error checking for target only blocks. More... | |
class | task |
The Parallel Patterns Library (PPL) task class. A task object represents work that can be executed asynchronously, and concurrently with other tasks and parallel work produced by parallel algorithms in the Concurrency Runtime. It produces a result of type _ResultType on successful completion. Tasks of type task<void> produce no result. A task can be waited upon and canceled independently of other tasks. It can also be composed with other tasks using continuations(then ), and join(when_all ) and choice(when_any ) patterns. More... | |
class | task< void > |
The Parallel Patterns Library (PPL) task class. A task object represents work that can be executed asynchronously, and concurrently with other tasks and parallel work produced by parallel algorithms in the Concurrency Runtime. It produces a result of type _ResultType on successful completion. Tasks of type task<void> produce no result. A task can be waited upon and canceled independently of other tasks. It can also be composed with other tasks using continuations(then ), and join(when_all ) and choice(when_any ) patterns. More... | |
class | task_canceled |
This class describes an exception thrown by the PPL tasks layer in order to force the current task to cancel. It is also thrown by the get() method on task, for a canceled task. More... | |
class | task_completion_event |
The task_completion_event class allows you to delay the execution of a task until a condition is satisfied, or start a task in response to an external event. More... | |
class | task_completion_event< void > |
The task_completion_event class allows you to delay the execution of a task until a condition is satisfied, or start a task in response to an external event. More... | |
class | task_continuation_context |
The task_continuation_context class allows you to specify where you would like a continuation to be executed. It is only useful to use this class from a Windows Store app. For non-Windows Store apps, the task continuation's execution context is determined by the runtime, and not configurable. More... | |
class | task_group |
The task_group class represents a collection of parallel work which can be waited on or canceled. More... | |
class | task_handle |
The task_handle class represents an individual parallel work item. It encapsulates the instructions and the data required to execute a piece of work. More... | |
class | task_options |
Represents the allowed options for creating a task More... | |
class | tile_barrier |
The tile_barrier class is a capability class that is only creatable by the system, and passed to a tiled parallel_for_each lambda as part of the tiled_index parameter. It provides wait methods whose purpose is to synchronize execution of threads running within the thread group (tile). More... | |
class | tiled_extent |
A tiled_extent is an extent of 1 to 3 dimensions which also subdivides the extent space into 1-, 2-, or 3-dimensional tiles. It has three specialized forms: tiled_extent<_Dim0>, tiled_extent<_Dim0,_Dim1>, and tiled_extent<_Dim0,_Dim1,_Dim2>, where _Dim0-2 specify the length of the tile along each dimension, with _Dim0 being the most-significant dimension and _Dim2 being the least-significant. More... | |
class | tiled_extent< _Dim0, 0, 0 > |
class | tiled_extent< _Dim0, _Dim1, 0 > |
class | tiled_index |
A tiled_index is a set of indices of 1 to 3 dimensions which have been subdivided into 1-, 2-, or 3-dimensional tiles in a tiled_extent. It has three specialized forms: tiled_index<_Dim0>, tiled_index<_Dim0, _Dim1>, and tiled_index<_Dim0, _Dim1, _Dim2>, where _Dim0-2 specify the length of the tile along the each dimension, with _Dim0 being the most-significant dimension and _Dim2 being the least-significant. More... | |
class | tiled_index< _Dim0, 0, 0 > |
class | tiled_index< _Dim0, _Dim1, 0 > |
class | timer |
A timer messaging block is a single-target source_block capable of sending a message to its target after a specified time period has elapsed or at specific intervals. More... | |
class | transformer |
A transformer messaging block is a single-target, multi-source, ordered propagator_block which can accept messages of one type and is capable of storing an unbounded number of messages of a different type. More... | |
class | unbounded_buffer |
An unbounded_buffer messaging block is a multi-target, multi-source, ordered propagator_block capable of storing an unbounded number of messages. More... | |
class | unsupported_feature |
Exception thrown when an unsupported feature is used More... | |
class | unsupported_os |
This class describes an exception thrown when an unsupported operating system is used. More... | |
Typedefs | |
typedef __int32 | runtime_object_identity |
Each message instance has an identity that follows it as it is cloned and passed between messaging components. This cannot be the address of the message object. More... | |
typedef ::Concurrency::details::_NonReentrantPPLLock::_Scoped_lock | _NR_lock |
A lock holder that acquires a non-reentrant lock on instantiation and releases it on destruction. More... | |
typedef ::Concurrency::details::_ReentrantPPLLock::_Scoped_lock | _R_lock |
A lock holder that acquires a reentrant lock on instantiation and releases it on destruction More... | |
typedef details::_Reference_counted_obj_ptr< details::_Accelerator_view_impl > | _Accelerator_view_impl_ptr |
typedef details::_Reference_counted_obj_ptr< details::_Accelerator_impl > | _Accelerator_impl_ptr |
typedef details::_Reference_counted_obj_ptr< details::_Buffer > | _Buffer_ptr |
typedef details::_Reference_counted_obj_ptr< details::_Texture > | _Texture_ptr |
typedef details::_Reference_counted_obj_ptr< details::_Sampler > | _Sampler_ptr |
typedef details::_Reference_counted_obj_ptr< details::_Ubiquitous_buffer > | _Ubiquitous_buffer_ptr |
typedef details::_Reference_counted_obj_ptr< details::_Event_impl > | _Event_impl_ptr |
typedef details::_Reference_counted_obj_ptr< details::_View_shape > | _View_shape_ptr |
typedef void(__cdecl * | TaskProc) (void *) |
Concurrency::details contains definitions of support routines in the public namespaces and one or more macros. Users should not directly interact with this internal namespace. More... | |
typedef void(__cdecl * | TaskProc_t) (void *) |
An elementary abstraction for a task, defined as void (__cdecl * TaskProc_t)(void *) . A TaskProc is called to invoke the body of a task. More... | |
typedef task_group_status | task_status |
A type that represents the terminal state of a task. Valid values are completed and canceled . More... | |
Enumerations | |
enum | message_status { accepted, declined, postponed, missed } |
The valid responses for an offer of a message object to a block. More... | |
enum | join_type { greedy = 0, non_greedy = 1 } |
The type of a join messaging block. More... | |
enum | agent_status { agent_created, agent_runnable, agent_started, agent_done, agent_canceled } |
The valid states for an agent . More... | |
enum | access_type { access_type_none = 0, access_type_read = (1 << 0), access_type_write = (1 << 1), access_type_read_write = access_type_read | access_type_write, access_type_auto = (1 << 31) } |
Enumeration type used to denote the various types of access to data. More... | |
enum | queuing_mode { queuing_mode_immediate, queuing_mode_automatic } |
Queuing modes supported for accelerator views More... | |
enum | ConcRT_EventType { CONCRT_EVENT_GENERIC = 0, CONCRT_EVENT_START = 1, CONCRT_EVENT_END = 2, CONCRT_EVENT_BLOCK = 3, CONCRT_EVENT_UNBLOCK = 4, CONCRT_EVENT_YIELD = 5, CONCRT_EVENT_IDLE = 6, CONCRT_EVENT_ATTACH = 7, CONCRT_EVENT_DETACH = 8 } |
The types of events that can be traced using the tracing functionality offered by the Concurrency Runtime. More... | |
enum | Concrt_TraceFlags { SchedulerEventFlag = 0x1, ContextEventFlag = 0x2, VirtualProcessorEventFlag = 0x4, ResourceManagerEventFlag = 0x8, PPLEventFlag = 0x10, AgentEventFlag = 0x20, AllEventsFlag = 0xFFFFFFFF } |
Trace flags for the event types More... | |
enum | Agents_EventType { AGENTS_EVENT_CREATE = 0, AGENTS_EVENT_START = 1, AGENTS_EVENT_END = 2, AGENTS_EVENT_DESTROY = 3, AGENTS_EVENT_SCHEDULE = 4, AGENTS_EVENT_LINK = 5, AGENTS_EVENT_UNLINK = 6, AGENTS_EVENT_NAME = 7 } |
The types of events that can be traced using the tracing functionality offered by the Agents Library More... | |
enum | task_group_status { not_complete, completed, canceled } |
Describes the execution status of a task_group or structured_task_group object. A value of this type is returned by numerous methods that wait on tasks scheduled to a task group to complete. More... | |
Functions | |
template<typename _Type1 , typename _Type2 , typename... _Types> | |
choice< std::tuple< _Type1, _Type2, _Types...> > | make_choice (_Type1 _Item1, _Type2 _Item2, _Types..._Items) |
Constructs a choice messaging block from an optional Scheduler or ScheduleGroup and two or more input sources. More... | |
template<typename _Type1 , typename _Type2 , typename... _Types> | |
multitype_join< std::tuple< _Type1, _Type2, _Types...> > | make_join (_Type1 _Item1, _Type2 _Item2, _Types..._Items) |
Constructs a non_greedy multitype_join messaging block from an optional Scheduler or ScheduleGroup and two or more input sources. More... | |
template<typename _Type1 , typename _Type2 , typename... _Types> | |
multitype_join< std::tuple< _Type1, _Type2, _Types...>, greedy > | make_greedy_join (_Type1 _Item1, _Type2 _Item2, _Types..._Items) |
Constructs a greedy multitype_join messaging block from an optional Scheduler or ScheduleGroup and two or more input sources. More... | |
template<class _Type > | |
_Type | _Receive_impl (ISource< _Type > *_Src, unsigned int _Timeout, typename ITarget< _Type >::filter_method const *_Filter_proc) |
A general receive implementation, allowing a context to wait for data from exactly one source and filter the values that are accepted. If the specified timeout is not COOPERATIVE_TIMEOUT_INFINITE, an exception (operation_timed_out) will be thrown if the specified amount of time expires before a message is received. Note that zero length timeouts should likely use try_receive as opposed to receive with a timeout of zero as it is more efficient and does not throw exceptions on timeouts. More... | |
template<class _Type > | |
_Type | receive (_Inout_ ISource< _Type > *_Src, unsigned int _Timeout=COOPERATIVE_TIMEOUT_INFINITE) |
A general receive implementation, allowing a context to wait for data from exactly one source and filter the values that are accepted. More... | |
template<class _Type > | |
_Type | receive (_Inout_ ISource< _Type > *_Src, typename ITarget< _Type >::filter_method const &_Filter_proc, unsigned int _Timeout=COOPERATIVE_TIMEOUT_INFINITE) |
A general receive implementation, allowing a context to wait for data from exactly one source and filter the values that are accepted. More... | |
template<class _Type > | |
_Type | receive (ISource< _Type > &_Src, unsigned int _Timeout=COOPERATIVE_TIMEOUT_INFINITE) |
A general receive implementation, allowing a context to wait for data from exactly one source and filter the values that are accepted. More... | |
template<class _Type > | |
_Type | receive (ISource< _Type > &_Src, typename ITarget< _Type >::filter_method const &_Filter_proc, unsigned int _Timeout=COOPERATIVE_TIMEOUT_INFINITE) |
A general receive implementation, allowing a context to wait for data from exactly one source and filter the values that are accepted. More... | |
template<class _Type > | |
bool | _Try_receive_impl (ISource< _Type > *_Src, _Type &_value, typename ITarget< _Type >::filter_method const *_Filter_proc) |
Helper function that implements try_receive A general try-receive implementation, allowing a context to look for data from exactly one source and filter the values that are accepted. If the data is not ready, try_receive will return false. More... | |
template<class _Type > | |
bool | try_receive (_Inout_ ISource< _Type > *_Src, _Type &_value) |
A general try-receive implementation, allowing a context to look for data from exactly one source and filter the values that are accepted. If the data is not ready, the method will return false. More... | |
template<class _Type > | |
bool | try_receive (_Inout_ ISource< _Type > *_Src, _Type &_value, typename ITarget< _Type >::filter_method const &_Filter_proc) |
A general try-receive implementation, allowing a context to look for data from exactly one source and filter the values that are accepted. If the data is not ready, the method will return false. More... | |
template<class _Type > | |
bool | try_receive (ISource< _Type > &_Src, _Type &_value) |
A general try-receive implementation, allowing a context to look for data from exactly one source and filter the values that are accepted. If the data is not ready, the method will return false. More... | |
template<class _Type > | |
bool | try_receive (ISource< _Type > &_Src, _Type &_value, typename ITarget< _Type >::filter_method const &_Filter_proc) |
A general try-receive implementation, allowing a context to look for data from exactly one source and filter the values that are accepted. If the data is not ready, the method will return false. More... | |
template<class _Type > | |
bool | send (_Inout_ ITarget< _Type > *_Trg, const _Type &_Data) |
A synchronous send operation, which waits until the target either accepts or declines the message. More... | |
template<class _Type > | |
bool | send (ITarget< _Type > &_Trg, const _Type &_Data) |
A synchronous send operation, which waits until the target either accepts or declines the message. More... | |
template<class _Type > | |
bool | asend (_Inout_ ITarget< _Type > *_Trg, const _Type &_Data) |
An asynchronous send operation, which schedules a task to propagate the data to the target block. More... | |
template<class _Type > | |
bool | asend (ITarget< _Type > &_Trg, const _Type &_Data) |
An asynchronous send operation, which schedules a task to propagate the value to the target block. More... | |
template<class _Type > | |
void | Trace_agents_register_name (_Inout_ _Type *_PObject, _In_z_ const wchar_t *_Name) |
Associates the given name to the message block or agent in the ETW trace. More... | |
template<int _Rank, template< int > class _Tuple_type> | |
bool | operator== (const _Tuple_type< _Rank > &_Lhs, const _Tuple_type< _Rank > &_Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
bool | operator!= (const _Tuple_type< _Rank > &_Lhs, const _Tuple_type< _Rank > &_Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator+ (const _Tuple_type< _Rank > &_Lhs, const _Tuple_type< _Rank > &_Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator- (const _Tuple_type< _Rank > &_Lhs, const _Tuple_type< _Rank > &_Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator+ (const _Tuple_type< _Rank > &_Lhs, typename _Tuple_type< _Rank >::value_type _Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator+ (typename _Tuple_type< _Rank >::value_type _Lhs, const _Tuple_type< _Rank > &_Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator- (const _Tuple_type< _Rank > &_Lhs, typename _Tuple_type< _Rank >::value_type _Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator- (typename _Tuple_type< _Rank >::value_type _Lhs, const _Tuple_type< _Rank > &_Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator* (const _Tuple_type< _Rank > &_Lhs, typename _Tuple_type< _Rank >::value_type _Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator* (typename _Tuple_type< _Rank >::value_type _Lhs, const _Tuple_type< _Rank > &_Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator/ (const _Tuple_type< _Rank > &_Lhs, typename _Tuple_type< _Rank >::value_type _Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator/ (typename _Tuple_type< _Rank >::value_type _Lhs, const _Tuple_type< _Rank > &_Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator% (const _Tuple_type< _Rank > &_Lhs, typename _Tuple_type< _Rank >::value_type _Rhs) __GPU |
template<int _Rank, template< int > class _Tuple_type> | |
_Tuple_type< _Rank > | operator% (typename _Tuple_type< _Rank >::value_type _Lhs, const _Tuple_type< _Rank > &_Rhs) __GPU |
template<typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (const array< _Value_type, _Rank > &_Src, array< _Value_type, _Rank > &_Dest) |
Asynchronously copies the contents of the source array into the destination array. More... | |
template<typename _Value_type , int _Rank> | |
void | copy (const array< _Value_type, _Rank > &_Src, array< _Value_type, _Rank > &_Dest) |
Copies the contents of the source array into the destination array. More... | |
template<typename InputIterator , typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (InputIterator _SrcFirst, InputIterator _SrcLast, array< _Value_type, _Rank > &_Dest) |
Asynchronously copies the elements in the range [_SrcFirst, _SrcLast) into the destination array. More... | |
template<typename InputIterator , typename _Value_type , int _Rank> | |
void | copy (InputIterator _SrcFirst, InputIterator _SrcLast, array< _Value_type, _Rank > &_Dest) |
Copies the elements in the range [_SrcFirst, _SrcLast) into the destination array. More... | |
template<typename InputIterator , typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (InputIterator _SrcFirst, array< _Value_type, _Rank > &_Dest) |
Asynchronously copies the elements beginning at _SrcFirst into the destination array. More... | |
template<typename InputIterator , typename _Value_type , int _Rank> | |
void | copy (InputIterator _SrcFirst, array< _Value_type, _Rank > &_Dest) |
Copies the elements beginning at _SrcFirst into the destination array. More... | |
template<typename OutputIterator , typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (const array< _Value_type, _Rank > &_Src, OutputIterator _DestIter) |
Asynchronously copies the contents of the array into the destination beginning at _DestIter. More... | |
template<typename OutputIterator , typename _Value_type , int _Rank> | |
void | copy (const array< _Value_type, _Rank > &_Src, OutputIterator _DestIter) |
Copies the contents of the array into the destination beginning at _DestIter. More... | |
template<typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (const array< _Value_type, _Rank > &_Src, const array_view< _Value_type, _Rank > &_Dest) |
Asynchronously copies the contents of the source array into the destination array_view. More... | |
template<typename _Value_type , int _Rank> | |
void | copy (const array< _Value_type, _Rank > &_Src, const array_view< _Value_type, _Rank > &_Dest) |
Copies the contents of the source array into the destination array_view. More... | |
template<typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (const array_view< const _Value_type, _Rank > &_Src, array< _Value_type, _Rank > &_Dest) |
Asynchronously copies the contents of the source array_view into the destination array. More... | |
template<typename _Value_type , int _Rank> | |
void | copy (const array_view< const _Value_type, _Rank > &_Src, array< _Value_type, _Rank > &_Dest) |
Copies the contents of the source array_view into the destination array. More... | |
template<typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (const array_view< _Value_type, _Rank > &_Src, array< _Value_type, _Rank > &_Dest) |
Asynchronously copies the contents of the source array_view into the destination array. More... | |
template<typename _Value_type , int _Rank> | |
void | copy (const array_view< _Value_type, _Rank > &_Src, array< _Value_type, _Rank > &_Dest) |
Copies the contents of the source array_view into the destination array. More... | |
template<typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (const array_view< const _Value_type, _Rank > &_Src, const array_view< _Value_type, _Rank > &_Dest) |
Asynchronously copies the contents of the source array_view into the destination array_view. More... | |
template<typename _Value_type , int _Rank> | |
void | copy (const array_view< const _Value_type, _Rank > &_Src, const array_view< _Value_type, _Rank > &_Dest) |
Copies the contents of the source array_view into the destination array_view. More... | |
template<typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (const array_view< _Value_type, _Rank > &_Src, const array_view< _Value_type, _Rank > &_Dest) |
Asynchronously copies the contents of the source array_view into the destination array_view. More... | |
template<typename _Value_type , int _Rank> | |
void | copy (const array_view< _Value_type, _Rank > &_Src, const array_view< _Value_type, _Rank > &_Dest) |
Copies the contents of the source array_view into the destination array_view. More... | |
template<typename InputIterator , typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (InputIterator _SrcFirst, InputIterator _SrcLast, const array_view< _Value_type, _Rank > &_Dest) |
Asynchronously copies the elements in the range [_SrcFirst, _SrcLast) into the destination array_view. More... | |
template<typename InputIterator , typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (InputIterator _SrcFirst, const array_view< _Value_type, _Rank > &_Dest) |
Asynchronously copies the elements beginning at _SrcFirst into the destination array_view. More... | |
template<typename InputIterator , typename _Value_type , int _Rank> | |
void | copy (InputIterator _SrcFirst, InputIterator _SrcLast, const array_view< _Value_type, _Rank > &_Dest) |
Copies the elements in the range [_SrcFirst, _SrcLast) into the destination array_view. More... | |
template<typename InputIterator , typename _Value_type , int _Rank> | |
void | copy (InputIterator _SrcFirst, const array_view< _Value_type, _Rank > &_Dest) |
Copies the contents of an STL container into the destination array_view. More... | |
template<typename OutputIterator , typename _Value_type , int _Rank> | |
concurrency::completion_future | copy_async (const array_view< _Value_type, _Rank > &_Src, OutputIterator _DestIter) |
Asynchronously copies the contents of the array_view into the destination beginning at _DestIter. More... | |
template<typename OutputIterator , typename _Value_type , int _Rank> | |
void | copy (const array_view< _Value_type, _Rank > &_Src, OutputIterator _DestIter) |
Copies the contents of the array_view into the destination beginning at _DestIter. More... | |
int | atomic_fetch_add (_Inout_ int *_Dest, int _Value) __GPU_ONLY |
Performs an atomic addition of _Value to the memory location pointed to by _Dest More... | |
unsigned int | atomic_fetch_add (_Inout_ unsigned int *_Dest, unsigned int _Value) __GPU_ONLY |
Performs an atomic addition of _Value to the memory location pointed to by _Dest More... | |
int | atomic_fetch_sub (_Inout_ int *_Dest, int _Value) __GPU_ONLY |
Performs an atomic subtraction of _Value from the memory location pointed to by _Dest More... | |
unsigned int | atomic_fetch_sub (_Inout_ unsigned int *_Dest, unsigned int _Value) __GPU_ONLY |
Performs an atomic subtraction of _Value from the memory location pointed to by _Dest More... | |
int | atomic_fetch_inc (_Inout_ int *_Dest) __GPU_ONLY |
Performs an atomic increment to the memory location pointed to by _Dest More... | |
unsigned int | atomic_fetch_inc (_Inout_ unsigned int *_Dest) __GPU_ONLY |
Performs an atomic increment to the memory location pointed to by _Dest More... | |
int | atomic_fetch_dec (_Inout_ int *_Dest) __GPU_ONLY |
Performs an atomic decrement to the memory location pointed to by _Dest More... | |
unsigned int | atomic_fetch_dec (_Inout_ unsigned int *_Dest) __GPU_ONLY |
Performs an atomic decrement to the memory location pointed to by _Dest More... | |
int | atomic_exchange (_Inout_ int *_Dest, int _Value) __GPU_ONLY |
Sets the value of location pointed to by _Dest to _Value as an atomic operation More... | |
unsigned int | atomic_exchange (_Inout_ unsigned int *_Dest, unsigned int _Value) __GPU_ONLY |
Sets the value of location pointed to by _Dest to _Value as an atomic operation More... | |
float | atomic_exchange (_Inout_ float *_Dest, float _Value) __GPU_ONLY |
Sets the value of location pointed to by _Dest to _Value as an atomic operation More... | |
bool | atomic_compare_exchange (_Inout_ int *_Dest, _Inout_ int *_Expected_value, int _Value) __GPU_ONLY |
Atomically, compares the value pointed to by _Dest for equality with that pointed to by _Expected_value, and if true, returns true and replaces the value with _Value, and if false, returns false and updates the value pointed to by _Expected_value with the value pointed to by _Dest More... | |
bool | atomic_compare_exchange (_Inout_ unsigned int *_Dest, _Inout_ unsigned int *_Expected_value, unsigned int _Value) __GPU_ONLY |
Atomically, compares the value pointed to by _Dest for equality with that pointed to by _Expected_value, and if true, returns true and replaces the value with _Value, and if false, returns false and updates the value pointed to by _Expected_value with the value pointed to by _Dest More... | |
int | atomic_fetch_max (_Inout_ int *_Dest, int _Value) __GPU_ONLY |
Atomically computes the maximum of _Value and the value of the memory location pointed to by _Dest, and stores the maximum value to the memory location More... | |
unsigned int | atomic_fetch_max (_Inout_ unsigned int *_Dest, unsigned int _Value) __GPU_ONLY |
Atomically computes the maximum of _Value and the value of the memory location pointed to by _Dest, and stores the maximum value to the memory location More... | |
int | atomic_fetch_min (_Inout_ int *_Dest, int _Value) __GPU_ONLY |
Atomically computes the minimum of _Value and the value of the memory location pointed to by _Dest, and stores the minimum value to the memory location More... | |
unsigned int | atomic_fetch_min (_Inout_ unsigned int *_Dest, unsigned int _Value) __GPU_ONLY |
Atomically computes the minimum of _Value and the value of the memory location pointed to by _Dest, and stores the minimum value to the memory location More... | |
int | atomic_fetch_and (_Inout_ int *_Dest, int _Value) __GPU_ONLY |
Performs an atomic bitwise and operation of _Value to the memory location pointed to by _Dest More... | |
unsigned int | atomic_fetch_and (_Inout_ unsigned int *_Dest, unsigned int _Value) __GPU_ONLY |
Performs an atomic bitwise and operation of _Value to the memory location pointed to by _Dest More... | |
int | atomic_fetch_or (_Inout_ int *_Dest, int _Value) __GPU_ONLY |
Performs an atomic bitwise or operation of _Value to the memory location pointed to by _Dest More... | |
unsigned int | atomic_fetch_or (_Inout_ unsigned int *_Dest, unsigned int _Value) __GPU_ONLY |
Performs an atomic bitwise or operation of _Value to the memory location pointed to by _Dest More... | |
int | atomic_fetch_xor (_Inout_ int *_Dest, int _Value) __GPU_ONLY |
Performs an atomic bitwise xor operation of _Value to the memory location pointed to by _Dest More... | |
unsigned int | atomic_fetch_xor (_Inout_ unsigned int *_Dest, unsigned int _Value) __GPU_ONLY |
Performs an atomic bitwise xor operation of _Value to the memory location pointed to by _Dest More... | |
template<int _Rank, typename _Kernel_type > | |
void | parallel_for_each (const extent< _Rank > &_Compute_domain, const _Kernel_type &_Kernel) |
Invokes a parallel computation of a kernel function over a compute domain on an accelerator_view. The accelerator_view is determined from the arrays and/or array_views captured by the kernel function, or if no accelerator_view can be derived, the default is chosen. More... | |
template<int _Dim0, int _Dim1, int _Dim2, typename _Kernel_type > | |
void | parallel_for_each (const tiled_extent< _Dim0, _Dim1, _Dim2 > &_Compute_domain, const _Kernel_type &_Kernel) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 3-dimensional regions. The accelerator is determined from the arrays and/or array_views captured by the kernel function, or if no accelerator can be derived, the default is chosen. More... | |
template<int _Dim0, int _Dim1, typename _Kernel_type > | |
void | parallel_for_each (const tiled_extent< _Dim0, _Dim1 > &_Compute_domain, const _Kernel_type &_Kernel) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 2-dimensional regions. The accelerator is determined from the arrays and/or array_views captured by the kernel function, or if no accelerator can be derived, the default is chosen. More... | |
template<int _Dim0, typename _Kernel_type > | |
void | parallel_for_each (const tiled_extent< _Dim0 > &_Compute_domain, const _Kernel_type &_Kernel) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 1-dimensional regions. The accelerator is determined from the arrays and/or array_views captured by the kernel function, or if no accelerator can be derived, the default is chosen. More... | |
template<int _Rank, typename _Kernel_type > | |
void | parallel_for_each (const accelerator_view &_Accl_view, const extent< _Rank > &_Compute_domain, const _Kernel_type &_Kernel) |
Invokes a parallel computation of a kernel function over a compute domain on an accelerator. More... | |
template<int _Dim0, int _Dim1, int _Dim2, typename _Kernel_type > | |
void | parallel_for_each (const accelerator_view &_Accl_view, const tiled_extent< _Dim0, _Dim1, _Dim2 > &_Compute_domain, const _Kernel_type &_Kernel) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 3-dimensional regions. More... | |
template<int _Dim0, int _Dim1, typename _Kernel_type > | |
void | parallel_for_each (const accelerator_view &_Accl_view, const tiled_extent< _Dim0, _Dim1 > &_Compute_domain, const _Kernel_type &_Kernel) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 2-dimensional regions. More... | |
template<int _Dim0, typename _Kernel_type > | |
void | parallel_for_each (const accelerator_view &_Accl_view, const tiled_extent< _Dim0 > &_Compute_domain, const _Kernel_type &_Kernel) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 1-dimensional regions. More... | |
void | direct3d_abort () __GPU_ONLY |
void | direct3d_errorf (const char *,...) __GPU_ONLY |
void | direct3d_printf (const char *,...) __GPU_ONLY |
void | all_memory_fence (const tile_barrier &_Barrier) __GPU_ONLY |
Memory fences and tile barriers. More... | |
void | global_memory_fence (const tile_barrier &_Barrier) __GPU_ONLY |
Ensures that global memory accesses are visible to other threads in the thread tile, and are executed according to program order More... | |
void | tile_static_memory_fence (const tile_barrier &_Barrier) __GPU_ONLY |
Ensures that tile_static memory accesses are visible to other threads in the thread tile, and are executed according to program order More... | |
_AMPIMP void __cdecl | amp_uninitialize () |
Uninitializes the C++ AMP runtime. It is legal to call this function multiple times during an applications lifetime. Calling any C++ AMP API afer calling this function will reinitialize the C++ AMP runtime. Note that it is illegal to use C++ AMP objects across calls to this function and doing so will result in undefined behavior. Also, concurrently calling this function and any other AMP APIs is illegal and would result in undefined behavior. More... | |
_CRTIMP void __cdecl | wait (unsigned int _Milliseconds) |
Pauses the current context for a specified amount of time. More... | |
_CRTIMP void *__cdecl | Alloc (size_t _NumBytes) |
Allocates a block of memory of the size specified from the Concurrency Runtime Caching Suballocator. More... | |
_CRTIMP void __cdecl | Free (_Pre_maybenull_ _Post_invalid_ void *_PAllocation) |
Releases a block of memory previously allocated by the Alloc method to the Concurrency Runtime Caching Suballocator. More... | |
__declspec (deprecated("Concurrency::EnableTracing is a deprecated function.")) _CRTIMP HRESULT __cdecl EnableTracing() | |
Enables tracing in the Concurrency Runtime. This function is deprecated because ETW tracing is now on by default. More... | |
__declspec (deprecated("Concurrency::DisableTracing is a deprecated function.")) _CRTIMP HRESULT __cdecl DisableTracing() | |
Disables tracing in the Concurrency Runtime. This function is deprecated because ETW tracing is unregistered by default. More... | |
const | __declspec (selectany) GUID ConcRT_ProviderGuid = { 0x72B14A7D, 0x704C, 0x423e, { 0x92, 0xF8, 0x7E, 0x6D, 0x64, 0xBC, 0xB9, 0x2A } } |
The ETW provider GUID for the Concurrency Runtime. More... | |
_CRTIMP void __cdecl | _Trace_ppl_function (const GUID &_Guid, unsigned char _Level, ConcRT_EventType _Type) |
_CRTIMP void __cdecl | _Trace_agents (Agents_EventType _Type, __int64 agentId,...) |
template<typename _Ty , class A1 , class A2 > | |
bool | operator== (const concurrent_vector< _Ty, A1 > &_A, const concurrent_vector< _Ty, A2 > &_B) |
Tests if the concurrent_vector object on the left side of the operator is equal to the concurrent_vector object on the right side. More... | |
template<typename _Ty , class A1 , class A2 > | |
bool | operator!= (const concurrent_vector< _Ty, A1 > &_A, const concurrent_vector< _Ty, A2 > &_B) |
Tests if the concurrent_vector object on the left side of the operator is not equal to the concurrent_vector object on the right side. More... | |
template<typename _Ty , class A1 , class A2 > | |
bool | operator< (const concurrent_vector< _Ty, A1 > &_A, const concurrent_vector< _Ty, A2 > &_B) |
Tests if the concurrent_vector object on the left side of the operator is less than the concurrent_vector object on the right side. More... | |
template<typename _Ty , class A1 , class A2 > | |
bool | operator> (const concurrent_vector< _Ty, A1 > &_A, const concurrent_vector< _Ty, A2 > &_B) |
Tests if the concurrent_vector object on the left side of the operator is greater than the concurrent_vector object on the right side. More... | |
template<typename _Ty , class A1 , class A2 > | |
bool | operator<= (const concurrent_vector< _Ty, A1 > &_A, const concurrent_vector< _Ty, A2 > &_B) |
Tests if the concurrent_vector object on the left side of the operator is less than or equal to the concurrent_vector object on the right side. More... | |
template<typename _Ty , class A1 , class A2 > | |
bool | operator>= (const concurrent_vector< _Ty, A1 > &_A, const concurrent_vector< _Ty, A2 > &_B) |
Tests if the concurrent_vector object on the left side of the operator is greater than or equal to the concurrent_vector object on the right side. More... | |
template<typename _Ty , class _Ax > | |
void | swap (concurrent_vector< _Ty, _Ax > &_A, concurrent_vector< _Ty, _Ax > &_B) |
Exchanges the elements of two concurrent_vector objects. More... | |
template<class _Function > | |
task_handle< _Function > | make_task (const _Function &_Func) |
A factory method for creating a task_handle object. More... | |
template<typename _Function > | |
void | run_with_cancellation_token (const _Function &_Func, cancellation_token _Ct) |
Executes a function object immediately and synchronously in the context of a given cancellation token. More... | |
void | interruption_point () |
Creates an interruption point for cancellation. If a cancellation is in progress in the context where this function is called, this will throw an internal exception that aborts the execution of the currently executing parallel work. If cancellation is not in progress, the function does nothing. More... | |
_CRTIMP2 bool __cdecl | is_current_task_group_canceling () |
Returns an indication of whether the task group which is currently executing inline on the current context is in the midst of an active cancellation (or will be shortly). Note that if there is no task group currently executing inline on the current context, false will be returned. More... | |
template<typename _Function1 , typename _Function2 > | |
void | _Parallel_invoke_impl (const _Function1 &_Func1, const _Function2 &_Func2) |
template<typename _Function1 , typename _Function2 > | |
void | parallel_invoke (const _Function1 &_Func1, const _Function2 &_Func2) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()() . More... | |
template<typename _Function1 , typename _Function2 , typename _Function3 > | |
void | parallel_invoke (const _Function1 &_Func1, const _Function2 &_Func2, const _Function3 &_Func3) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()() . More... | |
template<typename _Function1 , typename _Function2 , typename _Function3 , typename _Function4 > | |
void | parallel_invoke (const _Function1 &_Func1, const _Function2 &_Func2, const _Function3 &_Func3, const _Function4 &_Func4) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()() . More... | |
template<typename _Function1 , typename _Function2 , typename _Function3 , typename _Function4 , typename _Function5 > | |
void | parallel_invoke (const _Function1 &_Func1, const _Function2 &_Func2, const _Function3 &_Func3, const _Function4 &_Func4, const _Function5 &_Func5) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()() . More... | |
template<typename _Function1 , typename _Function2 , typename _Function3 , typename _Function4 , typename _Function5 , typename _Function6 > | |
void | parallel_invoke (const _Function1 &_Func1, const _Function2 &_Func2, const _Function3 &_Func3, const _Function4 &_Func4, const _Function5 &_Func5, const _Function6 &_Func6) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()() . More... | |
template<typename _Function1 , typename _Function2 , typename _Function3 , typename _Function4 , typename _Function5 , typename _Function6 , typename _Function7 > | |
void | parallel_invoke (const _Function1 &_Func1, const _Function2 &_Func2, const _Function3 &_Func3, const _Function4 &_Func4, const _Function5 &_Func5, const _Function6 &_Func6, const _Function7 &_Func7) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()() . More... | |
template<typename _Function1 , typename _Function2 , typename _Function3 , typename _Function4 , typename _Function5 , typename _Function6 , typename _Function7 , typename _Function8 > | |
void | parallel_invoke (const _Function1 &_Func1, const _Function2 &_Func2, const _Function3 &_Func3, const _Function4 &_Func4, const _Function5 &_Func5, const _Function6 &_Func6, const _Function7 &_Func7, const _Function8 &_Func8) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()() . More... | |
template<typename _Function1 , typename _Function2 , typename _Function3 , typename _Function4 , typename _Function5 , typename _Function6 , typename _Function7 , typename _Function8 , typename _Function9 > | |
void | parallel_invoke (const _Function1 &_Func1, const _Function2 &_Func2, const _Function3 &_Func3, const _Function4 &_Func4, const _Function5 &_Func5, const _Function6 &_Func6, const _Function7 &_Func7, const _Function8 &_Func8, const _Function9 &_Func9) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()() . More... | |
template<typename _Function1 , typename _Function2 , typename _Function3 , typename _Function4 , typename _Function5 , typename _Function6 , typename _Function7 , typename _Function8 , typename _Function9 , typename _Function10 > | |
void | parallel_invoke (const _Function1 &_Func1, const _Function2 &_Func2, const _Function3 &_Func3, const _Function4 &_Func4, const _Function5 &_Func5, const _Function6 &_Func6, const _Function7 &_Func7, const _Function8 &_Func8, const _Function9 &_Func9, const _Function10 &_Func10) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()() . More... | |
template<typename _Worker_class , typename _Index_type , typename Partitioner > | |
void | _Parallel_chunk_task_group_run (structured_task_group &_Task_group, task_handle< _Worker_class > *_Chunk_helpers, const Partitioner &, _Index_type _I) |
template<typename _Worker_class , typename _Index_type > | |
void | _Parallel_chunk_task_group_run (structured_task_group &_Task_group, task_handle< _Worker_class > *_Chunk_helpers, affinity_partitioner &_Part, _Index_type _I) |
template<typename _Worker_class , typename _Random_iterator , typename _Index_type , typename _Function , typename _Partitioner > | |
void | _Parallel_chunk_impl (const _Random_iterator &_First, _Index_type _Range_arg, const _Index_type &_Step, const _Function &_Func, _Partitioner &&_Part) |
template<typename _Worker_class , typename _Random_iterator , typename _Index_type , typename _Function > | |
void | _Parallel_chunk_impl (const _Random_iterator &_First, _Index_type _Range_arg, const _Index_type &_Step, const _Function &_Func) |
template<typename _Index_type , typename _Diff_type , typename _Function > | |
void | _Parallel_for_partitioned_impl (_Index_type _First, _Diff_type _Range_arg, _Diff_type _Step, const _Function &_Func, const auto_partitioner &_Part) |
template<typename _Index_type , typename _Diff_type , typename _Function > | |
void | _Parallel_for_partitioned_impl (_Index_type _First, _Diff_type _Range_arg, _Diff_type _Step, const _Function &_Func, const static_partitioner &_Part) |
template<typename _Index_type , typename _Diff_type , typename _Function > | |
void | _Parallel_for_partitioned_impl (_Index_type _First, _Diff_type _Range_arg, _Diff_type _Step, const _Function &_Func, const simple_partitioner &_Part) |
template<typename _Index_type , typename _Diff_type , typename _Function > | |
void | _Parallel_for_partitioned_impl (_Index_type _First, _Diff_type _Range_arg, _Diff_type _Step, const _Function &_Func, affinity_partitioner &_Part) |
template<typename _Index_type , typename _Function , typename _Partitioner > | |
void | _Parallel_for_impl (_Index_type _First, _Index_type _Last, _Index_type _Step, const _Function &_Func, _Partitioner &&_Part) |
template<typename _Index_type , typename _Function > | |
void | _Parallel_for_impl (_Index_type _First, _Index_type _Last, _Index_type _Step, const _Function &_Func) |
template<typename _Index_type , typename _Function , typename _Partitioner > | |
void | parallel_for (_Index_type _First, _Index_type _Last, _Index_type _Step, const _Function &_Func, _Partitioner &&_Part) |
parallel_for iterates over a range of indices and executes a user-supplied function at each iteration, in parallel. More... | |
template<typename _Index_type , typename _Function > | |
void | parallel_for (_Index_type _First, _Index_type _Last, _Index_type _Step, const _Function &_Func) |
parallel_for iterates over a range of indices and executes a user-supplied function at each iteration, in parallel. More... | |
template<typename _Index_type , typename _Function > | |
void | parallel_for (_Index_type _First, _Index_type _Last, const _Function &_Func, const auto_partitioner &_Part=auto_partitioner()) |
parallel_for iterates over a range of indices and executes a user-supplied function at each iteration, in parallel. More... | |
template<typename _Index_type , typename _Function > | |
void | parallel_for (_Index_type _First, _Index_type _Last, const _Function &_Func, const static_partitioner &_Part) |
parallel_for iterates over a range of indices and executes a user-supplied function at each iteration, in parallel. More... | |
template<typename _Index_type , typename _Function > | |
void | parallel_for (_Index_type _First, _Index_type _Last, const _Function &_Func, const simple_partitioner &_Part) |
parallel_for iterates over a range of indices and executes a user-supplied function at each iteration, in parallel. More... | |
template<typename _Index_type , typename _Function > | |
void | parallel_for (_Index_type _First, _Index_type _Last, const _Function &_Func, affinity_partitioner &_Part) |
parallel_for iterates over a range of indices and executes a user-supplied function at each iteration, in parallel. More... | |
template<typename _Forward_iterator , typename _Function > | |
void | _Parallel_for_each_chunk (_Forward_iterator &_First, const _Forward_iterator &_Last, const _Function &_Func, task_group &_Task_group) |
template<typename _Forward_iterator , typename _Function > | |
void | _Parallel_for_each_forward_impl (_Forward_iterator &_First, const _Forward_iterator &_Last, const _Function &_Func, task_group &_Task_group) |
template<typename _Forward_iterator , typename _Function > | |
void | _Parallel_for_each_impl (_Forward_iterator _First, const _Forward_iterator &_Last, const _Function &_Func, const auto_partitioner &, std::forward_iterator_tag) |
template<typename _Random_iterator , typename _Index_type , typename _Function > | |
void | _Parallel_for_each_partitioned_impl (const _Random_iterator &_First, _Index_type _Range_arg, _Index_type _Step, const _Function &_Func, const auto_partitioner &_Part) |
template<typename _Random_iterator , typename _Index_type , typename _Function > | |
void | _Parallel_for_each_partitioned_impl (const _Random_iterator &_First, _Index_type _Range_arg, _Index_type _Step, const _Function &_Func, const static_partitioner &_Part) |
template<typename _Random_iterator , typename _Index_type , typename _Function > | |
void | _Parallel_for_each_partitioned_impl (const _Random_iterator &_First, _Index_type _Range_arg, _Index_type _Step, const _Function &_Func, const simple_partitioner &_Part) |
template<typename _Random_iterator , typename _Index_type , typename _Function > | |
void | _Parallel_for_each_partitioned_impl (const _Random_iterator &_First, _Index_type _Range_arg, _Index_type _Step, const _Function &_Func, affinity_partitioner &_Part) |
template<typename _Random_iterator , typename _Function , typename _Partitioner > | |
void | _Parallel_for_each_impl (const _Random_iterator &_First, const _Random_iterator &_Last, const _Function &_Func, _Partitioner &&_Part, std::random_access_iterator_tag) |
template<typename _Iterator , typename _Function > | |
void | parallel_for_each (_Iterator _First, _Iterator _Last, const _Function &_Func) |
parallel_for_each applies a specified function to each element within a range, in parallel. It is semantically equivalent to the for_each function in the std namespace, except that iteration over the elements is performed in parallel, and the order of iteration is unspecified. The argument _Func must support a function call operator of the form operator()(T) where the parameter T is the item type of the container being iterated over. More... | |
template<typename _Iterator , typename _Function , typename _Partitioner > | |
void | parallel_for_each (_Iterator _First, _Iterator _Last, const _Function &_Func, _Partitioner &&_Part) |
parallel_for_each applies a specified function to each element within a range, in parallel. It is semantically equivalent to the for_each function in the std namespace, except that iteration over the elements is performed in parallel, and the order of iteration is unspecified. The argument _Func must support a function call operator of the form operator()(T) where the parameter T is the item type of the container being iterated over. More... | |
template<typename _Forward_iterator > | |
std::iterator_traits< _Forward_iterator >::value_type | parallel_reduce (_Forward_iterator _Begin, _Forward_iterator _End, const typename std::iterator_traits< _Forward_iterator >::value_type &_Identity) |
Computes the sum of all elements in a specified range by computing successive partial sums, or computes the result of successive partial results similarly obtained from using a specified binary operation other than sum, in parallel. parallel_reduce is semantically similar to std::accumulate , except that it requires the binary operation to be associative, and requires an identity value instead of an initial value. More... | |
template<typename _Forward_iterator , typename _Sym_reduce_fun > | |
std::iterator_traits< _Forward_iterator >::value_type | parallel_reduce (_Forward_iterator _Begin, _Forward_iterator _End, const typename std::iterator_traits< _Forward_iterator >::value_type &_Identity, _Sym_reduce_fun _Sym_fun) |
Computes the sum of all elements in a specified range by computing successive partial sums, or computes the result of successive partial results similarly obtained from using a specified binary operation other than sum, in parallel. parallel_reduce is semantically similar to std::accumulate , except that it requires the binary operation to be associative, and requires an identity value instead of an initial value. More... | |
template<typename _Reduce_type , typename _Forward_iterator , typename _Range_reduce_fun , typename _Sym_reduce_fun > | |
_Reduce_type | parallel_reduce (_Forward_iterator _Begin, _Forward_iterator _End, const _Reduce_type &_Identity, const _Range_reduce_fun &_Range_fun, const _Sym_reduce_fun &_Sym_fun) |
Computes the sum of all elements in a specified range by computing successive partial sums, or computes the result of successive partial results similarly obtained from using a specified binary operation other than sum, in parallel. parallel_reduce is semantically similar to std::accumulate , except that it requires the binary operation to be associative, and requires an identity value instead of an initial value. More... | |
template<typename _Forward_iterator , typename _Function > | |
_Function::_Reduce_type | _Parallel_reduce_impl (_Forward_iterator _First, const _Forward_iterator &_Last, const _Function &_Func, std::forward_iterator_tag) |
template<typename _Worker , typename _Random_iterator , typename _Function > | |
void | _Parallel_reduce_random_executor (_Random_iterator _Begin, _Random_iterator _End, const _Function &_Fun) |
template<typename _Random_iterator , typename _Function > | |
_Function::_Reduce_type | _Parallel_reduce_impl (_Random_iterator _First, _Random_iterator _Last, const _Function &_Func, std::random_access_iterator_tag) |
template<typename _Forward_iterator , typename _Function > | |
void | _Parallel_reduce_forward_executor (_Forward_iterator _First, _Forward_iterator _Last, const _Function &_Func, task_group &_Task_group) |
template<typename _Input_iterator1 , typename _Input_iterator2 , typename _Output_iterator , typename _Binary_operator > | |
void | _Parallel_transform_binary_impl2 (_Input_iterator1 _First1, _Input_iterator1 _Last1, _Input_iterator2 _First2, _Output_iterator &_Result, const _Binary_operator&_Binary_op, task_group &_Tg) |
template<typename _Input_iterator , typename _Output_iterator , typename _Unary_operator > | |
void | _Parallel_transform_unary_impl2 (_Input_iterator _First, _Input_iterator _Last, _Output_iterator &_Result, const _Unary_operator&_Unary_op, task_group &_Tg) |
template<typename _Input_iterator , typename _Output_iterator , typename _Unary_operator , typename _Partitioner > | |
_Output_iterator | _Parallel_transform_unary_impl (_Input_iterator _First, _Input_iterator _Last, _Output_iterator _Result, const _Unary_operator&_Unary_op, _Partitioner &&_Part) |
template<typename _Input_iterator1 , typename _Output_iterator , typename _Unary_operator > | |
_Output_iterator | parallel_transform (_Input_iterator1 _First1, _Input_iterator1 _Last1, _Output_iterator _Result, const _Unary_operator&_Unary_op, const auto_partitioner &_Part=auto_partitioner()) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform . More... | |
template<typename _Input_iterator1 , typename _Output_iterator , typename _Unary_operator > | |
_Output_iterator | parallel_transform (_Input_iterator1 _First1, _Input_iterator1 _Last1, _Output_iterator _Result, const _Unary_operator&_Unary_op, const static_partitioner &_Part) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform . More... | |
template<typename _Input_iterator1 , typename _Output_iterator , typename _Unary_operator > | |
_Output_iterator | parallel_transform (_Input_iterator1 _First1, _Input_iterator1 _Last1, _Output_iterator _Result, const _Unary_operator&_Unary_op, const simple_partitioner &_Part) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform . More... | |
template<typename _Input_iterator1 , typename _Output_iterator , typename _Unary_operator > | |
_Output_iterator | parallel_transform (_Input_iterator1 _First1, _Input_iterator1 _Last1, _Output_iterator _Result, const _Unary_operator&_Unary_op, affinity_partitioner &_Part) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform . More... | |
template<typename _Input_iterator1 , typename _Input_iterator2 , typename _Output_iterator , typename _Binary_operator , typename _Partitioner > | |
_Output_iterator | parallel_transform (_Input_iterator1 _First1, _Input_iterator1 _Last1, _Input_iterator2 _First2, _Output_iterator _Result, const _Binary_operator&_Binary_op, _Partitioner &&_Part) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform . More... | |
template<typename _Input_iterator1 , typename _Input_iterator2 , typename _Output_iterator , typename _Binary_operator > | |
_Output_iterator | parallel_transform (_Input_iterator1 _First1, _Input_iterator1 _Last1, _Input_iterator2 _First2, _Output_iterator _Result, const _Binary_operator&_Binary_op) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform . More... | |
template<typename _Random_iterator , typename _Function > | |
size_t | _Median_of_three (const _Random_iterator &_Begin, size_t _A, size_t _B, size_t _C, const _Function &_Func, bool &_Potentially_equal) |
template<typename _Random_iterator , typename _Function > | |
size_t | _Median_of_nine (const _Random_iterator &_Begin, size_t _Size, const _Function &_Func, bool &_Potentially_equal) |
template<typename _Random_iterator , typename _Function > | |
size_t | _Select_median_pivot (const _Random_iterator &_Begin, size_t _Size, const _Function &_Func, const size_t _Chunk_size, bool &_Potentially_equal) |
template<typename _Random_iterator , typename _Random_buffer_iterator , typename _Function > | |
size_t | _Search_mid_point (const _Random_iterator &_Begin1, size_t &_Len1, const _Random_buffer_iterator &_Begin2, size_t &_Len2, const _Function &_Func) |
template<typename _Random_iterator , typename _Random_buffer_iterator , typename _Random_output_iterator , typename _Function > | |
void | _Merge_chunks (_Random_iterator _Begin1, const _Random_iterator &_End1, _Random_buffer_iterator _Begin2, const _Random_buffer_iterator &_End2, _Random_output_iterator _Output, const _Function &_Func) |
template<typename _Random_iterator , typename _Random_buffer_iterator , typename _Random_output_iterator , typename _Function > | |
void | _Parallel_merge (_Random_iterator _Begin1, size_t _Len1, _Random_buffer_iterator _Begin2, size_t _Len2, _Random_output_iterator _Output, const _Function &_Func, size_t _Div_num) |
template<typename _Ty , typename _Function > | |
size_t | _Radix_key (const _Ty &_Val, size_t _Radix, _Function _Proj_func) |
template<typename _Random_iterator , typename _Random_buffer_iterator , typename _Function > | |
void | _Integer_radix_pass (const _Random_iterator &_Begin, size_t _Size, const _Random_buffer_iterator &_Output, size_t _Radix, _Function _Proj_func) |
template<typename _Random_iterator , typename _Random_buffer_iterator , typename _Function > | |
void | _Integer_radix_sort (const _Random_iterator &_Begin, size_t _Size, const _Random_buffer_iterator &_Output, size_t _Radix, _Function _Proj_func, size_t _Deep=0) |
template<typename _Random_iterator , typename _Random_buffer_iterator , typename _Function > | |
void | _Parallel_integer_radix_sort (const _Random_iterator &_Begin, size_t _Size, const _Random_buffer_iterator &_Output, size_t _Radix, _Function _Proj_func, const size_t _Chunk_size, size_t _Deep=0) |
template<typename _Random_iterator , typename _Random_buffer_iterator , typename _Function > | |
void | _Parallel_integer_sort_asc (const _Random_iterator &_Begin, size_t _Size, const _Random_buffer_iterator &_Output, _Function _Proj_func, const size_t _Chunk_size) |
template<typename _Random_iterator , typename _Function > | |
void | _Parallel_quicksort_impl (const _Random_iterator &_Begin, size_t _Size, const _Function &_Func, size_t _Div_num, const size_t _Chunk_size, int _Depth) |
template<typename _Random_iterator , typename _Random_buffer_iterator , typename _Function > | |
bool | _Parallel_buffered_sort_impl (const _Random_iterator &_Begin, size_t _Size, _Random_buffer_iterator _Output, const _Function &_Func, int _Div_num, const size_t _Chunk_size) |
template<typename _Allocator > | |
_Allocator::pointer | _Construct_buffer (size_t _N, _Allocator &_Alloc) |
template<typename _Allocator > | |
void | _Destroy_buffer (typename _Allocator::pointer _P, size_t _N, _Allocator &_Alloc) |
template<typename _Random_iterator > | |
void | parallel_sort (const _Random_iterator &_Begin, const _Random_iterator &_End) |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort in that it is a compare-based, unstable, in-place sort. More... | |
template<typename _Random_iterator , typename _Function > | |
void | parallel_sort (const _Random_iterator &_Begin, const _Random_iterator &_End, const _Function &_Func, const size_t _Chunk_size=2048) |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort in that it is a compare-based, unstable, in-place sort. More... | |
template<typename _Random_iterator > | |
void | parallel_buffered_sort (const _Random_iterator &_Begin, const _Random_iterator &_End) |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort in that it is a compare-based, unstable, in-place sort except that it needs O(n) additional space, and requires default initialization for the elements being sorted. More... | |
template<typename _Allocator , typename _Random_iterator > | |
void | parallel_buffered_sort (const _Random_iterator &_Begin, const _Random_iterator &_End) |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort in that it is a compare-based, unstable, in-place sort except that it needs O(n) additional space, and requires default initialization for the elements being sorted. More... | |
template<typename _Allocator , typename _Random_iterator > | |
void | parallel_buffered_sort (const _Allocator &_Alloc, const _Random_iterator &_Begin, const _Random_iterator &_End) |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort in that it is a compare-based, unstable, in-place sort except that it needs O(n) additional space, and requires default initialization for the elements being sorted. More... | |
template<typename _Random_iterator , typename _Function > | |
void | parallel_buffered_sort (const _Random_iterator &_Begin, const _Random_iterator &_End, const _Function &_Func, const size_t _Chunk_size=2048) |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort in that it is a compare-based, unstable, in-place sort except that it needs O(n) additional space, and requires default initialization for the elements being sorted. More... | |
template<typename _Allocator , typename _Random_iterator , typename _Function > | |
void | parallel_buffered_sort (const _Random_iterator &_Begin, const _Random_iterator &_End, const _Function &_Func, const size_t _Chunk_size=2048) |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort in that it is a compare-based, unstable, in-place sort except that it needs O(n) additional space, and requires default initialization for the elements being sorted. More... | |
template<typename _Allocator , typename _Random_iterator , typename _Function > | |
void | parallel_buffered_sort (const _Allocator &_Alloc, const _Random_iterator &_Begin, const _Random_iterator &_End, const _Function &_Func, const size_t _Chunk_size=2048) |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort in that it is a compare-based, unstable, in-place sort except that it needs O(n) additional space, and requires default initialization for the elements being sorted. More... | |
template<typename _Random_iterator > | |
void | parallel_radixsort (const _Random_iterator &_Begin, const _Random_iterator &_End) |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted. More... | |
template<typename _Allocator , typename _Random_iterator > | |
void | parallel_radixsort (const _Random_iterator &_Begin, const _Random_iterator &_End) |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted. More... | |
template<typename _Allocator , typename _Random_iterator > | |
void | parallel_radixsort (const _Allocator &_Alloc, const _Random_iterator &_Begin, const _Random_iterator &_End) |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted. More... | |
template<typename _Random_iterator , typename _Function > | |
void | parallel_radixsort (const _Random_iterator &_Begin, const _Random_iterator &_End, const _Function &_Proj_func, const size_t _Chunk_size=256 *256) |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted. More... | |
template<typename _Allocator , typename _Random_iterator , typename _Function > | |
void | parallel_radixsort (const _Random_iterator &_Begin, const _Random_iterator &_End, const _Function &_Proj_func, const size_t _Chunk_size=256 *256) |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted. More... | |
template<typename _Allocator , typename _Random_iterator , typename _Function > | |
void | parallel_radixsort (const _Allocator &_Alloc, const _Random_iterator &_Begin, const _Random_iterator &_End, const _Function &_Proj_func, const size_t _Chunk_size=256 *256) |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted. More... | |
std::shared_ptr< ::Concurrency::scheduler_interface > | get_ambient_scheduler () |
void | set_ambient_scheduler (std::shared_ptr< ::Concurrency::scheduler_interface > _Scheduler) |
struct | __declspec (novtable) scheduler_interface |
Scheduler Interface More... | |
bool __cdecl | is_task_cancellation_requested () |
Returns an indication of whether the task that is currently executing has received a request to cancel its execution. Cancellation is requested on a task if the task was created with a cancellation token, and the token source associated with that token is canceled. More... | |
__declspec (noreturn) void __cdecl cancel_current_task() | |
Cancels the currently executing task. This function can be called from within the body of a task to abort the task's execution and cause it to enter the canceled state. While it may be used in response to the is_task_cancellation_requested function, you may also use it by itself, to initiate cancellation of the task that is currently executing. More... | |
template<typename _Ty > | |
__declspec (noinline) auto create_task(_Ty _Param | |
Creates a PPL task object. create_task can be used anywhere you would have used a task constructor. It is provided mainly for convenience, because it allows use of the auto keyword while creating tasks. More... | |
Variables | |
const size_t | COOPERATIVE_WAIT_TIMEOUT = SIZE_MAX |
Value indicating that a wait timed out. More... | |
const unsigned int | COOPERATIVE_TIMEOUT_INFINITE = (unsigned int)-1 |
Value indicating that a wait should never time out. More... | |
The Concurrency
namespace provides classes and functions that provide access to the Concurrency Runtime, a concurrent programming framework for C++. For more information, see Concurrency Runtime.
The concurrency
namespace provides classes and functions that give you access to the Concurrency Runtime, a concurrent programming framework for C++. For more information, see Concurrency Runtime.
The Concurrency
namespace provides classes and functions that give you access to the Concurrency Runtime, a concurrent programming framework for C++. For more information, see Concurrency Runtime.
The Concurrency
namespace provides classes and functions that access the Concurrency Runtime, a concurrent programming framework for C++. For more information, see Concurrency Runtime.
typedef details::_Reference_counted_obj_ptr<details::_Accelerator_impl> Concurrency::_Accelerator_impl_ptr |
typedef details::_Reference_counted_obj_ptr<details::_Accelerator_view_impl> Concurrency::_Accelerator_view_impl_ptr |
typedef details::_Reference_counted_obj_ptr<details::_Event_impl> Concurrency::_Event_impl_ptr |
A lock holder that acquires a non-reentrant lock on instantiation and releases it on destruction.
A lock holder that acquires a reentrant lock on instantiation and releases it on destruction
typedef details::_Reference_counted_obj_ptr<details::_Ubiquitous_buffer> Concurrency::_Ubiquitous_buffer_ptr |
typedef __int32 Concurrency::runtime_object_identity |
Each message instance has an identity that follows it as it is cloned and passed between messaging components. This cannot be the address of the message object.
A type that represents the terminal state of a task. Valid values are completed
and canceled
.
Concurrency::details contains definitions of support routines in the public namespaces and one or more macros. Users should not directly interact with this internal namespace.
An elementary abstraction for a task, defined as void (__cdecl * TaskProc)(void *)
. A TaskProc
is called to invoke the body of a task.
An elementary abstraction for a task, defined as void (__cdecl * TaskProc_t)(void *)
. A TaskProc
is called to invoke the body of a task.
The valid states for an agent
.
For more information, see Asynchronous Agents.
The types of events that can be traced using the tracing functionality offered by the Agents Library
The types of events that can be traced using the tracing functionality offered by the Concurrency Runtime.
Trace flags for the event types
Enumerator | |
---|---|
SchedulerEventFlag | |
ContextEventFlag | |
VirtualProcessorEventFlag | |
ResourceManagerEventFlag | |
PPLEventFlag | |
AgentEventFlag | |
AllEventsFlag |
The type of a join
messaging block.
The valid responses for an offer of a message
object to a block.
Describes the execution status of a task_group
or structured_task_group
object. A value of this type is returned by numerous methods that wait on tasks scheduled to a task group to complete.
Enumerator | |
---|---|
not_complete |
The tasks queued to the |
completed |
The tasks queued to the |
canceled |
The |
struct Concurrency::__declspec | ( | novtable | ) |
Scheduler Interface
|
inline |
Cancels the currently executing task. This function can be called from within the body of a task to abort the task's execution and cause it to enter the canceled
state. While it may be used in response to the is_task_cancellation_requested function, you may also use it by itself, to initiate cancellation of the task that is currently executing.
It is not a supported scenario to call this function if you are not within the body of a task
. Doing so will result in undefined behavior such as a crash or a hang in your application.
Concurrency::__declspec | ( | noinline | ) |
Creates a PPL task object. create_task
can be used anywhere you would have used a task constructor. It is provided mainly for convenience, because it allows use of the auto
keyword while creating tasks.
_Ty | The type of the parameter from which the task is to be constructed. |
_Param | The parameter from which the task is to be constructed. This could be a lambda or function object, a task_completion_event object, a different task object, or a Windows::Foundation::IAsyncInfo interface if you are using tasks in your Windows Store app. |
T
, that is inferred from _Param . The first overload behaves like a task constructor that takes a single parameter.
The second overload associates the cancellation token provided with the newly created task. If you use this overload you are not allowed to pass in a different task
object as the first parameter.
The type of the returned task is inferred from the first parameter to the function. If _Param is a task_completion_event<T>
, a task<T>
, or a functor that returns either type T
or task<T>
, the type of the created task is task<T>
.
In a Windows Store app, if _Param is of type Windows::Foundation::IAsyncOperation<T>^ or Windows::Foundation::IAsyncOperationWithProgress<T,P>^, or a functor that returns either of those types, the created task will be of type task<T>
. If _Param is of type Windows::Foundation::IAsyncAction^ or Windows::Foundation::IAsyncActionWithProgress<P>^, or a functor that returns either of those types, the created task will have type task<void>
.
Concurrency::__declspec | ( | deprecated("Concurrency::EnableTracing is a deprecated function.") | ) |
Enables tracing in the Concurrency Runtime. This function is deprecated because ETW tracing is now on by default.
S_OK
is returned; otherwise, E_NOT_STARTED
is returned. Concurrency::__declspec | ( | deprecated("Concurrency::DisableTracing is a deprecated function.") | ) |
Disables tracing in the Concurrency Runtime. This function is deprecated because ETW tracing is unregistered by default.
S_OK
is returned. If tracing was not previously initiated, E_NOT_STARTED
is returned const Concurrency::__declspec | ( | selectany | ) | = { 0x72B14A7D, 0x704C, 0x423e, { 0x92, 0xF8, 0x7E, 0x6D, 0x64, 0xBC, 0xB9, 0x2A } } |
The ETW provider GUID for the Concurrency Runtime.
A category GUID ({B9B5B78C-0713-4898-A21A-C67949DCED07}) describing ETW events fired by the Agents library in the Concurrency Runtime.
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to usage of the parallel_for_each
function.
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to usage of the parallel_for
function.
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to usage of the parallel_invoke
function.
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to the resource manager.
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to locks.
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to virtual processors.
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to chores or tasks.
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to contexts.
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to schedule groups.
A category GUID describing ETW events fired by the Concurrency Runtime that are directly related to scheduler activity.
A category GUID describing ETW events fired by the Concurrency Runtime that are not more specifically described by another category.
This category of events is not currently fired by the Concurrency Runtime.
This category of events is not currently fired by the Concurrency Runtime.
This category of events is not currently fired by the Concurrency Runtime.
This category of events is not currently fired by the Concurrency Runtime.
This category of events is not currently fired by the Concurrency Runtime.
|
inline |
|
inline |
void Concurrency::_Integer_radix_pass | ( | const _Random_iterator & | _Begin, |
size_t | _Size, | ||
const _Random_buffer_iterator & | _Output, | ||
size_t | _Radix, | ||
_Function | _Proj_func | ||
) |
void Concurrency::_Integer_radix_sort | ( | const _Random_iterator & | _Begin, |
size_t | _Size, | ||
const _Random_buffer_iterator & | _Output, | ||
size_t | _Radix, | ||
_Function | _Proj_func, | ||
size_t | _Deep = 0 |
||
) |
|
inline |
|
inline |
void Concurrency::_Merge_chunks | ( | _Random_iterator | _Begin1, |
const _Random_iterator & | _End1, | ||
_Random_buffer_iterator | _Begin2, | ||
const _Random_buffer_iterator & | _End2, | ||
_Random_output_iterator | _Output, | ||
const _Function & | _Func | ||
) |
|
inline |
void Concurrency::_Parallel_chunk_impl | ( | const _Random_iterator & | _First, |
_Index_type | _Range_arg, | ||
const _Index_type & | _Step, | ||
const _Function & | _Func, | ||
_Partitioner && | _Part | ||
) |
void Concurrency::_Parallel_chunk_impl | ( | const _Random_iterator & | _First, |
_Index_type | _Range_arg, | ||
const _Index_type & | _Step, | ||
const _Function & | _Func | ||
) |
void Concurrency::_Parallel_chunk_task_group_run | ( | structured_task_group & | _Task_group, |
task_handle< _Worker_class > * | _Chunk_helpers, | ||
const Partitioner & | , | ||
_Index_type | _I | ||
) |
void Concurrency::_Parallel_chunk_task_group_run | ( | structured_task_group & | _Task_group, |
task_handle< _Worker_class > * | _Chunk_helpers, | ||
affinity_partitioner & | _Part, | ||
_Index_type | _I | ||
) |
void Concurrency::_Parallel_for_each_chunk | ( | _Forward_iterator & | _First, |
const _Forward_iterator & | _Last, | ||
const _Function & | _Func, | ||
task_group & | _Task_group | ||
) |
void Concurrency::_Parallel_for_each_forward_impl | ( | _Forward_iterator & | _First, |
const _Forward_iterator & | _Last, | ||
const _Function & | _Func, | ||
task_group & | _Task_group | ||
) |
void Concurrency::_Parallel_for_each_impl | ( | _Forward_iterator | _First, |
const _Forward_iterator & | _Last, | ||
const _Function & | _Func, | ||
const auto_partitioner & | , | ||
std::forward_iterator_tag | |||
) |
void Concurrency::_Parallel_for_each_impl | ( | const _Random_iterator & | _First, |
const _Random_iterator & | _Last, | ||
const _Function & | _Func, | ||
_Partitioner && | _Part, | ||
std::random_access_iterator_tag | |||
) |
void Concurrency::_Parallel_for_each_partitioned_impl | ( | const _Random_iterator & | _First, |
_Index_type | _Range_arg, | ||
_Index_type | _Step, | ||
const _Function & | _Func, | ||
const auto_partitioner & | _Part | ||
) |
void Concurrency::_Parallel_for_each_partitioned_impl | ( | const _Random_iterator & | _First, |
_Index_type | _Range_arg, | ||
_Index_type | _Step, | ||
const _Function & | _Func, | ||
const static_partitioner & | _Part | ||
) |
void Concurrency::_Parallel_for_each_partitioned_impl | ( | const _Random_iterator & | _First, |
_Index_type | _Range_arg, | ||
_Index_type | _Step, | ||
const _Function & | _Func, | ||
const simple_partitioner & | _Part | ||
) |
void Concurrency::_Parallel_for_each_partitioned_impl | ( | const _Random_iterator & | _First, |
_Index_type | _Range_arg, | ||
_Index_type | _Step, | ||
const _Function & | _Func, | ||
affinity_partitioner & | _Part | ||
) |
void Concurrency::_Parallel_for_impl | ( | _Index_type | _First, |
_Index_type | _Last, | ||
_Index_type | _Step, | ||
const _Function & | _Func, | ||
_Partitioner && | _Part | ||
) |
void Concurrency::_Parallel_for_impl | ( | _Index_type | _First, |
_Index_type | _Last, | ||
_Index_type | _Step, | ||
const _Function & | _Func | ||
) |
void Concurrency::_Parallel_for_partitioned_impl | ( | _Index_type | _First, |
_Diff_type | _Range_arg, | ||
_Diff_type | _Step, | ||
const _Function & | _Func, | ||
const auto_partitioner & | _Part | ||
) |
void Concurrency::_Parallel_for_partitioned_impl | ( | _Index_type | _First, |
_Diff_type | _Range_arg, | ||
_Diff_type | _Step, | ||
const _Function & | _Func, | ||
const static_partitioner & | _Part | ||
) |
void Concurrency::_Parallel_for_partitioned_impl | ( | _Index_type | _First, |
_Diff_type | _Range_arg, | ||
_Diff_type | _Step, | ||
const _Function & | _Func, | ||
const simple_partitioner & | _Part | ||
) |
void Concurrency::_Parallel_for_partitioned_impl | ( | _Index_type | _First, |
_Diff_type | _Range_arg, | ||
_Diff_type | _Step, | ||
const _Function & | _Func, | ||
affinity_partitioner & | _Part | ||
) |
void Concurrency::_Parallel_integer_radix_sort | ( | const _Random_iterator & | _Begin, |
size_t | _Size, | ||
const _Random_buffer_iterator & | _Output, | ||
size_t | _Radix, | ||
_Function | _Proj_func, | ||
const size_t | _Chunk_size, | ||
size_t | _Deep = 0 |
||
) |
void Concurrency::_Parallel_integer_sort_asc | ( | const _Random_iterator & | _Begin, |
size_t | _Size, | ||
const _Random_buffer_iterator & | _Output, | ||
_Function | _Proj_func, | ||
const size_t | _Chunk_size | ||
) |
void Concurrency::_Parallel_invoke_impl | ( | const _Function1 & | _Func1, |
const _Function2 & | _Func2 | ||
) |
void Concurrency::_Parallel_merge | ( | _Random_iterator | _Begin1, |
size_t | _Len1, | ||
_Random_buffer_iterator | _Begin2, | ||
size_t | _Len2, | ||
_Random_output_iterator | _Output, | ||
const _Function & | _Func, | ||
size_t | _Div_num | ||
) |
void Concurrency::_Parallel_quicksort_impl | ( | const _Random_iterator & | _Begin, |
size_t | _Size, | ||
const _Function & | _Func, | ||
size_t | _Div_num, | ||
const size_t | _Chunk_size, | ||
int | _Depth | ||
) |
void Concurrency::_Parallel_reduce_forward_executor | ( | _Forward_iterator | _First, |
_Forward_iterator | _Last, | ||
const _Function & | _Func, | ||
task_group & | _Task_group | ||
) |
_Function::_Reduce_type Concurrency::_Parallel_reduce_impl | ( | _Forward_iterator | _First, |
const _Forward_iterator & | _Last, | ||
const _Function & | _Func, | ||
std::forward_iterator_tag | |||
) |
_Function::_Reduce_type Concurrency::_Parallel_reduce_impl | ( | _Random_iterator | _First, |
_Random_iterator | _Last, | ||
const _Function & | _Func, | ||
std::random_access_iterator_tag | |||
) |
void Concurrency::_Parallel_reduce_random_executor | ( | _Random_iterator | _Begin, |
_Random_iterator | _End, | ||
const _Function & | _Fun | ||
) |
void Concurrency::_Parallel_transform_binary_impl2 | ( | _Input_iterator1 | _First1, |
_Input_iterator1 | _Last1, | ||
_Input_iterator2 | _First2, | ||
_Output_iterator & | _Result, | ||
const _Binary_operator& | _Binary_op, | ||
task_group & | _Tg | ||
) |
_Output_iterator Concurrency::_Parallel_transform_unary_impl | ( | _Input_iterator | _First, |
_Input_iterator | _Last, | ||
_Output_iterator | _Result, | ||
const _Unary_operator& | _Unary_op, | ||
_Partitioner && | _Part | ||
) |
void Concurrency::_Parallel_transform_unary_impl2 | ( | _Input_iterator | _First, |
_Input_iterator | _Last, | ||
_Output_iterator & | _Result, | ||
const _Unary_operator& | _Unary_op, | ||
task_group & | _Tg | ||
) |
|
inline |
_Type Concurrency::_Receive_impl | ( | ISource< _Type > * | _Src, |
unsigned int | _Timeout, | ||
typename ITarget< _Type >::filter_method const * | _Filter_proc | ||
) |
A general receive implementation, allowing a context to wait for data from exactly one source and filter the values that are accepted. If the specified timeout is not COOPERATIVE_TIMEOUT_INFINITE, an exception (operation_timed_out) will be thrown if the specified amount of time expires before a message is received. Note that zero length timeouts should likely use try_receive as opposed to receive with a timeout of zero as it is more efficient and does not throw exceptions on timeouts.
_Type | The payload type |
_Src | A pointer to the source from which data is expected. |
_Timeout | The maximum time for which the method should for the data, in milliseconds. |
_Filter_proc | A pointer to a filter which will indicate whether to accept the data or not. |
size_t Concurrency::_Search_mid_point | ( | const _Random_iterator & | _Begin1, |
size_t & | _Len1, | ||
const _Random_buffer_iterator & | _Begin2, | ||
size_t & | _Len2, | ||
const _Function & | _Func | ||
) |
|
inline |
_CRTIMP void __cdecl Concurrency::_Trace_ppl_function | ( | const GUID & | _Guid, |
unsigned char | _Level, | ||
ConcRT_EventType | _Type | ||
) |
bool Concurrency::_Try_receive_impl | ( | ISource< _Type > * | _Src, |
_Type & | _value, | ||
typename ITarget< _Type >::filter_method const * | _Filter_proc | ||
) |
Helper function that implements try_receive A general try-receive implementation, allowing a context to look for data from exactly one source and filter the values that are accepted. If the data is not ready, try_receive will return false.
_Type | The payload type |
_Src | A pointer to the source from which data is expected. |
_value | A reference to a location where the result will be placed. |
_Filter_proc | A pointer to a filter which will indicate whether to accept the data or not. |
|
inline |
Memory fences and tile barriers.
Ensures that memory accesses are visible to other threads in the thread tile, and are executed according to program order
_Barrier | A tile_barrier object |
Allocates a block of memory of the size specified from the Concurrency Runtime Caching Suballocator.
_NumBytes | The number of bytes of memory to allocate. |
For more information about which scenarios in your application could benefit from using the Caching Suballocator, see Task Scheduler (Concurrency Runtime).
Uninitializes the C++ AMP runtime. It is legal to call this function multiple times during an applications lifetime. Calling any C++ AMP API afer calling this function will reinitialize the C++ AMP runtime. Note that it is illegal to use C++ AMP objects across calls to this function and doing so will result in undefined behavior. Also, concurrently calling this function and any other AMP APIs is illegal and would result in undefined behavior.
bool Concurrency::asend | ( | _Inout_ ITarget< _Type > * | _Trg, |
const _Type & | _Data | ||
) |
An asynchronous send operation, which schedules a task to propagate the data to the target block.
_Type | The type of the data to be sent. |
_Trg | A pointer or reference to the target to which data is sent. |
_Data | A reference to the data to be sent. |
true
if the message was accepted before the method returned, false
otherwise. For more information, see Message Passing Functions.
An asynchronous send operation, which schedules a task to propagate the value to the target block.
_Type | The type of the data to be sent. |
_Trg | A pointer or reference to the target to which data is sent. |
_Data | A reference to the data to be sent. |
true
if the message was accepted, false
otherwise. For more information, see Message Passing Functions.
|
inline |
Atomically, compares the value pointed to by _Dest for equality with that pointed to by _Expected_value, and if true, returns true and replaces the value with _Value, and if false, returns false and updates the value pointed to by _Expected_value with the value pointed to by _Dest
_Dest | Pointer to the destination location |
_Expected_value | Pointer to the the value being compared to the value pointed to by _Dest. If the comparison is unsuccessful, the value is updated with the value pointed to by _Dest |
_Value | The value to be stored to the location pointed to by _Dest if the comparison is successful |
|
inline |
Atomically, compares the value pointed to by _Dest for equality with that pointed to by _Expected_value, and if true, returns true and replaces the value with _Value, and if false, returns false and updates the value pointed to by _Expected_value with the value pointed to by _Dest
_Dest | Pointer to the destination location |
_Expected_value | Pointer to the the value being compared to the value pointed to by _Dest. If the comparison is unsuccessful, the value is updated with the value pointed to by _Dest |
_Value | The value to be stored to the location pointed to by _Dest if the comparison is successful |
Sets the value of location pointed to by _Dest to _Value as an atomic operation
_Dest | Pointer to the destination location |
_Value | The value to be set to the location pointed to by _Dest |
|
inline |
Sets the value of location pointed to by _Dest to _Value as an atomic operation
_Dest | Pointer to the destination location |
_Value | The value to be set to the location pointed to by _Dest |
|
inline |
Sets the value of location pointed to by _Dest to _Value as an atomic operation
_Dest | Pointer to the destination location |
_Value | The value to be set to the location pointed to by _Dest |
Performs an atomic addition of _Value to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
_Value | The value to be added to the location pointed to by _Dest |
|
inline |
Performs an atomic addition of _Value to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
_Value | The value to be added to the location pointed to by _Dest |
Performs an atomic bitwise and operation of _Value to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
_Value | The value to bitwise and to the location pointed to by _Dest |
|
inline |
Performs an atomic bitwise and operation of _Value to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
_Value | The value to bitwise and to the location pointed to by _Dest |
Performs an atomic decrement to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
Performs an atomic decrement to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
Performs an atomic increment to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
Performs an atomic increment to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
Atomically computes the maximum of _Value and the value of the memory location pointed to by _Dest, and stores the maximum value to the memory location
_Dest | Pointer to the destination location |
_Value | The value to be compared to the location pointed to by _Dest |
|
inline |
Atomically computes the maximum of _Value and the value of the memory location pointed to by _Dest, and stores the maximum value to the memory location
_Dest | Pointer to the destination location |
_Value | The value to be compared to the location pointed to by _Dest |
Atomically computes the minimum of _Value and the value of the memory location pointed to by _Dest, and stores the minimum value to the memory location
_Dest | Pointer to the destination location |
_Value | The value to be compared to the location pointed to by _Dest |
|
inline |
Atomically computes the minimum of _Value and the value of the memory location pointed to by _Dest, and stores the minimum value to the memory location
_Dest | Pointer to the destination location |
_Value | The value to be compared to the location pointed to by _Dest |
Performs an atomic bitwise or operation of _Value to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
_Value | The value to bitwise or to the location pointed to by _Dest |
|
inline |
Performs an atomic bitwise or operation of _Value to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
_Value | The value to bitwise or to the location pointed to by _Dest |
Performs an atomic subtraction of _Value from the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
_Value | The value to be subtracted from the location pointed to by _Dest |
|
inline |
Performs an atomic subtraction of _Value from the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
_Value | The value to be subtracted from the location pointed to by _Dest |
Performs an atomic bitwise xor operation of _Value to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
_Value | The value to bitwise xor to the location pointed to by _Dest |
|
inline |
Performs an atomic bitwise xor operation of _Value to the memory location pointed to by _Dest
_Dest | Pointer to the destination location |
_Value | The value to bitwise xor to the location pointed to by _Dest |
void Concurrency::copy | ( | const array< _Value_type, _Rank > & | _Src, |
array< _Value_type, _Rank > & | _Dest | ||
) |
Copies the contents of the source array into the destination array.
_Src | The source array. |
_Dest | The destination array. |
void Concurrency::copy | ( | InputIterator | _SrcFirst, |
InputIterator | _SrcLast, | ||
array< _Value_type, _Rank > & | _Dest | ||
) |
Copies the elements in the range [_SrcFirst, _SrcLast) into the destination array.
_SrcFirst | A beginning iterator into the source container. |
_SrcLast | An ending iterator into the source container. |
_Dest | The destination array. |
void Concurrency::copy | ( | InputIterator | _SrcFirst, |
array< _Value_type, _Rank > & | _Dest | ||
) |
Copies the elements beginning at _SrcFirst into the destination array.
_SrcFirst | A beginning iterator into the source container; if the number of available container elements starting at this iterator position is less than _Dest.extent.size(), undefined behavior results. |
_Dest | The destination array. |
void Concurrency::copy | ( | const array< _Value_type, _Rank > & | _Src, |
OutputIterator | _DestIter | ||
) |
Copies the contents of the array into the destination beginning at _DestIter.
_Src | The source array. |
_DestIter | An output iterator to the beginning position at destination. |
void Concurrency::copy | ( | const array< _Value_type, _Rank > & | _Src, |
const array_view< _Value_type, _Rank > & | _Dest | ||
) |
Copies the contents of the source array into the destination array_view.
_Src | The source array. |
_Dest | The destination array_view. |
void Concurrency::copy | ( | const array_view< const _Value_type, _Rank > & | _Src, |
array< _Value_type, _Rank > & | _Dest | ||
) |
Copies the contents of the source array_view into the destination array.
_Src | The source array_view. |
_Dest | The destination array. |
void Concurrency::copy | ( | const array_view< _Value_type, _Rank > & | _Src, |
array< _Value_type, _Rank > & | _Dest | ||
) |
Copies the contents of the source array_view into the destination array.
_Src | The source array_view. |
_Dest | The destination array. |
void Concurrency::copy | ( | const array_view< const _Value_type, _Rank > & | _Src, |
const array_view< _Value_type, _Rank > & | _Dest | ||
) |
Copies the contents of the source array_view into the destination array_view.
_Src | The source array_view. |
_Dest | The destination array_view. |
void Concurrency::copy | ( | const array_view< _Value_type, _Rank > & | _Src, |
const array_view< _Value_type, _Rank > & | _Dest | ||
) |
Copies the contents of the source array_view into the destination array_view.
_Src | The source array_view. |
_Dest | The destination array_view. |
void Concurrency::copy | ( | InputIterator | _SrcFirst, |
InputIterator | _SrcLast, | ||
const array_view< _Value_type, _Rank > & | _Dest | ||
) |
Copies the elements in the range [_SrcFirst, _SrcLast) into the destination array_view.
_SrcFirst | A beginning iterator into the source container. |
_SrcLast | An ending iterator into the source container. |
_Dest | The destination array_view. |
void Concurrency::copy | ( | InputIterator | _SrcFirst, |
const array_view< _Value_type, _Rank > & | _Dest | ||
) |
Copies the contents of an STL container into the destination array_view.
_SrcFirst | A beginning iterator into the source container; if the number of available container elements starting at this iterator position is less than _Dest.extent.size(), undefined behavior results. |
_Dest | The destination array_view. |
void Concurrency::copy | ( | const array_view< _Value_type, _Rank > & | _Src, |
OutputIterator | _DestIter | ||
) |
Copies the contents of the array_view into the destination beginning at _DestIter.
_Src | The source array_view. |
_DestIter | An output iterator to the beginning position at destination. |
concurrency::completion_future Concurrency::copy_async | ( | const array< _Value_type, _Rank > & | _Src, |
array< _Value_type, _Rank > & | _Dest | ||
) |
Asynchronously copies the contents of the source array into the destination array.
_Src | The source array. |
_Dest | The destination array. |
concurrency::completion_future Concurrency::copy_async | ( | InputIterator | _SrcFirst, |
InputIterator | _SrcLast, | ||
array< _Value_type, _Rank > & | _Dest | ||
) |
Asynchronously copies the elements in the range [_SrcFirst, _SrcLast) into the destination array.
_SrcFirst | A beginning iterator into the source container. |
_SrcLast | An ending iterator into the source container. |
_Dest | The destination array. |
concurrency::completion_future Concurrency::copy_async | ( | InputIterator | _SrcFirst, |
array< _Value_type, _Rank > & | _Dest | ||
) |
Asynchronously copies the elements beginning at _SrcFirst into the destination array.
_SrcFirst | A beginning iterator into the source container; if the number of available container elements starting at this iterator position is less than _Dest.extent.size(), undefined behavior results. |
_Dest | The destination array. |
concurrency::completion_future Concurrency::copy_async | ( | const array< _Value_type, _Rank > & | _Src, |
OutputIterator | _DestIter | ||
) |
Asynchronously copies the contents of the array into the destination beginning at _DestIter.
_Src | The source array. |
_DestIter | An output iterator to the beginning position at destination. |
concurrency::completion_future Concurrency::copy_async | ( | const array< _Value_type, _Rank > & | _Src, |
const array_view< _Value_type, _Rank > & | _Dest | ||
) |
Asynchronously copies the contents of the source array into the destination array_view.
_Src | The source array. |
_Dest | The destination array_view. |
concurrency::completion_future Concurrency::copy_async | ( | const array_view< const _Value_type, _Rank > & | _Src, |
array< _Value_type, _Rank > & | _Dest | ||
) |
Asynchronously copies the contents of the source array_view into the destination array.
_Src | The source array_view. |
_Dest | The destination array. |
concurrency::completion_future Concurrency::copy_async | ( | const array_view< _Value_type, _Rank > & | _Src, |
array< _Value_type, _Rank > & | _Dest | ||
) |
Asynchronously copies the contents of the source array_view into the destination array.
_Src | The source array_view. |
_Dest | The destination array. |
concurrency::completion_future Concurrency::copy_async | ( | const array_view< const _Value_type, _Rank > & | _Src, |
const array_view< _Value_type, _Rank > & | _Dest | ||
) |
Asynchronously copies the contents of the source array_view into the destination array_view.
_Src | The source array_view. |
_Dest | The destination array_view. |
concurrency::completion_future Concurrency::copy_async | ( | const array_view< _Value_type, _Rank > & | _Src, |
const array_view< _Value_type, _Rank > & | _Dest | ||
) |
Asynchronously copies the contents of the source array_view into the destination array_view.
_Src | The source array_view. |
_Dest | The destination array_view. |
concurrency::completion_future Concurrency::copy_async | ( | InputIterator | _SrcFirst, |
InputIterator | _SrcLast, | ||
const array_view< _Value_type, _Rank > & | _Dest | ||
) |
Asynchronously copies the elements in the range [_SrcFirst, _SrcLast) into the destination array_view.
_SrcFirst | A beginning iterator into the source container. |
_SrcLast | An ending iterator into the source container. |
_Dest | The destination array_view. |
concurrency::completion_future Concurrency::copy_async | ( | InputIterator | _SrcFirst, |
const array_view< _Value_type, _Rank > & | _Dest | ||
) |
Asynchronously copies the elements beginning at _SrcFirst into the destination array_view.
_SrcFirst | A beginning iterator into the source container; if the number of available container elements starting at this iterator position is less than _Dest.extent.size(), undefined behavior results. |
_Dest | The destination array_view. |
concurrency::completion_future Concurrency::copy_async | ( | const array_view< _Value_type, _Rank > & | _Src, |
OutputIterator | _DestIter | ||
) |
Asynchronously copies the contents of the array_view into the destination beginning at _DestIter.
_Src | The source array_view. |
_DestIter | An output iterator to the beginning position at destination. |
void Concurrency::direct3d_abort | ( | ) |
void Concurrency::direct3d_errorf | ( | const char * | , |
... | |||
) |
void Concurrency::direct3d_printf | ( | const char * | , |
... | |||
) |
_CRTIMP void __cdecl Concurrency::Free | ( | _Pre_maybenull_ _Post_invalid_ void * | _PAllocation | ) |
Releases a block of memory previously allocated by the Alloc
method to the Concurrency Runtime Caching Suballocator.
_PAllocation | A pointer to memory previously allocated by the Alloc method which is to be freed. If the parameter _PAllocation is set to the value NULL , this method will ignore it and return immediately. |
For more information about which scenarios in your application could benefit from using the Caching Suballocator, see Task Scheduler (Concurrency Runtime).
|
inline |
|
inline |
Ensures that global memory accesses are visible to other threads in the thread tile, and are executed according to program order
_Barrier | A tile_barrier object |
|
inline |
Creates an interruption point for cancellation. If a cancellation is in progress in the context where this function is called, this will throw an internal exception that aborts the execution of the currently executing parallel work. If cancellation is not in progress, the function does nothing.
You should not catch the internal cancellation exception thrown by the interruption_point()
function. The exception will be caught and handled by the runtime, and catching it may cause your program to behave abnormally.
Returns an indication of whether the task group which is currently executing inline on the current context is in the midst of an active cancellation (or will be shortly). Note that if there is no task group currently executing inline on the current context, false
will be returned.
true
if the task group which is currently executing is canceling, false
otherwise. For more information, see Cancellation in the PPL.
|
inline |
Returns an indication of whether the task that is currently executing has received a request to cancel its execution. Cancellation is requested on a task if the task was created with a cancellation token, and the token source associated with that token is canceled.
true
if the currently executing task has received a request for cancellation, false
otherwise. If you call this method in the body of a task and it returns true
, you must respond with a call to cancel_current_task to acknowledge the cancellation request, after performing any cleanup you need. This will abort the execution of the task and cause it to enter into the canceled
state. If you do not respond and continue execution, or return instead of calling cancel_current_task
, the task will enter the completed
state when it is done. state.
A task is not cancellable if it was created without a cancellation token.
choice<std::tuple<_Type1, _Type2, _Types...> > Concurrency::make_choice | ( | _Type1 | _Item1, |
_Type2 | _Item2, | ||
_Types... | _Items | ||
) |
Constructs a choice
messaging block from an optional Scheduler
or ScheduleGroup
and two or more input sources.
_Type1 | The message block type of the first source. |
_Type2 | The message block type of the second source. |
_Types | The message block types of additional sources. |
_Item1 | The first source. |
_Item2 | The second source. |
_Items | Additional sources. |
choice
message block with two or more input sources. multitype_join<std::tuple<_Type1, _Type2, _Types...>, greedy> Concurrency::make_greedy_join | ( | _Type1 | _Item1, |
_Type2 | _Item2, | ||
_Types... | _Items | ||
) |
Constructs a greedy multitype_join
messaging block from an optional Scheduler
or ScheduleGroup
and two or more input sources.
_Type1 | The message block type of the first source. |
_Type2 | The message block type of the second source. |
_Types | The message block types of additional sources. |
_Item1 | The first source. |
_Item2 | The second source. |
_Items | Additional sources. |
greedy multitype_join
message block with two or more input sources. multitype_join<std::tuple<_Type1, _Type2, _Types...> > Concurrency::make_join | ( | _Type1 | _Item1, |
_Type2 | _Item2, | ||
_Types... | _Items | ||
) |
Constructs a non_greedy multitype_join
messaging block from an optional Scheduler
or ScheduleGroup
and two or more input sources.
_Type1 | The message block type of the first source. |
_Type2 | The message block type of the second source. |
_Types | The message block types of additional sources. |
_Item1 | The first source. |
_Item2 | The second source. |
_Items | Additional sources. |
non_greedy multitype_join
message block with two or more input sources. task_handle<_Function> Concurrency::make_task | ( | const _Function & | _Func | ) |
A factory method for creating a task_handle
object.
_Function | The type of the function object that will be invoked to execute the work represented by the task_handle object. |
_Func | The function that will be invoked to execute the work represented by the task_handle object. This may be a lambda functor, a pointer to a function, or any object that supports a version of the function call operator with the signature void operator()() . |
task_handle
object. This function is useful when you need to create a task_handle
object with a lambda expression, because it allows you to create the object without knowing the true type of the lambda functor.
bool Concurrency::operator!= | ( | const _Tuple_type< _Rank > & | _Lhs, |
const _Tuple_type< _Rank > & | _Rhs | ||
) |
|
inline |
Tests if the concurrent_vector
object on the left side of the operator is not equal to the concurrent_vector
object on the right side.
_Ty | The data type of the elements stored in the concurrent vectors. |
A1 | The allocator type of the first concurrent_vector object. |
A2 | The allocator type of the second concurrent_vector object. |
_A | An object of type concurrent_vector . |
_B | An object of type concurrent_vector . |
true
if the concurrent vectors are not equal; false
if the concurrent vectors are equal. Two concurrent vectors are equal if they have the same number of elements and their respective elements have the same values. Otherwise, they are unequal.
This method is not concurrency-safe with respect to other methods that could modify either of the concurrent vectors _A or _B .
_Tuple_type<_Rank> Concurrency::operator% | ( | const _Tuple_type< _Rank > & | _Lhs, |
typename _Tuple_type< _Rank >::value_type | _Rhs | ||
) |
_Tuple_type<_Rank> Concurrency::operator% | ( | typename _Tuple_type< _Rank >::value_type | _Lhs, |
const _Tuple_type< _Rank > & | _Rhs | ||
) |
_Tuple_type<_Rank> Concurrency::operator* | ( | const _Tuple_type< _Rank > & | _Lhs, |
typename _Tuple_type< _Rank >::value_type | _Rhs | ||
) |
_Tuple_type<_Rank> Concurrency::operator* | ( | typename _Tuple_type< _Rank >::value_type | _Lhs, |
const _Tuple_type< _Rank > & | _Rhs | ||
) |
_Tuple_type<_Rank> Concurrency::operator+ | ( | const _Tuple_type< _Rank > & | _Lhs, |
const _Tuple_type< _Rank > & | _Rhs | ||
) |
_Tuple_type<_Rank> Concurrency::operator+ | ( | const _Tuple_type< _Rank > & | _Lhs, |
typename _Tuple_type< _Rank >::value_type | _Rhs | ||
) |
_Tuple_type<_Rank> Concurrency::operator+ | ( | typename _Tuple_type< _Rank >::value_type | _Lhs, |
const _Tuple_type< _Rank > & | _Rhs | ||
) |
_Tuple_type<_Rank> Concurrency::operator- | ( | const _Tuple_type< _Rank > & | _Lhs, |
const _Tuple_type< _Rank > & | _Rhs | ||
) |
_Tuple_type<_Rank> Concurrency::operator- | ( | const _Tuple_type< _Rank > & | _Lhs, |
typename _Tuple_type< _Rank >::value_type | _Rhs | ||
) |
_Tuple_type<_Rank> Concurrency::operator- | ( | typename _Tuple_type< _Rank >::value_type | _Lhs, |
const _Tuple_type< _Rank > & | _Rhs | ||
) |
_Tuple_type<_Rank> Concurrency::operator/ | ( | const _Tuple_type< _Rank > & | _Lhs, |
typename _Tuple_type< _Rank >::value_type | _Rhs | ||
) |
_Tuple_type<_Rank> Concurrency::operator/ | ( | typename _Tuple_type< _Rank >::value_type | _Lhs, |
const _Tuple_type< _Rank > & | _Rhs | ||
) |
|
inline |
Tests if the concurrent_vector
object on the left side of the operator is less than the concurrent_vector
object on the right side.
_Ty | The data type of the elements stored in the concurrent vectors. |
A1 | The allocator type of the first concurrent_vector object. |
A2 | The allocator type of the second concurrent_vector object. |
_A | An object of type concurrent_vector . |
_B | An object of type concurrent_vector . |
true
if the concurrent vector on the left side of the operator is less than the concurrent vector on the right side of the operator; otherwise false
. The behavior of this operator is identical to the equivalent operator for the vector
class in the std
namespace.
This method is not concurrency-safe with respect to other methods that could modify either of the concurrent vectors _A or _B .
|
inline |
Tests if the concurrent_vector
object on the left side of the operator is less than or equal to the concurrent_vector
object on the right side.
_Ty | The data type of the elements stored in the concurrent vectors. |
A1 | The allocator type of the first concurrent_vector object. |
A2 | The allocator type of the second concurrent_vector object. |
_A | An object of type concurrent_vector . |
_B | An object of type concurrent_vector . |
true
if the concurrent vector on the left side of the operator is less than or equal to the concurrent vector on the right side of the operator; otherwise false
. The behavior of this operator is identical to the equivalent operator for the vector
class in the std
namespace.
This method is not concurrency-safe with respect to other methods that could modify either of the concurrent vectors _A or _B .
bool Concurrency::operator== | ( | const _Tuple_type< _Rank > & | _Lhs, |
const _Tuple_type< _Rank > & | _Rhs | ||
) |
|
inline |
Tests if the concurrent_vector
object on the left side of the operator is equal to the concurrent_vector
object on the right side.
_Ty | The data type of the elements stored in the concurrent vectors. |
A1 | The allocator type of the first concurrent_vector object. |
A2 | The allocator type of the second concurrent_vector object. |
_A | An object of type concurrent_vector . |
_B | An object of type concurrent_vector . |
true
if the concurrent vector on the left side of the operator is equal to the concurrent vector on the right side of the operator; otherwise false
. Two concurrent vectors are equal if they have the same number of elements and their respective elements have the same values. Otherwise, they are unequal.
This method is not concurrency-safe with respect to other methods that could modify either of the concurrent vectors _A or _B .
|
inline |
Tests if the concurrent_vector
object on the left side of the operator is greater than the concurrent_vector
object on the right side.
_Ty | The data type of the elements stored in the concurrent vectors. |
A1 | The allocator type of the first concurrent_vector object. |
A2 | The allocator type of the second concurrent_vector object. |
_A | An object of type concurrent_vector . |
_B | An object of type concurrent_vector . |
true
if the concurrent vector on the left side of the operator is greater than the concurrent vector on the right side of the operator; otherwise false
. The behavior of this operator is identical to the equivalent operator for the vector
class in the std
namespace.
This method is not concurrency-safe with respect to other methods that could modify either of the concurrent vectors _A or _B .
|
inline |
Tests if the concurrent_vector
object on the left side of the operator is greater than or equal to the concurrent_vector
object on the right side.
_Ty | The data type of the elements stored in the concurrent vectors. |
A1 | The allocator type of the first concurrent_vector object. |
A2 | The allocator type of the second concurrent_vector object. |
_A | An object of type concurrent_vector . |
_B | An object of type concurrent_vector . |
true
if the concurrent vector on the left side of the operator is greater than or equal to the concurrent vector on the right side of the operator; otherwise false
. The behavior of this operator is identical to the equivalent operator for the vector
class in the std
namespace.
This method is not concurrency-safe with respect to other methods that could modify either of the concurrent vectors _A or _B .
|
inline |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort
in that it is a compare-based, unstable, in-place sort except that it needs O(n)
additional space, and requires default initialization for the elements being sorted.
_Random_iterator | The iterator type of the input range. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. In most cases parallel_buffered_sort will show an improvement in performance over parallel_sort, and you should use it over parallel_sort if you have the memory available.
If you do not supply a binary comparator std::less
is used as the default, which requires the element type to provide the operator operator<()
.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort
in that it is a compare-based, unstable, in-place sort except that it needs O(n)
additional space, and requires default initialization for the elements being sorted.
_Allocator | The type of an STL compatible memory allocator. |
_Random_iterator | The iterator type of the input range. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. In most cases parallel_buffered_sort will show an improvement in performance over parallel_sort, and you should use it over parallel_sort if you have the memory available.
If you do not supply a binary comparator std::less
is used as the default, which requires the element type to provide the operator operator<()
.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort
in that it is a compare-based, unstable, in-place sort except that it needs O(n)
additional space, and requires default initialization for the elements being sorted.
_Allocator | The type of an STL compatible memory allocator. |
_Random_iterator | The iterator type of the input range. |
_Alloc | An instance of an STL compatible memory allocator. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. In most cases parallel_buffered_sort will show an improvement in performance over parallel_sort, and you should use it over parallel_sort if you have the memory available.
If you do not supply a binary comparator std::less
is used as the default, which requires the element type to provide the operator operator<()
.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort
in that it is a compare-based, unstable, in-place sort except that it needs O(n)
additional space, and requires default initialization for the elements being sorted.
_Random_iterator | The iterator type of the input range. |
_Function | The type of the binary comparator. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
_Func | A user-defined predicate function object that defines the comparison criterion to be satisfied by successive elements in the ordering. A binary predicate takes two arguments and returns true when satisfied and false when not satisfied. This comparator function must impose a strict weak ordering on pairs of elements from the sequence. |
_Chunk_size | The mimimum size of a chunk that will be split into two for parallel execution. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. In most cases parallel_buffered_sort will show an improvement in performance over parallel_sort, and you should use it over parallel_sort if you have the memory available.
If you do not supply a binary comparator std::less
is used as the default, which requires the element type to provide the operator operator<()
.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort
in that it is a compare-based, unstable, in-place sort except that it needs O(n)
additional space, and requires default initialization for the elements being sorted.
_Allocator | The type of an STL compatible memory allocator. |
_Random_iterator | The iterator type of the input range. |
_Function | The type of the binary comparator. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
_Func | A user-defined predicate function object that defines the comparison criterion to be satisfied by successive elements in the ordering. A binary predicate takes two arguments and returns true when satisfied and false when not satisfied. This comparator function must impose a strict weak ordering on pairs of elements from the sequence. |
_Chunk_size | The mimimum size of a chunk that will be split into two for parallel execution. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. In most cases parallel_buffered_sort will show an improvement in performance over parallel_sort, and you should use it over parallel_sort if you have the memory available.
If you do not supply a binary comparator std::less
is used as the default, which requires the element type to provide the operator operator<()
.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort
in that it is a compare-based, unstable, in-place sort except that it needs O(n)
additional space, and requires default initialization for the elements being sorted.
_Allocator | The type of an STL compatible memory allocator. |
_Random_iterator | The iterator type of the input range. |
_Function | The type of the binary comparator. |
_Alloc | An instance of an STL compatible memory allocator. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
_Func | A user-defined predicate function object that defines the comparison criterion to be satisfied by successive elements in the ordering. A binary predicate takes two arguments and returns true when satisfied and false when not satisfied. This comparator function must impose a strict weak ordering on pairs of elements from the sequence. |
_Chunk_size | The mimimum size of a chunk that will be split into two for parallel execution. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. In most cases parallel_buffered_sort will show an improvement in performance over parallel_sort, and you should use it over parallel_sort if you have the memory available.
If you do not supply a binary comparator std::less
is used as the default, which requires the element type to provide the operator operator<()
.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
void Concurrency::parallel_for | ( | _Index_type | _First, |
_Index_type | _Last, | ||
_Index_type | _Step, | ||
const _Function & | _Func, | ||
_Partitioner && | _Part | ||
) |
parallel_for
iterates over a range of indices and executes a user-supplied function at each iteration, in parallel.
_Index_type | The type of the index being used for the iteration. |
_Function | The type of the function that will be executed at each iteration. |
_Partitioner | The type of the partitioner that is used to partition the supplied range. |
_First | The first index to be included in the iteration. |
_Last | The index one past the last index to be included in the iteration. |
_Step | The value by which to step when iterating from _First to _Last . The step must be positive. invalid_argument is thrown if the step is less than 1. |
_Func | The function to be executed at each iteration. This may be a lambda expression, a function pointer, or any object that supports a version of the function call operator with the signature void operator()( _Index_type ) . |
_Part | A reference to the partitioner object. The argument can be one of const auto_partitioner& , const static_partitioner& , const simple_partitioner& or affinity_partitioner& If an affinity_partitionerobject is used, the reference must be a non-const l-value reference, so that the algorithm can store state for future loops to re-use. |
For more information, see Parallel Algorithms.
void Concurrency::parallel_for | ( | _Index_type | _First, |
_Index_type | _Last, | ||
_Index_type | _Step, | ||
const _Function & | _Func | ||
) |
parallel_for
iterates over a range of indices and executes a user-supplied function at each iteration, in parallel.
_Index_type | The type of the index being used for the iteration. _Index_type must be an integral type. |
_Function | The type of the function that will be executed at each iteration. |
_First | The first index to be included in the iteration. |
_Last | The index one past the last index to be included in the iteration. |
_Step | The value by which to step when iterating from _First to _Last . The step must be positive. invalid_argument is thrown if the step is less than 1. |
_Func | The function to be executed at each iteration. This may be a lambda expression, a function pointer, or any object that supports a version of the function call operator with the signature void operator()( _Index_type ) . |
For more information, see Parallel Algorithms.
void Concurrency::parallel_for | ( | _Index_type | _First, |
_Index_type | _Last, | ||
const _Function & | _Func, | ||
const auto_partitioner & | _Part = auto_partitioner() |
||
) |
parallel_for
iterates over a range of indices and executes a user-supplied function at each iteration, in parallel.
_Index_type | The type of the index being used for the iteration. |
_Function | The type of the function that will be executed at each iteration. |
_First | The first index to be included in the iteration. |
_Last | The index one past the last index to be included in the iteration. |
_Func | The function to be executed at each iteration. This may be a lambda expression, a function pointer, or any object that supports a version of the function call operator with the signature void operator()( _Index_type ) . |
_Part | A reference to the partitioner object. The argument can be one of const auto_partitioner& , const static_partitioner& , const simple_partitioner& or affinity_partitioner& If an affinity_partitionerobject is used, the reference must be a non-const l-value reference, so that the algorithm can store state for future loops to re-use. |
For more information, see Parallel Algorithms.
void Concurrency::parallel_for | ( | _Index_type | _First, |
_Index_type | _Last, | ||
const _Function & | _Func, | ||
const static_partitioner & | _Part | ||
) |
parallel_for
iterates over a range of indices and executes a user-supplied function at each iteration, in parallel.
_Index_type | The type of the index being used for the iteration. |
_Function | The type of the function that will be executed at each iteration. |
_First | The first index to be included in the iteration. |
_Last | The index one past the last index to be included in the iteration. |
_Func | The function to be executed at each iteration. This may be a lambda expression, a function pointer, or any object that supports a version of the function call operator with the signature void operator()( _Index_type ) . |
_Part | A reference to the partitioner object. The argument can be one of const auto_partitioner& , const static_partitioner& , const simple_partitioner& or affinity_partitioner& If an affinity_partitionerobject is used, the reference must be a non-const l-value reference, so that the algorithm can store state for future loops to re-use. |
For more information, see Parallel Algorithms.
void Concurrency::parallel_for | ( | _Index_type | _First, |
_Index_type | _Last, | ||
const _Function & | _Func, | ||
const simple_partitioner & | _Part | ||
) |
parallel_for
iterates over a range of indices and executes a user-supplied function at each iteration, in parallel.
_Index_type | The type of the index being used for the iteration. |
_Function | The type of the function that will be executed at each iteration. |
_First | The first index to be included in the iteration. |
_Last | The index one past the last index to be included in the iteration. |
_Func | The function to be executed at each iteration. This may be a lambda expression, a function pointer, or any object that supports a version of the function call operator with the signature void operator()( _Index_type ) . |
_Part | A reference to the partitioner object. The argument can be one of const auto_partitioner& , const static_partitioner& , const simple_partitioner& or affinity_partitioner& If an affinity_partitionerobject is used, the reference must be a non-const l-value reference, so that the algorithm can store state for future loops to re-use. |
For more information, see Parallel Algorithms.
void Concurrency::parallel_for | ( | _Index_type | _First, |
_Index_type | _Last, | ||
const _Function & | _Func, | ||
affinity_partitioner & | _Part | ||
) |
parallel_for
iterates over a range of indices and executes a user-supplied function at each iteration, in parallel.
_Index_type | The type of the index being used for the iteration. |
_Function | The type of the function that will be executed at each iteration. |
_First | The first index to be included in the iteration. |
_Last | The index one past the last index to be included in the iteration. |
_Func | The function to be executed at each iteration. This may be a lambda expression, a function pointer, or any object that supports a version of the function call operator with the signature void operator()( _Index_type ) . |
_Part | A reference to the partitioner object. The argument can be one of const auto_partitioner& , const static_partitioner& , const simple_partitioner& or affinity_partitioner& If an affinity_partitionerobject is used, the reference must be a non-const l-value reference, so that the algorithm can store state for future loops to re-use. |
For more information, see Parallel Algorithms.
void Concurrency::parallel_for_each | ( | _Iterator | _First, |
_Iterator | _Last, | ||
const _Function & | _Func | ||
) |
parallel_for_each
applies a specified function to each element within a range, in parallel. It is semantically equivalent to the for_each
function in the std
namespace, except that iteration over the elements is performed in parallel, and the order of iteration is unspecified. The argument _Func must support a function call operator of the form operator()(T)
where the parameter T is the item type of the container being iterated over.
_Iterator | The type of the iterator being used to iterate over the container. |
_Function | The type of the function that will be applied to each element within the range. |
_First | An iterator addressing the position of the first element to be included in parallel iteration. |
_Last | An iterator addressing the position one past the final element to be included in parallel iteration. |
_Func | A user-defined function object that is applied to each element in the range. |
will be used for the overload without an explicit partitioner.
For iterators that do not support random access, only auto_partitioner
is supported.
For more information, see Parallel Algorithms.
void Concurrency::parallel_for_each | ( | _Iterator | _First, |
_Iterator | _Last, | ||
const _Function & | _Func, | ||
_Partitioner && | _Part | ||
) |
parallel_for_each
applies a specified function to each element within a range, in parallel. It is semantically equivalent to the for_each
function in the std
namespace, except that iteration over the elements is performed in parallel, and the order of iteration is unspecified. The argument _Func must support a function call operator of the form operator()(T)
where the parameter T is the item type of the container being iterated over.
_Iterator | The type of the iterator being used to iterate over the container. |
_Function | The type of the function that will be applied to each element within the range. |
_First | An iterator addressing the position of the first element to be included in parallel iteration. |
_Last | An iterator addressing the position one past the final element to be included in parallel iteration. |
_Func | A user-defined function object that is applied to each element in the range. |
_Part | A reference to the partitioner object. The argument can be one of const auto_partitioner& , const static_partitioner& , const simple_partitioner& or affinity_partitioner& If an affinity_partitionerobject is used, the reference must be a non-const l-value reference, so that the algorithm can store state for future loops to re-use. |
will be used for the overload without an explicit partitioner.
For iterators that do not support random access, only auto_partitioner
is supported.
For more information, see Parallel Algorithms.
void Concurrency::parallel_for_each | ( | const extent< _Rank > & | _Compute_domain, |
const _Kernel_type & | _Kernel | ||
) |
Invokes a parallel computation of a kernel function over a compute domain on an accelerator_view. The accelerator_view is determined from the arrays and/or array_views captured by the kernel function, or if no accelerator_view can be derived, the default is chosen.
_Compute_domain | An extent which represents the set of indices that form the compute domain. |
_Kernel | A function object that takes an argument of type "index<_Rank>" which performs the parallel computation. |
void Concurrency::parallel_for_each | ( | const tiled_extent< _Dim0, _Dim1, _Dim2 > & | _Compute_domain, |
const _Kernel_type & | _Kernel | ||
) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 3-dimensional regions. The accelerator is determined from the arrays and/or array_views captured by the kernel function, or if no accelerator can be derived, the default is chosen.
_Compute_domain | A tiled_extent<_Dim0,_Dim1,_Dim2> which represents the tiled set of indices that form the compute domain. |
_Kernel | A function object that takes an argument of type "tiled_index<_Dim0,_Dim1,_Dim2>" which performs the parallel computation. |
void Concurrency::parallel_for_each | ( | const tiled_extent< _Dim0, _Dim1 > & | _Compute_domain, |
const _Kernel_type & | _Kernel | ||
) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 2-dimensional regions. The accelerator is determined from the arrays and/or array_views captured by the kernel function, or if no accelerator can be derived, the default is chosen.
_Compute_domain | A tiled_extent<_Dim0,_Dim1> which represents the tiled set of indices that form the compute domain. |
_Kernel | A function object that takes an argument of type "tiled_index<_Dim0,_Dim1>" which performs the parallel computation. |
void Concurrency::parallel_for_each | ( | const tiled_extent< _Dim0 > & | _Compute_domain, |
const _Kernel_type & | _Kernel | ||
) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 1-dimensional regions. The accelerator is determined from the arrays and/or array_views captured by the kernel function, or if no accelerator can be derived, the default is chosen.
_Compute_domain | A tiled_extent<_Dim0> which represents the tiled set of indices that form the compute domain. |
_Kernel | A function object that takes an argument of type "tiled_index<_Dim0>" which performs the parallel computation. |
void Concurrency::parallel_for_each | ( | const accelerator_view & | _Accl_view, |
const extent< _Rank > & | _Compute_domain, | ||
const _Kernel_type & | _Kernel | ||
) |
Invokes a parallel computation of a kernel function over a compute domain on an accelerator.
_Accl_view | The accelerator_view upon which to run this parallel computation. |
_Compute_domain | An extent which represents the set of indices that form the compute domain. |
_Kernel | A function object that takes an argument of type "index<_Rank>" which performs the parallel computation. |
void Concurrency::parallel_for_each | ( | const accelerator_view & | _Accl_view, |
const tiled_extent< _Dim0, _Dim1, _Dim2 > & | _Compute_domain, | ||
const _Kernel_type & | _Kernel | ||
) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 3-dimensional regions.
_Accl_view | The accelerator_view upon which to run this parallel computation. |
_Compute_domain | A tiled_extent<_Dim0,_Dim1,_Dim2> which represents the tiled set of indices that form the compute domain. |
_Kernel | A function object that takes an argument of type "tiled_index<_Dim0,_Dim1,_Dim2>" which performs the parallel computation. |
void Concurrency::parallel_for_each | ( | const accelerator_view & | _Accl_view, |
const tiled_extent< _Dim0, _Dim1 > & | _Compute_domain, | ||
const _Kernel_type & | _Kernel | ||
) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 2-dimensional regions.
_Accl_view | The accelerator_view upon which to run this parallel computation. |
_Compute_domain | A tiled_extent<_Dim0,_Dim1> which represents the tiled set of indices that form the compute domain. |
_Kernel | A function object that takes an argument of type "tiled_index<_Dim0,_Dim1>" which performs the parallel computation. |
void Concurrency::parallel_for_each | ( | const accelerator_view & | _Accl_view, |
const tiled_extent< _Dim0 > & | _Compute_domain, | ||
const _Kernel_type & | _Kernel | ||
) |
Invokes a parallel computation of a kernel function over a compute domain that has been tiled into 1-dimensional regions.
_Accl_view | The accelerator_view upon which to run this parallel computation. |
_Compute_domain | A tiled_extent<_Dim0> which represents the tiled set of indices that form the compute domain. |
_Kernel | A function object that takes an argument of type "tiled_index<_Dim0>" which performs the parallel computation. |
void Concurrency::parallel_invoke | ( | const _Function1 & | _Func1, |
const _Function2 & | _Func2 | ||
) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()()
.
_Function1 | The type of the first function object to be executed in parallel. |
_Function2 | The type of the second function object to be executed in parallel. |
_Func1 | The first function object to be executed in parallel. |
_Func2 | The second function object to be executed in parallel. |
Note that one or more of the function objects supplied as parameters may execute inline on the calling context.
If one or more of the function objects passed as parameters to this function throws an exception, the runtime will select one such exception of its choosing and propagate it out of the call to parallel_invoke
.
For more information, see Parallel Algorithms.
void Concurrency::parallel_invoke | ( | const _Function1 & | _Func1, |
const _Function2 & | _Func2, | ||
const _Function3 & | _Func3 | ||
) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()()
.
_Function1 | The type of the first function object to be executed in parallel. |
_Function2 | The type of the second function object to be executed in parallel. |
_Function3 | The type of the third function object to be executed in parallel. |
_Func1 | The first function object to be executed in parallel. |
_Func2 | The second function object to be executed in parallel. |
_Func3 | The third function object to be executed in parallel. |
Note that one or more of the function objects supplied as parameters may execute inline on the calling context.
If one or more of the function objects passed as parameters to this function throws an exception, the runtime will select one such exception of its choosing and propagate it out of the call to parallel_invoke
.
For more information, see Parallel Algorithms.
void Concurrency::parallel_invoke | ( | const _Function1 & | _Func1, |
const _Function2 & | _Func2, | ||
const _Function3 & | _Func3, | ||
const _Function4 & | _Func4 | ||
) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()()
.
_Function1 | The type of the first function object to be executed in parallel. |
_Function2 | The type of the second function object to be executed in parallel. |
_Function3 | The type of the third function object to be executed in parallel. |
_Function4 | The type of the fourth function object to be executed in parallel. |
_Func1 | The first function object to be executed in parallel. |
_Func2 | The second function object to be executed in parallel. |
_Func3 | The third function object to be executed in parallel. |
_Func4 | The fourth function object to be executed in parallel. |
Note that one or more of the function objects supplied as parameters may execute inline on the calling context.
If one or more of the function objects passed as parameters to this function throws an exception, the runtime will select one such exception of its choosing and propagate it out of the call to parallel_invoke
.
For more information, see Parallel Algorithms.
void Concurrency::parallel_invoke | ( | const _Function1 & | _Func1, |
const _Function2 & | _Func2, | ||
const _Function3 & | _Func3, | ||
const _Function4 & | _Func4, | ||
const _Function5 & | _Func5 | ||
) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()()
.
_Function1 | The type of the first function object to be executed in parallel. |
_Function2 | The type of the second function object to be executed in parallel. |
_Function3 | The type of the third function object to be executed in parallel. |
_Function4 | The type of the fourth function object to be executed in parallel. |
_Function5 | The type of the fifth function object to be executed in parallel. |
_Func1 | The first function object to be executed in parallel. |
_Func2 | The second function object to be executed in parallel. |
_Func3 | The third function object to be executed in parallel. |
_Func4 | The fourth function object to be executed in parallel. |
_Func5 | The fifth function object to be executed in parallel. |
Note that one or more of the function objects supplied as parameters may execute inline on the calling context.
If one or more of the function objects passed as parameters to this function throws an exception, the runtime will select one such exception of its choosing and propagate it out of the call to parallel_invoke
.
For more information, see Parallel Algorithms.
void Concurrency::parallel_invoke | ( | const _Function1 & | _Func1, |
const _Function2 & | _Func2, | ||
const _Function3 & | _Func3, | ||
const _Function4 & | _Func4, | ||
const _Function5 & | _Func5, | ||
const _Function6 & | _Func6 | ||
) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()()
.
_Function1 | The type of the first function object to be executed in parallel. |
_Function2 | The type of the second function object to be executed in parallel. |
_Function3 | The type of the third function object to be executed in parallel. |
_Function4 | The type of the fourth function object to be executed in parallel. |
_Function5 | The type of the fifth function object to be executed in parallel. |
_Function6 | The type of the sixth function object to be executed in parallel. |
_Func1 | The first function object to be executed in parallel. |
_Func2 | The second function object to be executed in parallel. |
_Func3 | The third function object to be executed in parallel. |
_Func4 | The fourth function object to be executed in parallel. |
_Func5 | The fifth function object to be executed in parallel. |
_Func6 | The sixth function object to be executed in parallel. |
Note that one or more of the function objects supplied as parameters may execute inline on the calling context.
If one or more of the function objects passed as parameters to this function throws an exception, the runtime will select one such exception of its choosing and propagate it out of the call to parallel_invoke
.
For more information, see Parallel Algorithms.
void Concurrency::parallel_invoke | ( | const _Function1 & | _Func1, |
const _Function2 & | _Func2, | ||
const _Function3 & | _Func3, | ||
const _Function4 & | _Func4, | ||
const _Function5 & | _Func5, | ||
const _Function6 & | _Func6, | ||
const _Function7 & | _Func7 | ||
) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()()
.
_Function1 | The type of the first function object to be executed in parallel. |
_Function2 | The type of the second function object to be executed in parallel. |
_Function3 | The type of the third function object to be executed in parallel. |
_Function4 | The type of the fourth function object to be executed in parallel. |
_Function5 | The type of the fifth function object to be executed in parallel. |
_Function6 | The type of the sixth function object to be executed in parallel. |
_Function7 | The type of the seventh function object to be executed in parallel. |
_Func1 | The first function object to be executed in parallel. |
_Func2 | The second function object to be executed in parallel. |
_Func3 | The third function object to be executed in parallel. |
_Func4 | The fourth function object to be executed in parallel. |
_Func5 | The fifth function object to be executed in parallel. |
_Func6 | The sixth function object to be executed in parallel. |
_Func7 | The seventh function object to be executed in parallel. |
Note that one or more of the function objects supplied as parameters may execute inline on the calling context.
If one or more of the function objects passed as parameters to this function throws an exception, the runtime will select one such exception of its choosing and propagate it out of the call to parallel_invoke
.
For more information, see Parallel Algorithms.
void Concurrency::parallel_invoke | ( | const _Function1 & | _Func1, |
const _Function2 & | _Func2, | ||
const _Function3 & | _Func3, | ||
const _Function4 & | _Func4, | ||
const _Function5 & | _Func5, | ||
const _Function6 & | _Func6, | ||
const _Function7 & | _Func7, | ||
const _Function8 & | _Func8 | ||
) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()()
.
_Function1 | The type of the first function object to be executed in parallel. |
_Function2 | The type of the second function object to be executed in parallel. |
_Function3 | The type of the third function object to be executed in parallel. |
_Function4 | The type of the fourth function object to be executed in parallel. |
_Function5 | The type of the fifth function object to be executed in parallel. |
_Function6 | The type of the sixth function object to be executed in parallel. |
_Function7 | The type of the seventh function object to be executed in parallel. |
_Function8 | The type of the eighth function object to be executed in parallel. |
_Func1 | The first function object to be executed in parallel. |
_Func2 | The second function object to be executed in parallel. |
_Func3 | The third function object to be executed in parallel. |
_Func4 | The fourth function object to be executed in parallel. |
_Func5 | The fifth function object to be executed in parallel. |
_Func6 | The sixth function object to be executed in parallel. |
_Func7 | The seventh function object to be executed in parallel. |
_Func8 | The eighth function object to be executed in parallel. |
Note that one or more of the function objects supplied as parameters may execute inline on the calling context.
If one or more of the function objects passed as parameters to this function throws an exception, the runtime will select one such exception of its choosing and propagate it out of the call to parallel_invoke
.
For more information, see Parallel Algorithms.
void Concurrency::parallel_invoke | ( | const _Function1 & | _Func1, |
const _Function2 & | _Func2, | ||
const _Function3 & | _Func3, | ||
const _Function4 & | _Func4, | ||
const _Function5 & | _Func5, | ||
const _Function6 & | _Func6, | ||
const _Function7 & | _Func7, | ||
const _Function8 & | _Func8, | ||
const _Function9 & | _Func9 | ||
) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()()
.
_Function1 | The type of the first function object to be executed in parallel. |
_Function2 | The type of the second function object to be executed in parallel. |
_Function3 | The type of the third function object to be executed in parallel. |
_Function4 | The type of the fourth function object to be executed in parallel. |
_Function5 | The type of the fifth function object to be executed in parallel. |
_Function6 | The type of the sixth function object to be executed in parallel. |
_Function7 | The type of the seventh function object to be executed in parallel. |
_Function8 | The type of the eighth function object to be executed in parallel. |
_Function9 | The type of the ninth function object to be executed in parallel. |
_Func1 | The first function object to be executed in parallel. |
_Func2 | The second function object to be executed in parallel. |
_Func3 | The third function object to be executed in parallel. |
_Func4 | The fourth function object to be executed in parallel. |
_Func5 | The fifth function object to be executed in parallel. |
_Func6 | The sixth function object to be executed in parallel. |
_Func7 | The seventh function object to be executed in parallel. |
_Func8 | The eighth function object to be executed in parallel. |
_Func9 | The ninth function object to be executed in parallel. |
Note that one or more of the function objects supplied as parameters may execute inline on the calling context.
If one or more of the function objects passed as parameters to this function throws an exception, the runtime will select one such exception of its choosing and propagate it out of the call to parallel_invoke
.
For more information, see Parallel Algorithms.
void Concurrency::parallel_invoke | ( | const _Function1 & | _Func1, |
const _Function2 & | _Func2, | ||
const _Function3 & | _Func3, | ||
const _Function4 & | _Func4, | ||
const _Function5 & | _Func5, | ||
const _Function6 & | _Func6, | ||
const _Function7 & | _Func7, | ||
const _Function8 & | _Func8, | ||
const _Function9 & | _Func9, | ||
const _Function10 & | _Func10 | ||
) |
Executes the function objects supplied as parameters in parallel, and blocks until they have finished executing. Each function object could be a lambda expression, a pointer to function, or any object that supports the function call operator with the signature void operator()()
.
_Function1 | The type of the first function object to be executed in parallel. |
_Function2 | The type of the second function object to be executed in parallel. |
_Function3 | The type of the third function object to be executed in parallel. |
_Function4 | The type of the fourth function object to be executed in parallel. |
_Function5 | The type of the fifth function object to be executed in parallel. |
_Function6 | The type of the sixth function object to be executed in parallel. |
_Function7 | The type of the seventh function object to be executed in parallel. |
_Function8 | The type of the eighth function object to be executed in parallel. |
_Function9 | The type of the ninth function object to be executed in parallel. |
_Function10 | The type of the tenth function object to be executed in parallel. |
_Func1 | The first function object to be executed in parallel. |
_Func2 | The second function object to be executed in parallel. |
_Func3 | The third function object to be executed in parallel. |
_Func4 | The fourth function object to be executed in parallel. |
_Func5 | The fifth function object to be executed in parallel. |
_Func6 | The sixth function object to be executed in parallel. |
_Func7 | The seventh function object to be executed in parallel. |
_Func8 | The eighth function object to be executed in parallel. |
_Func9 | The ninth function object to be executed in parallel. |
_Func10 | The tenth function object to be executed in parallel. |
Note that one or more of the function objects supplied as parameters may execute inline on the calling context.
If one or more of the function objects passed as parameters to this function throws an exception, the runtime will select one such exception of its choosing and propagate it out of the call to parallel_invoke
.
For more information, see Parallel Algorithms.
|
inline |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted.
_Random_iterator | The iterator type of the input range. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. An unary projection functor with the signature<c>I _Proj_func(T) is required to return a key when given an element, where T
is the element type and I
is an unsigned integer-like type.
If you do not supply a projection function, a default projection function which simply returns the element is used for integral types. The function will fail to compile if the element is not an integral type in the absence of a projection function.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted.
_Allocator | The type of an STL compatible memory allocator. |
_Random_iterator | The iterator type of the input range. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. An unary projection functor with the signature<c>I _Proj_func(T) is required to return a key when given an element, where T
is the element type and I
is an unsigned integer-like type.
If you do not supply a projection function, a default projection function which simply returns the element is used for integral types. The function will fail to compile if the element is not an integral type in the absence of a projection function.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted.
_Allocator | The type of an STL compatible memory allocator. |
_Random_iterator | The iterator type of the input range. |
_Alloc | An instance of an STL compatible memory allocator. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. An unary projection functor with the signature<c>I _Proj_func(T) is required to return a key when given an element, where T
is the element type and I
is an unsigned integer-like type.
If you do not supply a projection function, a default projection function which simply returns the element is used for integral types. The function will fail to compile if the element is not an integral type in the absence of a projection function.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted.
_Random_iterator | The iterator type of the input range. |
_Function | The type of the projection function. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
_Proj_func | A user-defined projection function object that converts an element into an integral value. |
_Chunk_size | The mimimum size of a chunk that will be split into two for parallel execution. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. An unary projection functor with the signature<c>I _Proj_func(T) is required to return a key when given an element, where T
is the element type and I
is an unsigned integer-like type.
If you do not supply a projection function, a default projection function which simply returns the element is used for integral types. The function will fail to compile if the element is not an integral type in the absence of a projection function.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted.
_Allocator | The type of an STL compatible memory allocator. |
_Random_iterator | The iterator type of the input range. |
_Function | The type of the projection function. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
_Proj_func | A user-defined projection function object that converts an element into an integral value. |
_Chunk_size | The mimimum size of a chunk that will be split into two for parallel execution. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. An unary projection functor with the signature<c>I _Proj_func(T) is required to return a key when given an element, where T
is the element type and I
is an unsigned integer-like type.
If you do not supply a projection function, a default projection function which simply returns the element is used for integral types. The function will fail to compile if the element is not an integral type in the absence of a projection function.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Arranges elements in a specified range into an non descending order using a radix sorting algorithm. This is a stable sort function which requires a projection function that can project elements to be sorted into unsigned integer-like keys. Default initialization is required for the elements being sorted.
_Allocator | The type of an STL compatible memory allocator. |
_Random_iterator | The iterator type of the input range. |
_Function | The type of the projection function. |
_Alloc | An instance of an STL compatible memory allocator. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
_Proj_func | A user-defined projection function object that converts an element into an integral value. |
_Chunk_size | The mimimum size of a chunk that will be split into two for parallel execution. |
All overloads require n * sizeof(T)
additional space, where n
is the number of elements to be sorted, and T
is the element type. An unary projection functor with the signature<c>I _Proj_func(T) is required to return a key when given an element, where T
is the element type and I
is an unsigned integer-like type.
If you do not supply a projection function, a default projection function which simply returns the element is used for integral types. The function will fail to compile if the element is not an integral type in the absence of a projection function.
If you do not supply an allocator type or instance, the STL memory allocator std::allocator<T>
is used to allocate the buffer.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Computes the sum of all elements in a specified range by computing successive partial sums, or computes the result of successive partial results similarly obtained from using a specified binary operation other than sum, in parallel. parallel_reduce
is semantically similar to std::accumulate
, except that it requires the binary operation to be associative, and requires an identity value instead of an initial value.
_Forward_iterator | The iterator type of input range. |
_Begin | An input iterator addressing the first element in the range to be reduced. |
_End | An input iterator addressing the element that is one position beyond the final element in the range to be reduced. |
_Identity | The identity value _Identity is of the same type as the result type of the reduction and also the value_type of the iterator for the first and second overloads. For the third overload, the identity value must have the same type as the result type of the reduction, but can be different from the value_type of the iterator. It must have an appropriate value such that the range reduction operator _Range_fun , when applied to a range of a single element of type value_type and the identity value, behaves like a type cast of the value from type value_type to the identity type. |
To perform a parallel reduction, the function divides the range into chunks based on the number of workers available to the underlying scheduler. The reduction takes place in two phases, the first phase performs a reduction within each chunk, and the second phase performs a reduction between the partial results from each chunk.
The first overload requires that the iterator's value_type
, T
, be the same as the identity value type as well as the reduction result type. The element type T must provide the operator T T::operator + (T)
to reduce elements in each chunk. The same operator is used in the second phase as well.
The second overload also requires that the iterator's value_type
be the same as the identity value type as well as the reduction result type. The supplied binary operator _Sym_fun is used in both reduction phases, with the identity value as the initial value for the first phase.
For the third overload, the identity value type must be the same as the reduction result type, but the iterator's value_type
may be different from both. The range reduction function _Range_fun is used in the first phase with the identity value as the initial value, and the binary function _Sym_reduce_fun is applied to sub results in the second phase.
|
inline |
Computes the sum of all elements in a specified range by computing successive partial sums, or computes the result of successive partial results similarly obtained from using a specified binary operation other than sum, in parallel. parallel_reduce
is semantically similar to std::accumulate
, except that it requires the binary operation to be associative, and requires an identity value instead of an initial value.
_Forward_iterator | The iterator type of input range. |
_Sym_reduce_fun | The type of the symmetric reduction function. This must be a function type with signature _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type) , where _Reduce_type is the same as the identity type and the result type of the reduction. For the third overload, this should be consistent with the output type of _Range_reduce_fun . |
_Begin | An input iterator addressing the first element in the range to be reduced. |
_End | An input iterator addressing the element that is one position beyond the final element in the range to be reduced. |
_Identity | The identity value _Identity is of the same type as the result type of the reduction and also the value_type of the iterator for the first and second overloads. For the third overload, the identity value must have the same type as the result type of the reduction, but can be different from the value_type of the iterator. It must have an appropriate value such that the range reduction operator _Range_fun , when applied to a range of a single element of type value_type and the identity value, behaves like a type cast of the value from type value_type to the identity type. |
_Sym_fun | The symmetric function that will be used in the second of the reduction. Refer to Remarks for more information. |
To perform a parallel reduction, the function divides the range into chunks based on the number of workers available to the underlying scheduler. The reduction takes place in two phases, the first phase performs a reduction within each chunk, and the second phase performs a reduction between the partial results from each chunk.
The first overload requires that the iterator's value_type
, T
, be the same as the identity value type as well as the reduction result type. The element type T must provide the operator T T::operator + (T)
to reduce elements in each chunk. The same operator is used in the second phase as well.
The second overload also requires that the iterator's value_type
be the same as the identity value type as well as the reduction result type. The supplied binary operator _Sym_fun is used in both reduction phases, with the identity value as the initial value for the first phase.
For the third overload, the identity value type must be the same as the reduction result type, but the iterator's value_type
may be different from both. The range reduction function _Range_fun is used in the first phase with the identity value as the initial value, and the binary function _Sym_reduce_fun is applied to sub results in the second phase.
|
inline |
Computes the sum of all elements in a specified range by computing successive partial sums, or computes the result of successive partial results similarly obtained from using a specified binary operation other than sum, in parallel. parallel_reduce
is semantically similar to std::accumulate
, except that it requires the binary operation to be associative, and requires an identity value instead of an initial value.
_Reduce_type | The type that the input will reduce to, which can be different from the input element type. The return value and identity value will has this type. |
_Forward_iterator | The iterator type of input range. |
_Range_reduce_fun | The type of the range reduction function. This must be a function type with signature _Reduce_type _Range_fun(_Forward_iterator, _Forward_iterator, _Reduce_type) , _Reduce_type is the same as the identity type and the result type of the reduction. |
_Sym_reduce_fun | The type of the symmetric reduction function. This must be a function type with signature _Reduce_type _Sym_fun(_Reduce_type, _Reduce_type) , where _Reduce_type is the same as the identity type and the result type of the reduction. For the third overload, this should be consistent with the output type of _Range_reduce_fun . |
_Begin | An input iterator addressing the first element in the range to be reduced. |
_End | An input iterator addressing the element that is one position beyond the final element in the range to be reduced. |
_Identity | The identity value _Identity is of the same type as the result type of the reduction and also the value_type of the iterator for the first and second overloads. For the third overload, the identity value must have the same type as the result type of the reduction, but can be different from the value_type of the iterator. It must have an appropriate value such that the range reduction operator _Range_fun , when applied to a range of a single element of type value_type and the identity value, behaves like a type cast of the value from type value_type to the identity type. |
_Range_fun | The function that will be used in the first phase of the reduction. Refer to Remarks for more information. |
_Sym_fun | The symmetric function that will be used in the second of the reduction. Refer to Remarks for more information. |
To perform a parallel reduction, the function divides the range into chunks based on the number of workers available to the underlying scheduler. The reduction takes place in two phases, the first phase performs a reduction within each chunk, and the second phase performs a reduction between the partial results from each chunk.
The first overload requires that the iterator's value_type
, T
, be the same as the identity value type as well as the reduction result type. The element type T must provide the operator T T::operator + (T)
to reduce elements in each chunk. The same operator is used in the second phase as well.
The second overload also requires that the iterator's value_type
be the same as the identity value type as well as the reduction result type. The supplied binary operator _Sym_fun is used in both reduction phases, with the identity value as the initial value for the first phase.
For the third overload, the identity value type must be the same as the reduction result type, but the iterator's value_type
may be different from both. The range reduction function _Range_fun is used in the first phase with the identity value as the initial value, and the binary function _Sym_reduce_fun is applied to sub results in the second phase.
|
inline |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort
in that it is a compare-based, unstable, in-place sort.
_Random_iterator | The iterator type of the input range. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
The first overload uses the the binary comparator std::less
.
The second overloaded uses the supplied binary comparator that should have the signature bool _Func(T, T)
where T
is the type of the elements in the input range.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
|
inline |
Arranges the elements in a specified range into a nondescending order, or according to an ordering criterion specified by a binary predicate, in parallel. This function is semantically similar to std::sort
in that it is a compare-based, unstable, in-place sort.
_Random_iterator | The iterator type of the input range. |
_Function | The type of the binary comparison functor. |
_Begin | A random-access iterator addressing the position of the first element in the range to be sorted. |
_End | A random-access iterator addressing the position one past the final element in the range to be sorted. |
_Func | A user-defined predicate function object that defines the comparison criterion to be satisfied by successive elements in the ordering. A binary predicate takes two arguments and returns true when satisfied and false when not satisfied. This comparator function must impose a strict weak ordering on pairs of elements from the sequence. |
_Chunk_size | The mimimum size of a chunk that will be split into two for parallel execution. |
The first overload uses the the binary comparator std::less
.
The second overloaded uses the supplied binary comparator that should have the signature bool _Func(T, T)
where T
is the type of the elements in the input range.
The algorithm divides the input range into two chunks and successively divides each chunk into two sub-chunks for execution in parallel. The optional argument _Chunk_size can be used to indicate to the algorithm that it should handles chunks of size < _Chunk_size serially.
_Output_iterator Concurrency::parallel_transform | ( | _Input_iterator1 | _First1, |
_Input_iterator1 | _Last1, | ||
_Output_iterator | _Result, | ||
const _Unary_operator& | _Unary_op, | ||
const auto_partitioner & | _Part = auto_partitioner() |
||
) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform
.
_Input_iterator1 | The type of the first or only input iterator. |
_Output_iterator | The type of the output iterator. |
_Unary_operator | The type of the unary functor to be executed on each element in the input range. |
_First1 | An input iterator addressing the position of the first element in the first or only source range to be operated on. |
_Last1 | An input iterator addressing the position one past the final element in the first or only source range to be operated on. |
_Result | An output iterator addressing the position of the first element in the destination range. |
_Unary_op | A user-defined unary function object that is applied to each element in the source range. |
_Part | A reference to the partitioner object. The argument can be one of const auto_partitioner& , const static_partitioner& , const simple_partitioner& or affinity_partitioner& If an affinity_partitionerobject is used, the reference must be a non-const l-value reference, so that the algorithm can store state for future loops to re-use. |
will be used for the overloads without an explicit partitioner argument.
For iterators that do not support random access, only auto_partitioner
is supported.
The overloads that take the argument _Unary_op transform the input range into the output range by applying the unary functor to each element in the input range. _Unary_op must support the function call operator with signature operator()(T)
where T
is the value type of the range being iterated over.
The overloads that take the argument _Binary_op transform two input ranges into the output range by applying the binary functor to one element from the first input range and one element from the second input range. _Binary_op must support the function call operator with signature operator()(T, U)
where T
, U
are value types of the two input iterators.
For more information, see Parallel Algorithms.
_Output_iterator Concurrency::parallel_transform | ( | _Input_iterator1 | _First1, |
_Input_iterator1 | _Last1, | ||
_Output_iterator | _Result, | ||
const _Unary_operator& | _Unary_op, | ||
const static_partitioner & | _Part | ||
) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform
.
_Input_iterator1 | The type of the first or only input iterator. |
_Output_iterator | The type of the output iterator. |
_Unary_operator | The type of the unary functor to be executed on each element in the input range. |
_First1 | An input iterator addressing the position of the first element in the first or only source range to be operated on. |
_Last1 | An input iterator addressing the position one past the final element in the first or only source range to be operated on. |
_Result | An output iterator addressing the position of the first element in the destination range. |
_Unary_op | A user-defined unary function object that is applied to each element in the source range. |
_Part | A reference to the partitioner object. The argument can be one of const auto_partitioner& , const static_partitioner& , const simple_partitioner& or affinity_partitioner& If an affinity_partitionerobject is used, the reference must be a non-const l-value reference, so that the algorithm can store state for future loops to re-use. |
will be used for the overloads without an explicit partitioner argument.
For iterators that do not support random access, only auto_partitioner
is supported.
The overloads that take the argument _Unary_op transform the input range into the output range by applying the unary functor to each element in the input range. _Unary_op must support the function call operator with signature operator()(T)
where T
is the value type of the range being iterated over.
The overloads that take the argument _Binary_op transform two input ranges into the output range by applying the binary functor to one element from the first input range and one element from the second input range. _Binary_op must support the function call operator with signature operator()(T, U)
where T
, U
are value types of the two input iterators.
For more information, see Parallel Algorithms.
_Output_iterator Concurrency::parallel_transform | ( | _Input_iterator1 | _First1, |
_Input_iterator1 | _Last1, | ||
_Output_iterator | _Result, | ||
const _Unary_operator& | _Unary_op, | ||
const simple_partitioner & | _Part | ||
) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform
.
_Input_iterator1 | The type of the first or only input iterator. |
_Output_iterator | The type of the output iterator. |
_Unary_operator | The type of the unary functor to be executed on each element in the input range. |
_First1 | An input iterator addressing the position of the first element in the first or only source range to be operated on. |
_Last1 | An input iterator addressing the position one past the final element in the first or only source range to be operated on. |
_Result | An output iterator addressing the position of the first element in the destination range. |
_Unary_op | A user-defined unary function object that is applied to each element in the source range. |
_Part | A reference to the partitioner object. The argument can be one of const auto_partitioner& , const static_partitioner& , const simple_partitioner& or affinity_partitioner& If an affinity_partitionerobject is used, the reference must be a non-const l-value reference, so that the algorithm can store state for future loops to re-use. |
will be used for the overloads without an explicit partitioner argument.
For iterators that do not support random access, only auto_partitioner
is supported.
The overloads that take the argument _Unary_op transform the input range into the output range by applying the unary functor to each element in the input range. _Unary_op must support the function call operator with signature operator()(T)
where T
is the value type of the range being iterated over.
The overloads that take the argument _Binary_op transform two input ranges into the output range by applying the binary functor to one element from the first input range and one element from the second input range. _Binary_op must support the function call operator with signature operator()(T, U)
where T
, U
are value types of the two input iterators.
For more information, see Parallel Algorithms.
_Output_iterator Concurrency::parallel_transform | ( | _Input_iterator1 | _First1, |
_Input_iterator1 | _Last1, | ||
_Output_iterator | _Result, | ||
const _Unary_operator& | _Unary_op, | ||
affinity_partitioner & | _Part | ||
) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform
.
_Input_iterator1 | The type of the first or only input iterator. |
_Output_iterator | The type of the output iterator. |
_Unary_operator | The type of the unary functor to be executed on each element in the input range. |
_First1 | An input iterator addressing the position of the first element in the first or only source range to be operated on. |
_Last1 | An input iterator addressing the position one past the final element in the first or only source range to be operated on. |
_Result | An output iterator addressing the position of the first element in the destination range. |
_Unary_op | A user-defined unary function object that is applied to each element in the source range. |
_Part | A reference to the partitioner object. The argument can be one of const auto_partitioner& , const static_partitioner& , const simple_partitioner& or affinity_partitioner& If an affinity_partitionerobject is used, the reference must be a non-const l-value reference, so that the algorithm can store state for future loops to re-use. |
will be used for the overloads without an explicit partitioner argument.
For iterators that do not support random access, only auto_partitioner
is supported.
The overloads that take the argument _Unary_op transform the input range into the output range by applying the unary functor to each element in the input range. _Unary_op must support the function call operator with signature operator()(T)
where T
is the value type of the range being iterated over.
The overloads that take the argument _Binary_op transform two input ranges into the output range by applying the binary functor to one element from the first input range and one element from the second input range. _Binary_op must support the function call operator with signature operator()(T, U)
where T
, U
are value types of the two input iterators.
For more information, see Parallel Algorithms.
_Output_iterator Concurrency::parallel_transform | ( | _Input_iterator1 | _First1, |
_Input_iterator1 | _Last1, | ||
_Input_iterator2 | _First2, | ||
_Output_iterator | _Result, | ||
const _Binary_operator& | _Binary_op, | ||
_Partitioner && | _Part | ||
) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform
.
_Input_iterator1 | The type of the first or only input iterator. |
_Input_iterator2 | The type of second input iterator. |
_Output_iterator | The type of the output iterator. |
_Binary_operator | The type of the binary functor executed pairwise on elements from the two source ranges. |
_First1 | An input iterator addressing the position of the first element in the first or only source range to be operated on. |
_Last1 | An input iterator addressing the position one past the final element in the first or only source range to be operated on. |
_First2 | An input iterator addressing the position of the first element in the second source range to be operated on. |
_Result | An output iterator addressing the position of the first element in the destination range. |
_Binary_op | A user-defined binary function object that is applied pairwise, in a forward order, to the two source ranges. |
_Part | A reference to the partitioner object. The argument can be one of const auto_partitioner& , const static_partitioner& , const simple_partitioner& or affinity_partitioner& If an affinity_partitionerobject is used, the reference must be a non-const l-value reference, so that the algorithm can store state for future loops to re-use. |
will be used for the overloads without an explicit partitioner argument.
For iterators that do not support random access, only auto_partitioner
is supported.
The overloads that take the argument _Unary_op transform the input range into the output range by applying the unary functor to each element in the input range. _Unary_op must support the function call operator with signature operator()(T)
where T
is the value type of the range being iterated over.
The overloads that take the argument _Binary_op transform two input ranges into the output range by applying the binary functor to one element from the first input range and one element from the second input range. _Binary_op must support the function call operator with signature operator()(T, U)
where T
, U
are value types of the two input iterators.
For more information, see Parallel Algorithms.
_Output_iterator Concurrency::parallel_transform | ( | _Input_iterator1 | _First1, |
_Input_iterator1 | _Last1, | ||
_Input_iterator2 | _First2, | ||
_Output_iterator | _Result, | ||
const _Binary_operator& | _Binary_op | ||
) |
Applies a specified function object to each element in a source range, or to a pair of elements from two source ranges, and copies the return values of the function object into a destination range, in parallel. This functional is semantically equivalent to std::transform
.
_Input_iterator1 | The type of the first or only input iterator. |
_Input_iterator2 | The type of second input iterator. |
_Output_iterator | The type of the output iterator. |
_Binary_operator | The type of the binary functor executed pairwise on elements from the two source ranges. |
_First1 | An input iterator addressing the position of the first element in the first or only source range to be operated on. |
_Last1 | An input iterator addressing the position one past the final element in the first or only source range to be operated on. |
_First2 | An input iterator addressing the position of the first element in the second source range to be operated on. |
_Result | An output iterator addressing the position of the first element in the destination range. |
_Binary_op | A user-defined binary function object that is applied pairwise, in a forward order, to the two source ranges. |
will be used for the overloads without an explicit partitioner argument.
For iterators that do not support random access, only auto_partitioner
is supported.
The overloads that take the argument _Unary_op transform the input range into the output range by applying the unary functor to each element in the input range. _Unary_op must support the function call operator with signature operator()(T)
where T
is the value type of the range being iterated over.
The overloads that take the argument _Binary_op transform two input ranges into the output range by applying the binary functor to one element from the first input range and one element from the second input range. _Binary_op must support the function call operator with signature operator()(T, U)
where T
, U
are value types of the two input iterators.
For more information, see Parallel Algorithms.
_Type Concurrency::receive | ( | _Inout_ ISource< _Type > * | _Src, |
unsigned int | _Timeout = COOPERATIVE_TIMEOUT_INFINITE |
||
) |
A general receive implementation, allowing a context to wait for data from exactly one source and filter the values that are accepted.
_Type | The payload type. |
_Src | A pointer or reference to the source from which data is expected. |
_Timeout | The maximum time for which the method should for the data, in milliseconds. |
If the parameter _Timeout has a value other than the constant COOPERATIVE_TIMEOUT_INFINITE
, the exception operation_timed_out is thrown if the specified amount of time expires before a message is received. If you want a zero length timeout, you should use the try_receive function, as opposed to calling receive
with a timeout of 0
(zero), as it is more efficient and does not throw exceptions on timeouts.
For more information, see Message Passing Functions.
_Type Concurrency::receive | ( | _Inout_ ISource< _Type > * | _Src, |
typename ITarget< _Type >::filter_method const & | _Filter_proc, | ||
unsigned int | _Timeout = COOPERATIVE_TIMEOUT_INFINITE |
||
) |
A general receive implementation, allowing a context to wait for data from exactly one source and filter the values that are accepted.
_Type | The payload type. |
_Src | A pointer or reference to the source from which data is expected. |
_Filter_proc | A filter function which determines whether messages should be accepted. |
_Timeout | The maximum time for which the method should for the data, in milliseconds. |
If the parameter _Timeout has a value other than the constant COOPERATIVE_TIMEOUT_INFINITE
, the exception operation_timed_out is thrown if the specified amount of time expires before a message is received. If you want a zero length timeout, you should use the try_receive function, as opposed to calling receive
with a timeout of 0
(zero), as it is more efficient and does not throw exceptions on timeouts.
For more information, see Message Passing Functions.
_Type Concurrency::receive | ( | ISource< _Type > & | _Src, |
unsigned int | _Timeout = COOPERATIVE_TIMEOUT_INFINITE |
||
) |
A general receive implementation, allowing a context to wait for data from exactly one source and filter the values that are accepted.
_Type | The payload type. |
_Src | A pointer or reference to the source from which data is expected. |
_Timeout | The maximum time for which the method should for the data, in milliseconds. |
If the parameter _Timeout has a value other than the constant COOPERATIVE_TIMEOUT_INFINITE
, the exception operation_timed_out is thrown if the specified amount of time expires before a message is received. If you want a zero length timeout, you should use the try_receive function, as opposed to calling receive
with a timeout of 0
(zero), as it is more efficient and does not throw exceptions on timeouts.
For more information, see Message Passing Functions.
_Type Concurrency::receive | ( | ISource< _Type > & | _Src, |
typename ITarget< _Type >::filter_method const & | _Filter_proc, | ||
unsigned int | _Timeout = COOPERATIVE_TIMEOUT_INFINITE |
||
) |
A general receive implementation, allowing a context to wait for data from exactly one source and filter the values that are accepted.
_Type | The payload type. |
_Src | A pointer or reference to the source from which data is expected. |
_Filter_proc | A filter function which determines whether messages should be accepted. |
_Timeout | The maximum time for which the method should for the data, in milliseconds. |
If the parameter _Timeout has a value other than the constant COOPERATIVE_TIMEOUT_INFINITE
, the exception operation_timed_out is thrown if the specified amount of time expires before a message is received. If you want a zero length timeout, you should use the try_receive function, as opposed to calling receive
with a timeout of 0
(zero), as it is more efficient and does not throw exceptions on timeouts.
For more information, see Message Passing Functions.
void Concurrency::run_with_cancellation_token | ( | const _Function & | _Func, |
cancellation_token | _Ct | ||
) |
Executes a function object immediately and synchronously in the context of a given cancellation token.
_Function | The type of the function object that will be invoked. |
_Func | The function object which will be executed. This object must support the function call operator with a signature of void(void). |
_Ct | The cancellation token which will control implicit cancellation of the function object. Use cancellation_token::none() if you want the function execute without any possibility of implicit cancellation from a parent task group being canceled. |
Any interruption points in the function object will be triggered when the cancellation_token
is canceled. The explicit token _Ct will isolate this _Func from parent cancellation if the parent has a different token or no token.
bool Concurrency::send | ( | _Inout_ ITarget< _Type > * | _Trg, |
const _Type & | _Data | ||
) |
A synchronous send operation, which waits until the target either accepts or declines the message.
_Type | The payload type. |
_Trg | A pointer or reference to the target to which data is sent. |
_Data | A reference to the data to be sent. |
true
if the message was accepted, false
otherwise. For more information, see Message Passing Functions.
A synchronous send operation, which waits until the target either accepts or declines the message.
_Type | The payload type. |
_Trg | A pointer or reference to the target to which data is sent. |
_Data | A reference to the data to be sent. |
true
if the message was accepted, false
otherwise. For more information, see Message Passing Functions.
|
inline |
|
inline |
Exchanges the elements of two concurrent_vector
objects.
_Ty | The data type of the elements stored in the concurrent vectors. |
_Ax | The allocator type of the concurrent vectors. |
_B | The concurrent vector providing the elements to be swapped, or the vector whose elements are to be exchanged with those of the concurrent vector _A . |
_A | The concurrent vector whose elements are to be exchanged with those of the concurrent vector _B . |
The template function is an algorithm specialized on the container class concurrent_vector
to execute the member function _A .concurrent_vector::swap(_B ). These are instances of the partial ordering of function templates by the compiler. When template functions are overloaded in such a way that the match of the template with the function call is not unique, then the compiler will select the most specialized version of the template function. The general version of the template function, template <class T> void swap(T&, T&)
, in the algorithm class works by assignment and is a slow operation. The specialized version in each container is much faster as it can work with the internal representation of the container class.
This method is not concurrency-safe. You must ensure that no other threads are performing operations on either of the concurrent vectors when you call this method.
|
inline |
Ensures that tile_static memory accesses are visible to other threads in the thread tile, and are executed according to program order
_Barrier | A tile_barrier object |
void Concurrency::Trace_agents_register_name | ( | _Inout_ _Type * | _PObject, |
_In_z_ const wchar_t * | _Name | ||
) |
Associates the given name to the message block or agent in the ETW trace.
_Type | The type of the object. This is typically a message block or an agent. |
_PObject | A pointer to the message block or agent that is being named in the trace. |
_Name | The name for the given object. |
bool Concurrency::try_receive | ( | _Inout_ ISource< _Type > * | _Src, |
_Type & | _value | ||
) |
A general try-receive implementation, allowing a context to look for data from exactly one source and filter the values that are accepted. If the data is not ready, the method will return false.
_Type | The payload type. |
_Src | A pointer or reference to the source from which data is expected. |
_value | A reference to a location where the result will be placed. |
bool
value indicating whether or not a payload was placed in _value . For more information, see Message Passing Functions.
bool Concurrency::try_receive | ( | _Inout_ ISource< _Type > * | _Src, |
_Type & | _value, | ||
typename ITarget< _Type >::filter_method const & | _Filter_proc | ||
) |
A general try-receive implementation, allowing a context to look for data from exactly one source and filter the values that are accepted. If the data is not ready, the method will return false.
_Type | The payload type. |
_Src | A pointer or reference to the source from which data is expected. |
_value | A reference to a location where the result will be placed. |
_Filter_proc | A filter function which determines whether messages should be accepted. |
bool
value indicating whether or not a payload was placed in _value . For more information, see Message Passing Functions.
A general try-receive implementation, allowing a context to look for data from exactly one source and filter the values that are accepted. If the data is not ready, the method will return false.
_Type | The payload type |
_Src | A pointer or reference to the source from which data is expected. |
_value | A reference to a location where the result will be placed. |
bool
value indicating whether or not a payload was placed in _value . For more information, see Message Passing Functions.
bool Concurrency::try_receive | ( | ISource< _Type > & | _Src, |
_Type & | _value, | ||
typename ITarget< _Type >::filter_method const & | _Filter_proc | ||
) |
A general try-receive implementation, allowing a context to look for data from exactly one source and filter the values that are accepted. If the data is not ready, the method will return false.
_Type | The payload type |
_Src | A pointer or reference to the source from which data is expected. |
_value | A reference to a location where the result will be placed. |
_Filter_proc | A filter function which determines whether messages should be accepted. |
bool
value indicating whether or not a payload was placed in _value . For more information, see Message Passing Functions.
Pauses the current context for a specified amount of time.
_Milliseconds | The number of milliseconds the current context should be paused for. If the _Milliseconds parameter is set to the value 0 , the current context should yield execution to other runnable contexts before continuing. |
If this method is called on a Concurrency Runtime scheduler context, the scheduler will find a different context to run on the underlying resource. Because the scheduler is cooperative in nature, this context cannot resume exactly after the number of milliseconds specified. If the scheduler is busy executing other tasks that do not cooperatively yield to the scheduler, the wait period could be indefinite.
Value indicating that a wait should never time out.