Класс 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 .