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


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

Члены

Открытые конструкторы

Name

Описание

Конструктор array_view::array_view

Инициализирует новый экземпляр класса array_view. Для array<T,N> конструктор по умолчанию отсутствует. Любые конструкторы могут выполняться только на ЦП и не могут быть выполнены на целевом объекте Direct3D.

Деструктор array_view::~array_view

Уничтожает объект array_view.

Открытые методы

Name

Описание

Метод array_view::copy_to

Копирует содержимое объекта array_view в заданное место назначения путем вызова copy(*this, dest).

Метод array_view::data

Возвращает указатель на необработанные данные array_view.

Метод array_view::discard_data

Сбрасывает текущие данные для этого представления.

Метод array_view::get_extent

Возвращает объект границы объекта array_view.

Метод array_view::get_ref

Возвращает ссылку на индексированный элемент.

Метод array_view::get_source_accelerator_view

Возвращает accelerator_view, где находится источник данных array_view.

Метод array_view::refresh

Уведомляет объект array_view о том, что связанная с ним область памяти была изменена за пределами интерфейса array_view. Вызов этого метода отображает все кэшированные данные как устаревшие.

Метод array_view::reinterpret_as

Возвращает одномерный массив, содержащий все элементы в объекте array_view.

Метод array_view::section

Возвращает подраздел объекта array_view, находящийся по заданному начальному положению и, при необходимости, имеющий определенный размер.

Метод array_view::synchronize

Синхронизирует все изменения, внесенные в объект array_view, с его исходными данными.

Метод array_view::synchronize_async

Асинхронно синхронизирует все изменения, внесенные в объект array_view, с его исходными данными.

Метод array_view::synchronize_to

Синхронизирует все изменения, внесенные в объект array_view с определенным accelerator_view.

Метод array_view::synchronize_to_async

Асинхронно синхронизирует все изменения, внесенные в объект array_view с определенным accelerator_view.

Метод array_view::view_as

Создает объект array_view другого ранга, используя данные объекта array_view.

Открытые операторы

Name

Описание

Оператор array_view::operator()

Возвращает значение элемента, задаваемого параметром или параметрами.

Оператор array_view::operator[]

Возвращает элемент, задаваемый параметрами.

Оператор array_view::operator=

Копирует содержимое указанного объекта array_view в данный объект.

Открытые константы

Name

Описание

Константа array_view::rank

Хранит ранг объекта array_view.

Элементы данных

Name

Описание

Элемент данных array_view::extent

Получает объект extent, который определяет форму объекта array_view.

Элемент данных array_view::source_accelerator_view

Получает accelerator_view, где находится источник данных array_view.

Элемент данных array_view::value_type

Тип значения array_view и ограниченного массива.

Примечания

Класс array_view является представлением данных, хранящемся в объекте array или в подразделе объекта 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

См. также

Ссылки

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