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


Класс 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 объект.

См. также

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