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


Класс array

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

Синтаксис

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

Параметры

тип значения
Тип элемента данных.

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

Участники

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

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

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

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

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

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

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

Имя Описание
Константы ранжирования Сохраняет ранг массива.

Публичные члены данных

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

Замечания

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

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

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

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

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

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

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

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

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

array

Требования

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

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

~массив

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

~array() restrict(cpu);

вид ускорителя

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

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

массив

Инициализирует новый экземпляр класса массива. Для 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 , указывающий расположение массива.

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

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

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

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

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

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

_Src
Возражать против копирования.

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

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

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

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

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

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 для копирования.

Тип_доступа_ЦП

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

__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;

получить_вид_ускорителя

Возвращает объект 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 get_cpu_access_type() const restrict(cpu);

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

get_extent

Возвращает объект протяженности элемента .

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);

Параметры

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

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

Объект типа 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);

Параметры

_Индекс
Расположение элемента.

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

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

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


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

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

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

оператор[]

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

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);

Параметры

_Индекс
Индекс.


Индекс.

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

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

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);

Параметры

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

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

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

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

ранг

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

static const int rank = _Rank;

переопределить_как

Повторно интерпретирует массив с помощью одномерной 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
Наименее значимый компонент происхождения этого раздела.

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

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

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

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

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

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

просмотр как

Повторно интерпретирует этот массив как 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 .

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

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

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

См. также

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