Поделиться через


Класс array

Представляет контейнер данных, используемый для перемещения данных в акселератор.

Синтаксис

template <typename value_type, int _Rank>
friend class array;

Параметры

value_type
Тип элемента данных.

_Rank
Ранг массива.

Участники

Открытые конструкторы

Имя Описание
Конструктор массива Инициализирует новый экземпляр класса array.
Деструктор ~array Уничтожает array объект.

Открытые методы

Имя Описание
copy_to Копирует содержимое массива в другой массив.
data Возвращает указатель на необработанные данные массива.
get_accelerator_view Возвращает объект accelerator_view, представляющий расположение, в котором выделен массив. К этому свойству можно получить доступ только на ЦП.
get_associated_accelerator_view Получает второй объект accelerator_view , передаваемый в качестве параметра при вызове промежуточного конструктора для создания экземпляра array объекта.
get_cpu_access_type Возвращает access_type массива. Доступ к этому методу можно получить только на ЦП.
get_extent Возвращает объект экстентов массива.
reinterpret_as Возвращает одномерный массив, содержащий все элементы в объекте array .
section Возвращает подраздел array объекта, который находится в указанном источнике и, при необходимости, имеет указанную степень.
view_as Возвращает объект array_view, созданный из array объекта.

Открытые операторы

Имя Описание
operator std::vector<value_type> Используется copy(*this, vector) для неявного преобразования массива в объект std::vector .
operator() Возвращает значение элемента, указанное параметрами.
оператор[] Возвращает элемент, который находится в указанном индексе.
operator= Копирует содержимое указанного объекта array в данный объект.

Открытые константы

Имя Описание
rank Constant Сохраняет ранг массива.

Открытые члены данных

Имя Описание
accelerator_view Возвращает объект accelerator_view, представляющий расположение, в котором выделен массив. К этому свойству можно получить доступ только на ЦП.
associated_accelerator_view Получает второй объект accelerator_view , передаваемый в качестве параметра при вызове промежуточного конструктора для создания экземпляра array объекта.
cpu_access_type Возвращает access_type, представляющую, как ЦП может получить доступ к хранилищу массива.
extent Возвращает степень, определяющую форму массива.

Замечания

Тип array<T,N> представляет собой плотный и обычный (не замеченный) N-мерный массив, расположенный в определенном расположении, например акселератор или ЦП. Тип данных элементов в массиве T— это тип, совместимый с целевым акселератором. Хотя ранг, N(массив определяется статически и является частью типа, степень массива определяется средой выполнения и выражается с помощью класса extent<N>.

Массив может иметь любое количество измерений, хотя некоторые функции специализированы для array объектов с рангом один, два и три. Если аргумент измерения не указан, значение по умолчанию равно 1.

Данные массива размещаются в памяти непрерывно. Элементы, которые отличаются по одному в наименьшем значительном измерении, находятся в памяти.

Массивы логически считаются типами значений, так как при копировании массива в другой массив выполняется глубокая копия. Два массива никогда не указывают на одни и те же данные.

Тип array<T,N> используется в нескольких сценариях:

  • В качестве контейнера данных, который можно использовать в вычислениях на акселераторе.

  • Как контейнер данных для хранения памяти на ЦП узла (который можно использовать для копирования в другие массивы и из других массивов).

  • В качестве промежуточного объекта, который выступает в качестве быстрого посредника в копиях узла на устройство.

Иерархия наследования

array

Требования

Заголовок : amp.h

Пространство имен : Concurrency

~массив

Уничтожает array объект.

~array() restrict(cpu);

accelerator_view

Возвращает объект accelerator_view, представляющий расположение, в котором выделен массив. К этому свойству можно получить доступ только на ЦП.

__declspec(property(get= get_accelerator_view)) Concurrency::accelerator_view accelerator_view;

array

Инициализирует новый экземпляр класса массива. Конструктор по умолчанию для array<T,N>. Все конструкторы выполняются только на ЦП. Их нельзя выполнить в целевом объекте Direct3D.

explicit array(
    const Concurrency::extent<_Rank>& _Extent) restrict(cpu);

explicit array(
    int _E0) restrict(cpu);

explicit array(
    int _E0,
    int _E1) restrict(cpu);

explicit array(
    int _E0,
    int _E1,
    int _E2) restrict(cpu);

array(
    const Concurrency::extent<_Rank>& _Extent,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    int _E0,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    int _E0,
    int _E1,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    int _E0,
    int _E1,
    int _E2,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    const Concurrency::extent<_Rank>& _Extent,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

array(
    int _E0,
    accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

array(
    int _E0,
    int _E1,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

array(
    int _E0,
    int _E1,
    int _E2,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0, _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1, _InputIterator _Src_first, _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1, _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2, _InputIterator _Src_first, _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2, _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

explicit array(
    const array_view<const value_type, _Rank>& _Src) restrict(cpu);

array(
    const array_view<const value_type, _Rank>& _Src,
    accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    const array_view<const value_type, _Rank>& _Src,
    accelerator_view _Av,
    accelerator_view _Associated_Av) restrict(cpu);

array(const array& _Other) restrict(cpu);

array(array&& _Other) restrict(cpu);

Параметры

_Associated_Av
Accelerator_view, указывающий предпочтительное целевое расположение массива.

_Av
Объект accelerator_view , указывающий расположение массива.

_Cpu_access_type
Требуемый access_type для массива на ЦП. Этот параметр имеет значение по умолчанию для access_type_auto выхода из определения ЦП access_type во время выполнения. Фактический ЦП access_type для массива можно запрашивать с помощью get_cpu_access_type метода.

_Степень
Экстент в каждом измерении массива.

_E0
Наиболее значимый компонент этого раздела.

_E1
Следующий к наиболее значимым компоненту этого раздела.

_E2
Наименее значимый компонент этого раздела.

_InputIterator
Тип итератора ввода.

_Src
Объект для копирования.

_Src_first
Начальный итератор в исходный контейнер.

_Src_last
Конечный итератор в исходный контейнер.

_Other
Другой источник данных.

_Rank
Ранг раздела.

value_type
Тип данных скопированных элементов.

associated_accelerator_view

Получает второй объект accelerator_view , передаваемый в качестве параметра при вызове промежуточного конструктора для создания экземпляра array объекта.

__declspec(property(get= get_associated_accelerator_view)) Concurrency::accelerator_view associated_accelerator_view;

copy_to

Копирует содержимое другого array array.

void copy_to(
    array<value_type, _Rank>& _Dest) const ;

void copy_to(
    array_view<value_type, _Rank>& _Dest) const ;

Параметры

_Dest
Объект array_view для копирования.

cpu_access_type

Возвращает access_type ЦП, разрешенный для этого массива.

__declspec(property(get= get_cpu_access_type)) access_type cpu_access_type;

.

Возвращает указатель на необработанные данные arrayобъекта.

value_type* data() restrict(amp, cpu);

const value_type* data() const restrict(amp, cpu);

Возвращаемое значение

Указатель на необработанные данные массива.

extent

Возвращает объект экстентов, определяющий arrayформу объекта .

__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;

get_accelerator_view

Возвращает объект accelerator_view, представляющий расположение, в котором array выделен объект. К этому свойству можно получить доступ только на ЦП.

Concurrency::accelerator_view get_accelerator_view() const;

Возвращаемое значение

Объект accelerator_view , представляющий расположение, в котором array выделяется объект.

get_associated_accelerator_view

Получает второй объект accelerator_view , передаваемый в качестве параметра при вызове промежуточного конструктора для создания экземпляра array объекта.

Concurrency::accelerator_view get_associated_accelerator_view() const ;

Возвращаемое значение

Второй accelerator_view объект, переданный промежуточному конструктору.

get_cpu_access_type

Возвращает access_type ЦП, разрешенных для этого массива.

access_type get_cpu_access_type() const restrict(cpu);

Возвращаемое значение

get_extent

Возвращает объект экстентов объекта array.

Concurrency::extent<_Rank> get_extent() const restrict(amp,cpu);

Возвращаемое значение

Метаданные extent для объекта array.

operator std::vector<value_type>

Используется copy(*this, vector) для неявного преобразования массива в объект std::vector.

operator std::vector<value_type>() const restrict(cpu);

Параметры

value_type
Тип данных элементов вектора.

Возвращаемое значение

Объект типа vector<T> , содержащий копию данных, содержащихся в массиве.

operator()

Возвращает значение элемента, указанное параметрами.

value_type& operator() (const index<_Rank>& _Index) restrict(amp,cpu);

const value_type& operator() (const index<_Rank>& _Index) cons  t restrict(amp,cpu);

value_type& operator() (int _I0, int _I1) restrict(amp,cpu);

const value_type& operator() (int _I0, int _I1) const restrict(amp,cpu)  ;

value_type& operator() (int _I0, int _I1, int _I2) restrict(amp,cpu);

const value_type& operator() (int _I0, int _I1, int _I2) const restrict(amp,cpu);

typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator()(int _I) restrict(amp,cpu);

typename details::_Projection_result_type<value_type,_Rank>::_Const_result_type operator()(int _I) const restrict(amp,cpu);

Параметры

_Index
Расположение элемента.

_I0
Наиболее значимый компонент происхождения этого раздела.

_I1
Следующий к наиболее значимым компоненту происхождения этого раздела.

_I2
Наименее значимый компонент происхождения этого раздела.

_I
Расположение элемента.

Возвращаемое значение

Значение элемента, указанное параметрами.

оператор[]

Возвращает элемент, который находится в указанном индексе.

value_type& operator[](const index<_Rank>& _Index) restrict(amp,cpu);

const value_type& operator[]
    (const index<_Rank>& _Index) const restrict(amp,cpu);

typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator[](int _i) restrict(amp,cpu);

typename details::_Projection_result_type<value_type,_Rank>::_Const_result_type operator[](int _i) const restrict(amp,cpu);

Параметры

_Index
Индекс.

_I
Индекс.

Возвращаемое значение

Элемент, который находится в указанном индексе.

operator=

Копирует содержимое указанного array объекта.

array& operator= (const array& _Other) restrict(cpu);

array& operator= (array&& _Other) restrict(cpu);

array& operator= (
    const array_view<const value_type, _Rank>& _Src) restrict(cpu);

Параметры

_Other
Объект array , из который нужно скопировать.

_Src
Объект array , из который нужно скопировать.

Возвращаемое значение

Ссылка на этот array объект.

rank

Сохраняет ранг объекта array.

static const int rank = _Rank;

reinterpret_as

Повторно интерпретирует массив с помощью одномерной array_view, которая, при необходимости, может иметь другой тип значения, чем исходный массив.

Синтаксис

template <typename _Value_type2>
array_view<_Value_type2,1> reinterpret_as() restrict(amp,cpu);

template <typename _Value_type2>
array_view<const _Value_type2, 1> reinterpret_as() const restrict(amp,cpu);

Параметры

_Value_type2
Тип данных возвращаемых данных.

Возвращаемое значение

Объект array_view или const array_view, основанный на массиве, с типом элемента переосмыслено из T в ElementType и рангом, уменьшенным от N до 1.

Замечания

Иногда удобно просматривать многомерный массив, как если бы он был линейным одномерным массивом, возможно, с другим типом значения, чем исходный массив. Этот метод можно использовать для достижения этого. Предупреждение Повторное толкование объекта массива с помощью другого типа значения является потенциально небезопасной операцией. Рекомендуется тщательно использовать эту функцию.

Пример кода:

struct RGB { float r; float g; float b; };

array<RGB,3>  a = ...;
array_view<float,1> v = a.reinterpret_as<float>();

assert(v.extent == 3*a.extent);

конфигурации

Возвращает подраздел array объекта, который находится в указанном источнике и, при необходимости, имеет указанную степень.

array_view<value_type,_Rank> section(
    const Concurrency::index<_Rank>& _Section_origin,
    const Concurrency::extent<_Rank>& _Section_extent) restrict(amp,cpu);

array_view<const value_type,_Rank> section(
    const Concurrency::index<_Rank>& _Section_origin,
    const Concurrency::extent<_Rank>& _Section_extent) const restrict(amp,cpu);

array_view<value_type,_Rank> section(
    const Concurrency::extent<_Rank>& _Ext) restrict(amp,cpu);

array_view<const value_type,_Rank> section(
    const Concurrency::extent<_Rank>& _Ext) const restrict(amp,cpu);

array_view<value_type,_Rank> section(
    const index<_Rank>& _Idx) restrict(amp,cpu);

array_view<const value_type,_Rank> section(
    const index<_Rank>& _Idx) const restrict(amp,cpu);

array_view<value_type,1> section(
    int _I0,
    int _E0) restrict(amp,cpu);

array_view<const value_type,1> section(
    int _I0,
    int _E0) const restrict(amp,cpu);

array_view<value_type,2> section(
    int _I0,
    int _I1,
    int _E0,
    int _E1) restrict(amp,cpu);

array_view<const value_type,2> section(
    int _I0,
    int _I1,
    int _E0,
    int _E1) const restrict(amp,cpu);

array_view<value_type,3> section(
    int _I0,
    int _I1,
    int _I2,
    int _E0,
    int _E1,
    int _E2) restrict(amp,cpu);

array_view<const value_type,3> section(
    int _I0,
    int _I1,
    int _I2,
    int _E0,
    int _E1,
    int _E2) const restrict(amp,cpu);

Параметры

_E0
Наиболее значимый компонент этого раздела.

_E1
Следующий к наиболее значимым компоненту этого раздела.

_E2
Наименее значимый компонент этого раздела.

_Ext
Объект экстентов , указывающий степень раздела. Источник равен 0.

_Idx
Объект индекса , указывающий расположение источника. Подраздел — это остальная часть экстента.

_I0
Наиболее значимый компонент происхождения этого раздела.

_I1
Следующий к наиболее значимым компоненту происхождения этого раздела.

_I2
Наименее значимый компонент происхождения этого раздела.

_Rank
Ранг раздела.

_Section_extent
Объект экстентов , указывающий степень раздела.

_Section_origin
Объект индекса , указывающий расположение источника.

value_type
Тип данных скопированных элементов.

Возвращаемое значение

Возвращает подраздел array объекта, который находится в указанном источнике и, при необходимости, имеет указанную степень. Если указан только index объект, подраздел содержит все элементы связанной сетки, имеющие индексы, превышающие индексы элементов в объекте index .

view_as

Повторно интерпретирует этот массив как array_view другого ранга.

template <int _New_rank>
array_view<value_type,_New_rank> view_as(
    const Concurrency::extent<_New_rank>& _View_extent) restrict(amp,cpu);

template <int _New_rank>
array_view<const value_type,_New_rank> view_as(
    const Concurrency::extent<_New_rank>& _View_extent) const restrict(amp,cpu);

Параметры

_New_rank
Ранг объекта, переданный extent в качестве параметра.

_View_extent
Экстент, используемый для создания нового объекта array_view .

value_type
Тип данных элементов в исходном array объекте и возвращаемом array_view объекте.

Возвращаемое значение

Созданный объект array_view .

См. также

Пространство имен Concurrency (C++ AMP)