Legion Runtime
|
#include <legion.h>
Public Member Functions | |
ProjectionFunctor (Runtime *rt) | |
virtual LogicalRegion | project (const Mappable *mappable, unsigned index, LogicalRegion upper_bound, const DomainPoint &point) |
virtual LogicalRegion | project (const Mappable *mappable, unsigned index, LogicalPartition upper_bound, const DomainPoint &point) |
virtual LogicalRegion | project (LogicalRegion upper_bound, const DomainPoint &point, const Domain &launch_domain) |
virtual LogicalRegion | project (LogicalPartition upper_bound, const DomainPoint &point, const Domain &launch_domain) |
virtual LogicalRegion | project (LogicalRegion upper_bound, const DomainPoint &point, const Domain &launch_domain, const void *args, size_t size) |
virtual LogicalRegion | project (LogicalPartition upper_bound, const DomainPoint &point, const Domain &launch_domain, const void *args, size_t size) |
virtual LogicalRegion | project (Context ctx, Task *task, unsigned index, LogicalRegion upper_bound, const DomainPoint &point) |
virtual LogicalRegion | project (Context ctx, Task *task, unsigned index, LogicalPartition upper_bound, const DomainPoint &point) |
virtual bool | is_exclusive (void) const |
virtual bool | is_functional (void) const |
virtual bool | is_invertible (void) const |
virtual unsigned | get_depth (void) const =0 |
virtual void | invert (LogicalRegion region, LogicalRegion upper_bound, const Domain &launch_domain, std::vector< DomainPoint > &ordered_points) |
virtual void | invert (LogicalRegion region, LogicalPartition upper_bound, const Domain &launch_domain, std::vector< DomainPoint > &ordered_points) |
virtual bool | is_complete (LogicalRegion upper_bound, const Domain &launch_domain) |
virtual bool | is_complete (LogicalPartition upper_bound, const Domain &launch_domain) |
virtual bool | is_complete (Mappable *mappable, unsigned index, LogicalRegion upper_bound, const Domain &launch_domain) |
virtual bool | is_complete (Mappable *mappable, unsigned index, LogicalPartition upper_bound, const Domain &launch_domain) |
Protected Attributes | |
Runtime * | runtime |
This defines an interface for objects that need to be able to handle projection requests for an application. Whenever index space tasks are launched with projection region requirements, instances of this object are used to handle the lowering down to individual regions for specific task instances in the index space of task. No more than one query of this interface will be made per object at a time.
Note also that the interface inherits from the RegionTreeInspector class which gives it access to all of the functions in that class for discovering the shape of index space trees, field spaces, and logical region trees.
|
pure virtual |
Specify the depth which this projection function goes for all the points in an index space launch from the upper bound node in the region tree. Depth is defined as the number of levels of the region tree crossed from the upper bound logical region or partition. So depth 0 for a REG_PROJECTION means the same region while depth 0 for a PART_PROJECTION means a subregion in the immediate partition. Depth 0 is the default for the identity projection function.
|
virtual |
Invert the projection function. Given a logical region for this operation return all of the points that alias with it. Dependences will be resolved in the order that they are returned to the runtime. The returned result must not be empty because it must contain at least the point for the given operation.
|
virtual |
Indicate to the runtime whether this projection function invoked on the given upper bound node in the region tree with the given index space domain will completely "cover" the all the upper bound points. Specifically will each point in the upper bound node exist in at least one logical region that is projected to be one of the points in the domain. It is always sound to return 'false' even if the projection will ultimately turn out to be complete. The only cost will be in additional runtime analysis overhead. It is unsound to return 'true' if the resulting projection is not complete. Undefined behavior in this scenario. In general users only need to worry about implementing these functions if they have a projection functor that has depth greater than zero.
mappable | the mappable oject for non-functional functors |
index | index of region requirement for non-functional functors |
upper_bound | the upper bound region/partition to consider |
launch_domain | the set of points for the projection |
|
inlinevirtual |
Indicate whether calls to this projection functor must be serialized or can be performed in parallel. Usually they must be exclusive if this functor contains state for memoizing results.
|
inlinevirtual |
Indicate whether this is an invertible projection functor which can be used to handle dependences between point tasks in the same index space launch.
|
virtual |
Same method as above, but with a partition as an upper bound
mappable | the operation requesting the projection |
index | the index of the region requirement being projected |
upper_bound | the upper bound logical partition |
point | the point being projected |
|
virtual |
This is the more general implementation of projection functions that work for all kinds of operations. Implementations can switch on the mappable type to figure out the kind of the operation that is requesting the projection. The default implementation of this method calls the deprecated version of this method for tasks and fails for all other kinds of operations. Note that this method is not passed a context, because it should only be invoking context free runtime methods.
mappable | the operation requesting the projection |
index | the index of the region requirement being projected |
upper_bound | the upper bound logical region |
point | the point being projected |
|
virtual |
ctx | the context for this projection |
task | the task for the requested projection |
index | which region requirement we are projecting |
upper_bound | the upper bound logical partition |
point | the point of the task in the index space |
|
virtual |
ctx | the context for this projection |
task | the task for the requested projection |
index | which region requirement we are projecting |
upper_bound | the upper bound logical region |
point | the point of the task in the index space |
|
virtual |
This method corresponds to the one above for projecting from a logical partition but is only invoked if the 'is_functional' method for this projection functor returns true. It must always return the same result when called with the same parameters
upper_bound | the upper bound logical partition |
point | the point being projected |
launch_domain | the launch domain of the index operation |
|
virtual |
This method will be invoked on functional projection functors for projecting from an upper bound logical partition when the the corresponding region requirement has projection arguments associated with it.
upper_bound | the upper bound logical region |
point | the point being projected |
launch_domain | the launch domain of the index operation |
args | pointer to the buffer of arguments |
size | size of the buffer of arguments in bytes |
|
virtual |
This method corresponds to the one above for projecting from a logical region but is only invoked if the 'is_functional' method for this projection functor returns true. It must always return the same result when called with the same parameters
upper_bound | the upper bound logical region |
point | the point being projected |
launch_domain | the launch domain of the index operation |
|
virtual |
This method will be invoked on functional projection functors for projecting from an upper bound logical region when the the corresponding region requirement has projection arguments associated with it.
upper_bound | the upper bound logical region |
point | the point being projected |
launch_domain | the launch domain of the index operation |
args | pointer to the buffer of arguments |
size | size of the buffer of arguments in bytes |