lue_framework_partitioned_array#

template<typename Element, Rank rank>
class PartitionedArray#

Class template for representing partitioned arrays.

The array is partitioned. Partitions can be located in multiple localities (processes).

PartitionedArray is a move-only type.

Template Parameters:
  • Element – Type for representing element values

  • rank – Array rank

Public Types

using Partition = PartitionClient#

Type of client-side representation of an array partition.

using Partitions = ArrayPartitionData<Partition, rank>#

Type of the collection of partitions.

Public Functions

inline PartitionedArray()#

Default-construct an instance with an empty shape.

The array will have zero elements.

inline PartitionedArray(Shape const &shape, Localities<rank> &&localities, Partitions &&partitions)#

Construct an instance.

The shape of the partitions together must equal the shape passed in

Parameters:
  • shape – Shape of the array

  • localities – Localities where the partitions are located

  • partitions – Collection of array partitions

inline auto nr_elements() const -> Count#

Return the number of elements.

inline auto shape() const -> Shape const&#

Return the shape.

inline auto localities() const -> Localities<rank> const&#

Return the localities.

inline auto nr_partitions() const -> Count#

Return the number of partitions.

inline auto partitions() -> Partitions&#

Return the partitions.

inline auto partitions() const -> Partitions const&#

Return the partitions.

template<typename Element, Rank rank>
class ArrayPartition : public hpx::components::client_base<ArrayPartition<Element, rank>, server::ArrayPartition<Element, rank>>#

Class for array partition component client instances.

Each instance is associated with a single array partition component server instance. Multiple instances can be associated with a single server instance.

A partition has an offset, which represents the location of the partition within the array. An offset contains an index along each dimension of the array. For example, the first partition in a 2D array is located at offset [0, 0].

Template Parameters:
  • Element – Type for representing element values

  • rank – Array rank

Public Functions

ArrayPartition()#

Default-construct an instance.

explicit ArrayPartition(hpx::id_type const &component_id)#

Construct a client instance based on an existing and possibly remote component server instance with ID component_id.

When calling hpx::new_<Client>(…), this constructor is called by the underlying code once the component server has been constructed.

This instance will take ownership of the ID.

Parameters:

component_id – ID of component server instance

explicit ArrayPartition(hpx::future<hpx::id_type> &&component_id)#

Construct a component client instance based on an existing and possibly remote component server instance with ID component_id.

When calling hpx::new_<Client>(…), this constructor is called by the underlying code once the component server has been constructed.

A non-shared future is a unique future. No two unique futures can refer to the same data. Here, an r-value reference to a unique future is passed in. This instance will take over ownership of the ID.

Parameters:

component_id – ID of component server instance

ArrayPartition(hpx::future<ArrayPartition> &&partition)#

Construct an instance based on a future to an instance.

A partition already holds a future to the ID of the referenced object. This means that the object passed in is a future to a future to the ID. Unwrapping accesses this inner future. This constructor acts like an ‘unwrapping move constructor’.

A non-shared future is a unique future. No two unique futures can refer to the same data. Here, an r-value reference to a unique future is passed in. This instance will take over ownership of the partition.

Parameters:

partition – A future to an instance

ArrayPartition(hpx::id_type locality_id, Offset const &offset, Shape const &shape)#

Construct a server instance on locality locality_id.

Parameters:
  • locality_id – ID of locality to create instance on

  • offset – Offset of partition within the array

  • shape – Shape of partition to create

ArrayPartition(hpx::id_type locality_id, Offset const &offset, Shape const &shape, Element value)#

Construct a server instance on locality locality_id.

Parameters:
  • locality_id – ID of locality to create instance on

  • offset – Offset of partition within the array

  • shape – Shape of partition to create

  • value – Initial value used to fill the partition

ArrayPartition(hpx::id_type locality_id, Offset const &offset, Data &&data)#

Construct a server instance on locality locality_id.

The @data passed in is moved from.

Parameters:
  • locality_id – ID of locality to create instance on

  • offset – Offset of partition within the array

  • data – Initial data

auto data() const -> hpx::future<Data>#

Return a future to the underlying data.

Return this partition’s data.

auto slice(Slices const &slices) const -> hpx::future<Data>#

Return a future to a subset of the underlying data.

auto fill(Element value) -> hpx::future<void>#

Asynchronously fill the partition with value.

Returns:

A future that will become ready once the partition is filled

auto set_data(Data const &data) -> hpx::future<void>#

Asynchronously assign data to the partition.

Returns:

A future that will become ready once the data is assigned

auto offset() const -> hpx::future<Offset>#

Return a future to the offset.

auto shape() const -> hpx::future<Shape>#

Return a future to the shape.

auto nr_elements() const -> hpx::future<Count>#

Return a future to the number of elements.