Класс array_view
Представляет представление N-мерных данных, содержащихся в другом контейнере.
Синтаксис
template <
typename value_type,
int _Rank = 1
>
class array_view : public _Array_view_base<_Rank, sizeof(value_type)/sizeof(int)>;
template <
typename value_type,
int _Rank
>
class array_view<const value_type, _Rank> : public _Array_view_base<_Rank, sizeof(value_type)/sizeof(int)>;
Параметры
value_type
Тип данных элементов объекта array_view
.
_Rank
Ранг array_view
объекта.
Участники
Открытые конструкторы
Имя | Описание |
---|---|
Конструктор array_view | Инициализирует новый экземпляр класса array_view . Конструктор по умолчанию для array<T,N> . Все конструкторы ограничены только для запуска на ЦП и не могут выполняться в целевом объекте Direct3D. |
Деструктор ~array_view | Уничтожает array_view объект. |
Открытые методы
Имя | Описание |
---|---|
copy_to | Копирует содержимое array_view объекта в указанное место назначения путем вызова copy(*this, dest) . |
data | Возвращает указатель на необработанные данные array_view объекта. |
discard_data | Отменяет текущие данные, лежащие в основе этого представления. |
get_extent | Возвращает объект экстентов объекта array_view. |
get_ref | Возвращает ссылку на индексированные элементы. |
get_source_accelerator_view | Возвращает accelerator_view, где находится источник array_view данных. |
освежать | Уведомляет array_view объект о том, что его привязанная память была изменена за пределами array_view интерфейса. Вызов этого метода отрисовывает все кэшированные сведения устаревшими. |
reinterpret_as | Возвращает одномерный массив, содержащий все элементы в объекте array_view . |
section | Возвращает подраздел array_view объекта, который находится в указанном источнике и, при необходимости, имеет указанную степень. |
synchronize | Синхронизирует любые изменения, внесенные array_view в объект обратно в исходные данные. |
synchronize_async | Асинхронно синхронизирует любые изменения, array_view внесенные в объект обратно в исходные данные. |
synchronize_to | Синхронизирует любые изменения, внесенные в array_view объект, с указанным accelerator_view. |
synchronize_to_async | Асинхронно синхронизирует любые изменения, внесенные в array_view объект, с указанным accelerator_view. |
view_as | array_view Создает объект другого ранга с помощью данных этого array_view объекта. |
Открытые операторы
Имя | Описание |
---|---|
operator() | Возвращает значение элемента, указанного параметром или параметрами. |
оператор[] | Возвращает элемент, заданный параметрами. |
operator= | Копирует содержимое указанного объекта array_view в данный объект. |
Открытые константы
Имя | Описание |
---|---|
rank Constant | Хранит ранг объекта array_view . |
Элементы данных
Имя | Описание |
---|---|
extent | Получает объект extent , который определяет форму объекта array_view . |
source_accelerator_view | Возвращает accelerator_view, где находится источник array_view данных |
value_type | Тип значения массива array_view и привязанного массива. |
Замечания
Класс array_view
представляет представление данных, содержащихся в объекте массива или подразделе array
объекта.
Вы можете получить доступ к объекту array_view
, где находятся исходные данные (локально) или на другом акселераторе или домене согласованности (удаленно). При удаленном доступе к объекту представления копируются и кэшируются при необходимости. За исключением эффектов автоматического кэширования, array_view
объекты имеют профиль производительности, аналогичный тому, который array
имеет объекты. При доступе к данным через представления возникает небольшая производительность.
Существует три сценария удаленного использования:
Представление в указатель памяти системы передается с помощью вызова parallel_for_each акселератора и доступа к акселератору.
Представление массива, расположенного на акселераторе, передается с помощью
parallel_for_each
вызова к другому акселератору и обращается к ней.Представление массива, расположенного на акселераторе, осуществляется на ЦП.
В любом из этих сценариев ссылки представления копируются средой выполнения в удаленное расположение, а при изменении вызовов array_view
объекта копируются обратно в локальное расположение. Среда выполнения может оптимизировать процесс копирования изменений обратно, копировать только измененные элементы или также копировать неизменяемые части. Перекрывающиеся array_view
объекты в одном источнике данных не гарантируют сохранение целостности ссылок в удаленном расположении.
Необходимо синхронизировать любой многопоточный доступ к одному источнику данных.
Среда выполнения обеспечивает следующие гарантии кэширования данных в array_view
объектах:
Все хорошо синхронизированные доступы к
array
объекту иarray_view
объекту в порядке программы подчиняются последовательности перед связью.Все хорошо синхронизированные доступы к перекрывающимся
array_view
объектам в одном акселераторе на одномarray
объекте псевдонимируются черезarray
объект. Они вызывают общую ситуацию перед связью, которая подчиняется порядку программы. Кэширование отсутствует.array_view
Если объекты выполняются на разных акселераторах, порядок доступа не определен, создав условие гонки.
При создании array_view
объекта с помощью указателя в системной памяти необходимо изменить объект представления array_view
только через array_view
указатель. Кроме того, необходимо вызвать refresh()
один из array_view
объектов, подключенных к системному указателю, если базовая собственная память изменяется напрямую, а не через array_view
объект.
Любое действие уведомляет array_view
объект о том, что базовая собственная память изменена и что все копии, расположенные на акселераторе, устарели. При выполнении этих рекомендаций представления на основе указателя идентичны представлениям массивов параллелизма данных.
Иерархия наследования
_Array_view_shape
_Array_view_base
array_view
Требования
Заголовок : amp.h
Пространство имен : Concurrency
~array_view
Уничтожает array_view
объект.
~array_view()restrict(amp,cpu);
array_view
Инициализирует новый экземпляр класса array_view
.
array_view(
array<value_type, _Rank>& _Src)restrict(amp,cpu);
array_view(
const array_view& _Other)restrict(amp,cpu);
explicit array_view(
const Concurrency::extent<_Rank>& _Extent) restrict(cpu);
template <
typename _Container
>
array_view(
const Concurrency::extent<_Rank>& _Extent,
_Container& _Src) restrict(cpu);
array_view(
const Concurrency::extent<_Rank>& _Extent,
value_type* _Src)restrict(amp,cpu);
explicit array_view(
int _E0) restrict(cpu);
template <
typename _Container
>
explicit array_view(
_Container& _Src,
typename std::enable_if<details::_Is_container<_Container>::type::value, void **>::type = 0) restrict(cpu);
template <
typename _Container
>
explicit array_view(
int _E0,
_Container& _Src) restrict(cpu);
explicit array_view(
int _E0,
int _E1) __CPU_ONLY;
template <
typename _Container
>
explicit array_view(
int _E0,
int _E1,
_Container& _Src) restrict(cpu);
explicit array_view(
int _E0,
int _E1,
int _E2) __CPU_ONLY;
template <
typename _Container
>
explicit array_view(
int _E0,
int _E1,
int _E2,
_Container& _Src);
explicit array_view(
int _E0,
_In_ value_type* _Src)restrict(amp,cpu);
template <
typename _Arr_type,
int _Size
>
explicit array_view(
_In_ _Arr_type (& _Src) [_Size]) restrict(amp,cpu);
explicit array_view(
int _E0,
int _E1,
_In_ value_type* _Src)restrict(amp,cpu);
explicit array_view(
int _E0,
int _E1,
int _E2,
_In_ value_type* _Src)restrict(amp,cpu);
array_view(
const array<value_type, _Rank>& _Src)restrict(amp,cpu);
array_view(
const array_view<value_type, _Rank>& _Src)restrict(amp,cpu);
array_view(
const array_view<const value_type, _Rank>& _Src)restrict(amp,cpu);
template <
typename _Container
>
array_view(
const Concurrency::extent<_Rank>& _Extent,
const _Container& _Src) restrict(cpu);
template <
typename _Container
>
explicit array_view(
const _Container& _Src,
typename std::enable_if<details::_Is_container<_Container>::type::value, void **>::type = 0) restrict(cpu);
array_view(
const Concurrency::extent<_Rank>& _Extent,
const value_type* _Src)restrict(amp,cpu);
template <
typename _Arr_type,
int _Size
>
explicit array_view(
const _In_ _Arr_type (& _Src) [_Size]) restrict(amp,cpu);
template <
typename _Container
>
array_view(
int _E0,
const _Container& _Src);
template <
typename _Container
>
array_view(
int _E0,
int _E1,
const _Container& _Src);
template <
typename _Container
>
array_view(
int _E0,
int _E1,
int _E2,
const _Container& _Src);
array_view(
int _E0,
const value_type* _Src)restrict(amp,cpu);
array_view(
int _E0,
int _E1,
const value_type* _Src) restrict(amp,cpu);
array_view(
int _E0,
int _E1,
int _E2,
const value_type* _Src) restrict(amp,cpu);
Параметры
_Arr_type
Тип элемента массива стилей C, из которого предоставляются данные.
_Контейнер
Аргумент шаблона, который должен указывать линейный контейнер, поддерживающий data()
и size()
члены.
_E0
Наиболее значимый компонент этого раздела.
_E1
Следующий к наиболее значимым компоненту этого раздела.
_E2
Наименее значимый компонент этого раздела.
_Степень
Экстент в каждом измерении этого array_view
.
_Other
Объект типа array_view<T,N>
, из которого инициализировать новый array_view
.
_Размер
Размер массива стилей C, из которого предоставляются данные.
_Src
Указатель на исходные данные, которые будут скопированы в новый массив.
copy_to
Копирует содержимое array_view
объекта в указанный целевой объект путем вызова copy(*this, dest)
.
void copy_to(
array<value_type, _Rank>& _Dest) const;
void copy_to(
array_view<value_type, _Rank>& _Dest) const;
Параметры
_Dest
Объект для копирования.
.
Возвращает указатель на необработанные данные array_view
объекта.
value_type* data() const restrict(amp,
cpu);
const value_type* data() const restrict(amp,
cpu);
Возвращаемое значение
Указатель на необработанные данные array_view
объекта .
discard_data
Отменяет текущие данные, лежащие в основе этого представления. Это указание оптимизации для среды выполнения, используемой для предотвращения копирования текущего содержимого представления в целевой объект accelerator_view
, к которому он обращается, и его использование рекомендуется, если существующее содержимое не требуется. Этот метод является no-op при использовании в контексте ограничения (amp)
void discard_data() const restrict(cpu);
extent
Получает объект extent
, который определяет форму объекта array_view
.
__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;
get_extent
Возвращает объект экстентов array_view
объекта.
Concurrency::extent<_Rank> get_extent() const restrict(cpu, amp);
Возвращаемое значение
extent
Объект объекта array_view
get_ref
Получите ссылку на элемент, индексированные _Index. В отличие от других операторов индексирования для доступа к array_view на ЦП, этот метод неявно синхронизирует содержимое этого array_view с ЦП. После доступа к array_view в удаленном расположении или выполнении операции копирования, включающей этот array_view, пользователи несут ответственность за явное синхронизацию array_view с ЦП перед вызовом этого метода. Сбой этого приводит к неопределенному поведению.
value_type& get_ref(
const index<_Rank>& _Index) const restrict(amp, cpu);
Параметры
_Index
Индекс.
Возвращаемое значение
Ссылка на элемент, индексированные _Index
get_source_accelerator_view
Возвращает accelerator_view, где находится источник данных array_view. Если array_view не имеет источника данных, этот API создает runtime_exception
accelerator_view get_source_accelerator_view() const;
Возвращаемое значение
operator()
Возвращает значение элемента, указанного параметром или параметрами.
value_type& operator() (
const index<_Rank>& _Index) const restrict(amp,cpu);
typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator() (
int _I) const restrict(amp,cpu);
value_type& operator() (
int _I0,
int _I1) const restrict(amp,cpu);
value_type& operator() (
int _I0,
int _I1,
int _I2) const 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
Расположение элемента.
Возвращаемое значение
Значение элемента, указанного параметром или параметрами.
оператор[]
Возвращает элемент, заданный параметрами.
typename details::_Projection_result_type<value_type,_Rank>::_Const_result_type operator[] (
int _I) const restrict(amp,cpu);
value_type& operator[] (
const index<_Rank>& _Index) const restrict(amp,cpu);
Параметры
_Index
Индекс.
_I
Индекс.
Возвращаемое значение
Значение элемента в индексе или array_view
проецируемый по наиболее важному измерению.
operator=
Копирует содержимое указанного array_view
объекта в этот объект.
array_view& operator= (
const array_view& _Other) restrict(amp,cpu);
array_view& operator= (
const array_view<value_type, _Rank>& _Other) restrict(amp,cpu);
Параметры
_Other
Объект array_view
, из который нужно скопировать.
Возвращаемое значение
Ссылка на этот array_view
объект.
rank
Хранит ранг объекта array_view
.
static const int rank = _Rank;
refresh
Уведомляет array_view
объект о том, что его привязанная память была изменена за пределами array_view
интерфейса. Вызов этого метода отрисовывает все кэшированные сведения устаревшими.
void refresh() const restrict(cpu);
reinterpret_as
Переинтерпретирует array_view через одномерную array_view, которая в качестве параметра может иметь другой тип значения, чем исходный array_view.
Синтаксис
template <
typename _Value_type2
>
array_view< _Value_type2, _Rank> reinterpret_as() const restrict(amp,cpu);
template <
typename _Value_type2
>
array_view<const _Value_type2, _Rank> reinterpret_as() const restrict(amp,cpu);
Параметры
_Value_type2
Тип данных нового array_view
объекта.
Возвращаемое значение
Объект array_view
или объект const array_view
, основанный на этом array_view
, с типом элемента, преобразованным из T
_Value_type2
, и ранг уменьшается от N до 1.
Замечания
Иногда удобно просматривать многомерный массив как линейный одномерный массив, который может иметь другой тип значения, чем исходный массив. Это можно сделать с array_view
помощью этого метода.
Предупреждение Повторное толкование объекта array_view с помощью другого типа значения является потенциально небезопасной операцией. Эту функцию следует использовать с осторожностью.
Приведем пример:
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_view
объекта, который находится в указанном источнике и, при необходимости, имеет указанную степень.
array_view section(
const Concurrency::index<_Rank>& _Section_origin,
const Concurrency::extent<_Rank>& _Section_extent) const restrict(amp,cpu);
array_view section(
const Concurrency::index<_Rank>& _Idx) const restrict(amp,cpu);
array_view section(
const Concurrency::extent<_Rank>& _Ext) const restrict(amp,cpu);
array_view section(
int _I0,
int _E0) const restrict(amp,cpu);
array_view section(
int _I0,
int _I1,
int _E0,
int _E1) const restrict(amp,cpu);
array_view 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
Объект индекса , указывающий расположение источника.
Возвращаемое значение
Подраздел array_view
объекта, который находится в указанном источнике и, при необходимости, имеет указанный экстент. Если указан только index
объект, подраздел содержит все элементы в связанной степени, имеющие индексы, превышающие индексы элементов в объекте index
.
source_accelerator_view
Возвращает исходный accelerator_view, с которым связан этот array_view.
__declspec(property(get= get_source_accelerator_view)) accelerator_view source_accelerator_view;
synchronize
Синхронизирует любые изменения, внесенные array_view
в объект обратно в исходные данные.
void synchronize(access_type _Access_type = access_type_read) const restrict(cpu);
void synchronize() const restrict(cpu);
Параметры
_Access_type
Предполагаемый access_type целевого accelerator_view. Этот параметр имеет значение access_type_read
по умолчанию.
synchronize_async
Асинхронно синхронизирует любые изменения, array_view
внесенные в объект обратно в исходные данные.
concurrency::completion_future synchronize_async(access_type _Access_type = access_type_read) const restrict(cpu);
concurrency::completion_future synchronize_async() const restrict(cpu);
Параметры
_Access_type
Предполагаемый access_type целевого accelerator_view. Этот параметр имеет значение access_type_read
по умолчанию.
Возвращаемое значение
Будущее, после которого будет ожидать завершения операции.
synchronize_to
Синхронизирует любые изменения, внесенные в этот array_view, с указанным accelerator_view.
void synchronize_to(
const accelerator_view& _Accl_view,
access_type _Access_type = access_type_read) const restrict(cpu);
void synchronize_to(
const accelerator_view& _Accl_view) const restrict(cpu);
Параметры
_Accl_view
Целевой accelerator_view для синхронизации.
_Access_type
Требуемый access_type целевого accelerator_view. Этот параметр имеет значение по умолчанию access_type_read.
synchronize_to_async
Асинхронно синхронизирует любые изменения, внесенные в этот array_view, с указанным accelerator_view.
concurrency::completion_future synchronize_to_async(
const accelerator_view& _Accl_view,
access_type _Access_type = access_type_read) const restrict(cpu);
concurrency::completion_future synchronize_to_async(
const accelerator_view& _Accl_view) const restrict(cpu);
Параметры
_Accl_view
Целевой accelerator_view для синхронизации.
_Access_type
Требуемый access_type целевого accelerator_view. Этот параметр имеет значение по умолчанию access_type_read.
Возвращаемое значение
Будущее, после которого будет ожидать завершения операции.
value_type
Тип значения array_view и привязанного массива.
typedef typenamevalue_type value_type;
view_as
Переинтерпретирует это array_view
как array_view
другой ранг.
template <
int _New_rank
>
array_view<value_type,_New_rank> view_as(
const Concurrency::extent<_New_rank>& _View_extent) const 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
Ранг нового array_view
объекта.
_View_extent
Изменение формы extent
.
value_type
Тип данных элементов в исходном объекте массива и возвращаемом array_view
объекте.
Возвращаемое значение
Созданный array_view
объект.