共用方式為


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 項目的數據型別。

_排行
物件的等級 array_view

成員

公開建構函式

名稱 描述
array_view建構函式 初始化 array_view 類別的新執行個體。 array<T,N> 沒有預設建構函式。 所有建構函式都僅限於在CPU上執行,而且無法在 Direct3D 目標上執行。
~array_view解構函式 銷毀array_view物件。

公用方法

名稱 描述
copy_to 呼叫 copy(*this, dest),將 array_view 物件的內容複製到指定的目的地。
data 傳回 array_view 的原始數據指標。
丟棄資料 捨棄此檢視下的目前數據。
get_extent 傳回array_view物件的範圍物件。
get_ref 傳回索引項目的參考。
get_source_accelerator_view 回 數據源所在的accelerator_viewarray_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[] 傳回參數所指定的元素。
operator= 將指定 array_view 之物件的內容複製到這個物件中。

公用常數

名稱 描述
rank 常數 儲存物件的排名 array_view

資料成員

名稱 描述
extent 取得定義 extent 物件形狀的 array_view 物件。
來源加速器視圖 取得 array_view 的資料來源所在的 accelerator_view
value_type array_view 的數值類型和已綁定的陣列。

備註

類別 array_view 代表的是可以檢視包含在 陣列 對象或某個對象子區段中的數據 array

您可以存取 array_view 所在的物件,無論該原始資料位於本機上,還是位於不同的加速器或一致性域的遠端位置。 當您從遠端存取物件時,會視需要複製和快取檢視。 除了自動快取的效果之外, array_view 物件具有與 array 對象類似的效能配置檔。 當您透過檢視存取資料時,效能會有些微影響。

有三種遠端使用案例:

  • 系統記憶體指標的一個視圖會被通過 parallel_for_each 呼叫傳遞至加速器,並在加速器上進行存取。

  • 位於加速器上的陣列視圖會透過 parallel_for_each 呼叫傳遞到另一個加速器,並在那裡進行存取。

  • 在 CPU 上存取位於加速器上的陣列。

在上述任一案例中,參考的檢視會由執行階段複製到遠端位置,如果對 array_view 物件的呼叫進行修改,則會複製回本機位置。 執行時可能會優化複製變更的程序,可能只複製已變更的元素,或也可能複製未變更的部分。 在一個數據來源上的array_view重疊對象不保證在遠端位置維持引用完整性。

您必須同步處理相同資料來源的任何多線程存取。

執行環境會對 array_view 物件中的數據快取提供以下保證:

  • 所有針對 array 物件及其上 array_view 物件的所有同步存取,依程序順序遵從順序先行關係。

  • 在單一array_view 物件上的相同加速器上的所有重疊array 物件的同步存取都會透過 array 物件進行別名處理。 它們會引發完全遵循程序順序的前置關聯性。 沒有快取。 array_view如果物件在不同的加速器上執行,則存取順序為未定義,並建立競爭條件。

當您在系統記憶體中使用指標建立array_view物件時,您只能透過array_view指標變更檢視array_view物件。 如果基礎原生記憶體是直接變更的,而不是透過 array_view 物件,那麼您必須對附加到系統指標的 array_view 物件之一呼叫 refresh()

任一動作會通知 array_view 對象基礎原生記憶體已變更,且位於加速器上的任何復本都已過期。 如果您遵循這些指導方針,指標為基礎的視圖會與提供給資料平行陣列的視圖相同。

繼承階層架構

_Array_view_shape

_Array_view_base

array_view

需求

標頭︰ amp.h

命名空間: 並行

~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的每個維度中的範圍。

_其他
要用型別 array_view<T,N> 的物件來初始化新的 array_view

_大小
提供數據的 C 樣式陣列大小。

_Src
複製到新陣列的資料來源指標。

複製到

藉由呼叫 copy(*this, dest),將 array_view 物件的內容複製到指定的目的地物件。

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) 內容中使用此方法時,這個方法為 no-op

void discard_data() const restrict(cpu);

延伸區

取得定義 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);

傳回值

array_view 物件的 extent 物件

get_ref

取得由_Index索引的元素引用。 不同於存取 CPU 上array_view的其他索引運算符,此方法不會隱含地將此array_view的內容同步處理至 CPU。 在存取遠端位置上的 array_view 或執行涉及此 array_view 的複製作業後,使用者有責任在呼叫此方法之前,明確地將 array_view 與 CPU 同步。 無法這樣做會導致未定義的行為。

value_type& get_ref(
    const index<_Rank>& _Index) const restrict(amp, cpu);

參數

_指數
索引。

傳回值

_Index所編製索引之項目的參考

取得來源加速器檢視 (get_source_accelerator_view)

傳回array_view數據源所在的accelerator_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);

參數

_指數
元素的位置。

_I0
第一個維度中的索引。

_I1
第二個維度中的索引。

_I2
第三個維度中的索引。

_I
元素的位置。

傳回值

參數或多個參數所指定的元素值。

operator[]

傳回參數所指定的元素。

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);

參數

_指數
索引。

_I
索引。

傳回值

索引處的元素值,或是最重要維度上的 array_view 投影。

運算子=

將指定 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);

參數

_其他
要從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這個 array_view為基礎的物件或 const 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
本節來源最不重要的元件。

_排行
區段的排名。

_Section_extent
指定段落範圍的範圍物件。

_Section_origin
指定原點位置的索引物件。

傳回值

位於指定原點之 物件的子區段,以及具有指定範圍之選擇性的 子區 array_view 段。 當僅指定 index 物件時,子區段會包含關聯範圍中所有元素,這些元素的索引大於 index 物件中元素的索引。

來源加速器檢視

取得與這個array_view相關聯的來源accelerator_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。 此參數預設值為 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。 此參數預設值為 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
目標加速器視圖上的所需存取類型。 此參數的預設值為 access_type_read。

同步至非同步

以非同步方式將對此 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。

_存取類型
目標accelerator_view上所需的access_type。 此參數的預設值為 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

value_type
原始陣列物件和返回的array_view物件中的項目數據類型。

傳回值

所建構的 array_view 物件。

另請參閱

Concurrency 命名空間 (C++ AMP)