-
Notifications
You must be signed in to change notification settings - Fork 49
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #247 from antoinemeyer5/120-API-core-policies-Team…
…VectorRange #120: API-core-policies-TeamVectorRange from md to rst
- Loading branch information
Showing
2 changed files
with
98 additions
and
86 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
``TeamVectorRange`` | ||
=================== | ||
|
||
.. role::cppkokkos(code) | ||
:language: cppkokkos | ||
Header File: ``<Kokkos_Core.hpp>`` | ||
|
||
Usage | ||
----- | ||
|
||
.. code-block:: cpp | ||
parallel_for(TeamVectorRange(team,range), [=] (int i) {...}); | ||
parallel_reduce(TeamVectorRange(team,begin,end), | ||
[=] (int i, double& lsum) {...},sum); | ||
TeamVectorRange is a `nested execution policy <NestedPolicies.html>`_ used inside hierarchical parallelism. | ||
In contrast to global policies, the public interface for nested policies is implemented | ||
as functions, in order to enable implicit templating on the execution space type via | ||
the team handle. | ||
|
||
Synopsis | ||
-------- | ||
|
||
.. code-block:: cpp | ||
template<class TeamMemberType, class iType> | ||
/* implementation defined */ TeamVectorRange(TeamMemberType team, iType count); | ||
template<class TeamMemberType, class iType1, class iType2> | ||
/* implementation defined */ TeamVectorRange(TeamMemberType team, iType1 begin, iType2 end); | ||
Description | ||
----------- | ||
|
||
.. code-block:: cpp | ||
template<class TeamMemberType, class iType> | ||
/* implementation defined */ TeamVectorRange(TeamMemberType team, iType count); | ||
Splits the index range ``0`` to ``count-1`` over the threads of the team and their vector lanes. | ||
|
||
* **Arguments** | ||
- ``team``: a handle to the calling team execution context. | ||
- ``count``: index range length. | ||
|
||
* **Returns** | ||
- Implementation defined type. | ||
|
||
* **Requirements** | ||
- ``TeamMemberType`` is a type that models `TeamHandle <TeamHandleConcept.html>`_ | ||
- ``std::is_integral<iType>::value`` is true. | ||
- Every member thread of ``team`` must call the operation in the same branch, i.e. it is not legal to have some | ||
threads call this function in one branch, and the other threads of ``team`` call it in another branch. | ||
- ``count >= 0`` is true; | ||
|
||
.. code-block:: cpp | ||
template<class TeamMemberType, class iType1, class iType2> | ||
/* implementation defined */ TeamVectorRange(TeamMemberType team, iType1 begin, iType2 end); | ||
Splits the index range ``begin`` to ``end-1`` over the threads of the team and their vector lanes. | ||
|
||
* **Arguments** | ||
- ``team``: a handle to the calling team execution context. | ||
- ``begin``: index range begin. | ||
- ``end``: index range end. | ||
|
||
* **Returns** | ||
- Implementation defined type. | ||
|
||
* **Requirements** | ||
- ``TeamMemberType`` is a type that models `TeamHandle <TeamHandleConcept.html>`_ | ||
- ``std::is_integral<iType1>::value`` is true. | ||
- ``std::is_integral<iType2>::value`` is true. | ||
- Every member thread of ``team`` must call the operation in the same branch, i.e. it is not legal to have some threads call this function in one branch, and the other threads of ``team`` call it in another branch.. | ||
- ``end >= begin`` is true; | ||
|
||
Examples | ||
-------- | ||
|
||
.. code-block:: cpp | ||
typedef TeamPolicy<>::member_type team_handle; | ||
parallel_for(TeamPolicy<>(N,AUTO,4), KOKKOS_LAMBDA (const team_handle& team) { | ||
int n = team.league_rank(); | ||
parallel_for(TeamVectorRange(team,M), [&] (const int& i) { | ||
A(n,i) = B(n) + i; | ||
}); | ||
team.team_barrier(); | ||
int team_sum; | ||
parallel_reduce(TeamVectorRange(team,M), [&] (const int& i, int& lsum) { | ||
lsum += A(n,i); | ||
},team_sum); | ||
single(PerTeam(team),[&] () { | ||
A_rowsum(n) += team_sum; | ||
}); | ||
}); |