Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Представляет представление 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)>;
Параметры
тип значения
Тип данных элементов объекта 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. |
| удалить_данные | Отменяет текущие данные, лежащие в основе этого представления. |
| get_extent | Возвращает объект размерности объекта array_view. |
| get_ref | Возвращает ссылку на индексированные элементы. |
| get_source_accelerator_view | Возвращает accelerator_view, где расположен источник данных array_view. |
| освежать | Уведомляет array_view объект о том, что его привязанная память была изменена за пределами array_view интерфейса. Вызов этого метода делает все кэшированные сведения устаревшими. |
| reinterpret_as | Возвращает одномерный массив, содержащий все элементы в объекте array_view . |
| раздел | Возвращает подраздел объекта 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 в данный объект. |
Открытые константы
| Имя | Описание |
|---|---|
| Константы ранжирования | Хранит ранг объекта array_view. |
Элементы данных
| Имя | Описание |
|---|---|
| объем | Получает объект extent, который определяет форму объекта array_view. |
| просмотр_ускорителя_источника | Возвращает accelerator_view, где расположен источник данных array_view. |
| тип значения | Тип значения 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. В качестве альтернативы, необходимо вызвать 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объекта .
отбросить_данные
Отменяет текущие данные, лежащие в основе этого представления. Это указание оптимизации для среды выполнения, используемой для предотвращения копирования текущего содержимого представления в целевой объект accelerator_view , к которому он обращается, и его использование рекомендуется, если существующее содержимое не требуется. Этот метод не выполняет никаких операций при использовании в контексте restrict(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 объект.
ранг
Хранит ранг объекта array_view.
static const int rank = _Rank;
обновить
Уведомляет array_view объект о том, что его привязанная память была изменена за пределами array_view интерфейса. Вызов этого метода делает все кэшированные сведения устаревшими.
void refresh() const restrict(cpu);
переопределить_как
Переинтерпретирует 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 .
представление_ускорителя_источника
Возвращает источник accelerator_view, с которым связан этот array_view.
__declspec(property(get= get_source_accelerator_view)) accelerator_view source_accelerator_view;
синхронизировать
Синхронизирует любые изменения, внесенные в объект array_view, обратно с его исходными данными.
void synchronize(access_type _Access_type = access_type_read) const restrict(cpu);
void synchronize() const restrict(cpu);
Параметры
_Тип_Доступа
Предполагаемый 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 целевого accelerator_view. Этот параметр имеет значение access_type_readпо умолчанию.
Возвращаемое значение
Будущее, после которого будет ожидать завершения операции.
синхронизировать с
Синхронизирует любые изменения, внесенные в этот 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» на целевом 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_read.
Возвращаемое значение
Будущее, после которого будет ожидать завершения операции.
value_type
Тип значения array_view и привязанного массива.
typedef typenamevalue_type value_type;
просмотр как
Переопределяет это 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.
тип значения
Тип данных элементов в исходном объекте массива и возвращаемом array_view объекте.
Возвращаемое значение
Созданный array_view объект.