Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Представляет представление 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 объект.