Aracılığıyla paylaş


array_view Sınıfı

Başka bir kapsayıcıda tutulan veriler üzerinde N boyutlu bir görünümü temsil eder.

Sözdizimi

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

Parametreler

value_type
Nesnedeki array_view öğelerin veri türü.

_Rütbe
Nesnenin array_view sırası.

Üyeler

Ortak Oluşturucular

Veri Akışı Adı Açıklama
array_view Oluşturucu array_view sınıfının yeni bir örneğini başlatır. için array<T,N>varsayılan oluşturucu yoktur. Tüm oluşturucular yalnızca CPU üzerinde çalışacak şekilde kısıtlanır ve Direct3D hedefinde yürütülemez.
~array_view Yıkıcı Fonksiyon array_view nesnesini yok eder.

Genel Yöntemler

Veri Akışı Adı Açıklama
copy_to Belirtilen hedefe, array_view nesnesinin içeriğini, copy(*this, dest) öğesini çağırarak kopyalar.
data ham verilerine array_viewbir işaretçi döndürür.
veriyi_yok_say Bu görünümü temel alan geçerli verileri atar.
get_extent array_view nesnesinin extent nesnesini döndürür.
get_ref Dizine alınan öğeye bir başvuru döndürür.
kaynak_hızlandırıcı_görünümü_al accelerator_view'u, array_view veri kaynağının bulunduğu yeri döndüren.
yenilemek array_view nesnesine, bağlı belleğinin array_view arabiriminin dışında değiştirildiğini bildirir. Bu yönteme yapılan bir çağrı, önbelleğe alınan tüm bilgileri eski olarak işler.
reinterpret_as Nesnedeki array_view tüm öğeleri içeren tek boyutlu bir dizi döndürür.
bölüm Belirtilen başlangıç noktasında ve isteğe bağlı olarak belirtilen boyuta sahip olan array_view nesnesinin bir alt bölümünü döndürür.
synchronize Nesnede array_view yapılan değişiklikleri kaynak verilerine geri eşitler.
synchronize_async Nesnede yapılan array_view değişiklikleri zaman uyumsuz şekilde kaynak verileriyle senkronize eder.
synchronize_to Belirtilen accelerator_view ile array_view nesnesine yapılan tüm değişiklikleri senkronize eder.
synchronize_to_async Nesnede yapılan array_view değişiklikleri, belirtilen accelerator_view ile zaman uyumsuz modda senkronize eder.
olarak_görüntüle array_view Bu array_view nesnenin verilerini kullanarak farklı bir dereceye sahip bir nesne üretir.

Ortak İşleçler

Veri Akışı Adı Açıklama
operator() parametresi veya parametreleri tarafından belirtilen öğenin değerini döndürür.
operator[] Parametreler tarafından belirtilen öğesini döndürür.
operator= Belirtilen array_view nesnenin içeriğini bu nesneye kopyalar.

Genel Sabitler

Veri Akışı Adı Açıklama
rank Sabit array_view nesnesinin derecesini depolar.

Veri Üyeleri

Veri Akışı Adı Açıklama
kapsam array_view nesnesinin şeklini tanımlayan extent nesnesini alır.
source_accelerator_view array_view veri kaynağının bulunduğu accelerator_view öğesini alır
value_type array_view ve ilişkili dizinin değer türü.

Açıklamalar

sınıfı, array_view bir dizi nesnesinde veya bir nesnenin alt bölümünde array yer alan verilerin görünümünü temsil eder.

Kaynak verilerin bulunduğu nesneye array_view (yerel olarak) veya farklı bir hızlandırıcıda veya bir tutarlılık etki alanında (uzaktan) erişebilirsiniz. Nesneye uzaktan eriştiğiniz zaman, görünümler kopyalanır ve gerektiğinde önbelleğe alınır. Otomatik önbelleğe almanın etkileri dışında, array_view nesneler array nesnelerinkine benzer bir performans profiline sahiptir. Verilere görünümler aracılığıyla erişirken hafif bir performans kaybı vardır.

Üç uzaktan kullanım senaryosu vardır:

  • Sistem bellek işaretçisine yönelik bir görünüm, bir parallel_for_each çağrısı yoluyla hızlandırıcıya geçirilir ve hızlandırıcıda erişilir.

  • Hızlandırıcıda bulunan bir diziye ait görüntü, bir parallel_for_each çağrısı aracılığıyla başka bir hızlandırıcıya iletilir ve orada erişilir.

  • Bir hızlandırıcıda bulunan bir dizinin görünümüne CPU'da erişilir.

Bu senaryolardan herhangi birinde, atıfta bulunulan görünümler, çalışma zamanı esnasında uzak konuma kopyalanır ve array_view nesnesine yapılan çağrılar onları değiştirdiğinde, yerel konuma geri kopyalanır. Çalışma zamanı değişiklikleri geri kopyalama işlemini iyileştirir, yalnızca değiştirilen öğeleri kopyalayabilir veya değişmemiş bölümleri de kopyalayabilir. Bir veri kaynağındaki çakışan array_view nesnelerin uzak bir konumda bilgi tutarlılığını koruması garanti değildir.

Aynı veri kaynağına çok iş parçacıklı erişimi eşitlemeniz gerekir.

Çalışma zamanı, array_view nesnelerindeki verilerin önbelleğe alınmasıyla ilgili aşağıdaki garantileri sağlar:

  • Program akışına göre bir array nesnesine ve onun üzerindeki bir array_view nesnesine tüm iyi senkronize edilmiş erişimler, seri bir şekilde gerçekleşmeden önce ilişkiyi takip eder.

  • Tek bir array nesne üzerindeki aynı hızlandırıcıda çakışan array_view nesnelere yapılan iyi senkronize edilmiş tüm erişimler, array nesnesi aracılığıyla diğer adla ilişkilendirilir. Program düzenine uyan bir toplam gerçekleşmeden önce ilişki oluşturur. Önbelleğe alma işlemi yoktur. array_view Nesneler farklı hızlandırıcılarda yürütülüyorsa erişim sırası tanımlanmamıştır ve bir yarış durumu oluşturulur.

Sistem belleğinde işaretçi kullanarak bir array_view nesne oluşturduğunuzda, görünüm array_view nesnesini yalnızca işaretçi aracılığıyla array_view değiştirmeniz gerekir. Alternatif olarak, temel alınan yerel bellek, array_view nesnesi yerine doğrudan değiştirilirse, sistem işaretçisine bağlı nesnelerden birini array_view üzerinde refresh() çağırmanız gerekir.

Her iki eylem de nesneye array_view temel alınan yerel belleğin değiştirildiğini ve hızlandırıcıda bulunan tüm kopyaların güncel olmadığını bildirir. Bu yönergeleri izlerseniz, işaretçi tabanlı görünümler, veri paralel dizilerinin görünümlerinde sağlanan görünümlerle aynıdır.

Devralma Hiyerarşisi

_Array_view_shape

_Array_view_base

array_view

Gereksinimler

Üst bilgi: amp.h

Ad Alanı: Eşzamanlılık

~array_view

array_view nesnesini yok eder.

~array_view()restrict(amp,cpu);

Dizi_görünümü

array_view sınıfının yeni bir örneğini başlatır.

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

Parametreler

_Arr_type
Verilerin sağlandığı C stili bir dizinin öğe türü.

_Konteyner
Bir şablon bağımsız değişkeni, data() ve size() üyelerini destekleyen doğrusal bir kapsayıcıyı belirtmelidir.

_E0
Bu bölümün kapsamının en önemli bileşeni.

_E1
Bu bölümün kapsamının bir sonraki en önemli bileşeni.

_E2
Bu bölümün kapsamının en az önemli bileşeni.

_Kapsam
Bu array_view'nin her boyuttaki genişliği.

_Diğer
Yeni array_view<T,N>'i başlatmak için kullanılan array_view türünde bir nesne.

_Boyut
Verilerin sağlandığı C stili bir dizinin boyutu.

_Src
Yeni diziye kopyalanacak kaynak verilere ilişkin bir işaretçi.

copy_to

Belirtilen hedef nesneye array_view nesnesinin içeriğini copy(*this, dest) öğesini çağırarak kopyalar.

void copy_to(
    array<value_type, _Rank>& _Dest) const;

void copy_to(
    array_view<value_type, _Rank>& _Dest) const;

Parametreler

_Dest
Kopyalanacak nesne.

veriler

ham verilerine array_viewbir işaretçi döndürür.

value_type* data() const restrict(amp,
    cpu);

const value_type* data() const restrict(amp,
    cpu);

Dönüş Değeri

array_view'nin ham verilerine işaretçi.

discard_data

Bu görünümü temel alan geçerli verileri atar. Bu, görünümün geçerli içeriğini erişilen bir hedefe accelerator_view kopyalamaktan kaçınmak için kullanılan çalışma zamanına yönelik bir iyileştirme ipucudur ve mevcut içerik gerekli değilse kullanılması önerilir. Bu yöntem, restrict(amp) bağlamında kullanıldığında işlemsizdir.

void discard_data() const restrict(cpu);

kapsam

array_view nesnesinin şeklini tanımlayan extent nesnesini alır.

__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;

get_extent

array_view nesnesinin extent nesnesini döndürür.

Concurrency::extent<_Rank> get_extent() const restrict(cpu, amp);

Dönüş Değeri

array_view Nesnesinin extent Nesnesi

get_ref

Dizine _Index tarafından alınmış öğeye bir referans alın. CPU'daki array_view'e erişim için kullanılan diğer dizin operatörlerinden farklı olarak, bu yöntem bu array_view'in içeriğini kendiliğinden CPU ile senkronize etmez. Uzak bir konumda array_view'e erişildikten sonra veya bu array_view'i içeren bir kopyalama işlemi gerçekleştirdikten sonra, kullanıcılar bu yöntemi kullanmadan önce array_view'i açıkça CPU ile eşitlemekten sorumludur. Bunun yapılmaması tanımlanmamış davranışla sonuçlanır.

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

Parametreler

_Dizin
Dizin.

Dönüş Değeri

_Index tarafından dizine alınan öğeye başvuru

kaynak_hızlandırıcı_görünümünü_al

array_view veri kaynağının bulunduğu accelerator_view döndürür. array_view bir veri kaynağı yoksa, bu API bir runtime_exception oluşturur

accelerator_view get_source_accelerator_view() const;

Dönüş Değeri

operator()

parametresi veya parametreleri tarafından belirtilen öğenin değerini döndürür.

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

Parametreler

_Dizin
öğesinin konumu.

_I0
İlk boyuttaki dizin.

_I1
İkinci boyuttaki dizin.

_I2
Üçüncü boyuttaki dizin.

_Ben
öğesinin konumu.

Dönüş Değeri

parametresi veya parametreleri tarafından belirtilen öğenin değeri.

operatör[]

Parametreler tarafından belirtilen öğesini döndürür.

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

Parametreler

_Dizin
Dizin.

_Ben
Dizin.

Dönüş Değeri

Dizindeki array_view veya en önemli boyuta yansıtılan öğenin değeri.

operator=

Belirtilen array_view nesnenin içeriğini bu nesneye kopyalar.

array_view& operator= (
    const array_view& _Other) restrict(amp,cpu);

array_view& operator= (
    const array_view<value_type, _Rank>& _Other) restrict(amp,cpu);

Parametreler

_Diğer
Kopyalanacak array_view nesne.

Dönüş Değeri

Bu array_view nesnesine bir referans.

sıra

array_view nesnesinin derecesini depolar.

static const int rank = _Rank;

yenileme

array_view nesnesine, bağlı belleğinin array_view arabiriminin dışında değiştirildiğini bildirir. Bu yönteme yapılan bir çağrı, önbelleğe alınan tüm bilgileri eski olarak işler.

void refresh() const restrict(cpu);

reinterpret_as

array_view, seçenek olarak kaynak array_view'den farklı bir değer türüne sahip olabilecek tek boyutlu bir array_view aracılığıyla yeniden yorumlanır.

Sözdizimi

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

Parametreler

_Value_type2
Yeni array_view nesnenin veri türü.

Dönüş Değeri

array_view üzerinde, öğe tipi T'dan _Value_type2'a dönüştürülen ve derecesi N'den 1'e düşürülen, bu array_view temel alınarak oluşturulmuş bir nesne veya const array_view nesnesi.

Açıklamalar

Bazen çok boyutlu bir diziyi kaynak diziden farklı bir değer türüne sahip olabilecek doğrusal, tek boyutlu bir dizi olarak görüntülemek kullanışlı olabilir. Bu yöntemi kullanarak bunu bir array_view üzerinde gerçekleştirebilirsiniz.

Uyarı Array_view nesnesini farklı bir değer türü kullanarak yeniden yorumlamak güvenli olmayabilecek bir işlemdir. Bu işlev dikkatli kullanılmalıdır.

Bir örnek aşağıda verilmiştir:

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

bölüm

Belirtilen başlangıç noktasında ve isteğe bağlı olarak belirtilen boyuta sahip olan array_view nesnesinin bir alt bölümünü döndürür.

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

Parametreler

_E0
Bu bölümün kapsamının en önemli bileşeni.

_E1
Bu bölümün kapsamının bir sonraki en önemli bileşeni.

_E2
Bu bölümün kapsamının en az önemli bileşeni.

_Ext
bölümün kapsamını belirten extent nesnesi. Çıkış noktası 0'dır.

_Idx
Kaynağın konumunu belirten dizin nesnesi. Alt bölüm, kapsamın geri kalanıdır.

_I0
Bu bölümün kaynağının en önemli bileşeni.

_I1
Bu bölümün kaynağının bir sonraki en önemli bileşeni.

_I2
Bu bölümün kaynağının en az önemli bileşeni.

_Rütbe
Bölümün sırası.

_Section_extent
bölümün kapsamını belirten extent nesnesi.

_Section_origin
Kaynağın konumunu belirten dizin nesnesi.

Dönüş Değeri

Belirtilen kaynakta olan ve isteğe bağlı olarak belirtilen uzantıya sahip olan nesnenin alt bölümü array_view . Yalnızca index nesne belirtildiğinde, alt bölüm, index nesnesindeki öğelerin dizinlerinden daha büyük dizinlere sahip olan, ilişkili ölçüdeki tüm öğeleri içerir.

kaynak_hızlandırıcı_görüntüleme

Bu array_view'in ilişkili olduğu kaynak accelerator_view'i alır.

__declspec(property(get= get_source_accelerator_view)) accelerator_view source_accelerator_view;

eşzamanlamak

Nesnede array_view yapılan değişiklikleri kaynak verilerine geri eşitler.

void synchronize(access_type _Access_type = access_type_read) const restrict(cpu);

void synchronize() const restrict(cpu);

Parametreler

_Erişim_türü
Hedeflenen access_type üzerindeki accelerator_view. Bu parametrenin varsayılan değeri vardır access_type_read.

synchronize_async

Nesnede yapılan array_view değişiklikleri zaman uyumsuz şekilde kaynak verileriyle senkronize eder.

concurrency::completion_future synchronize_async(access_type _Access_type = access_type_read) const restrict(cpu);

concurrency::completion_future synchronize_async() const restrict(cpu);

Parametreler

_Erişim_türü
Hedeflenen access_type üzerindeki accelerator_view. Bu parametrenin varsayılan değeri vardır access_type_read.

Dönüş Değeri

İşlemin tamamlanmasının beklendiği bir gelecek.

şuna senkronize et

Bu array_view'de yapılan tüm değişiklikleri belirtilen accelerator_view ile senkronize eder.

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

Parametreler

_Accl_view
Eşitlenecek hedef accelerator_view.

_Erişim_türü
Hedef accelerator_view üzerinde istenen erişim_tipi. Bu parametrenin varsayılan değeri access_type_read.

synchronize_to_async

Bu array_view'a yapılan tüm değişiklikleri zaman uyumsuz olarak belirtilen accelerator_view'a senkronize eder.

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

Parametreler

_Accl_view
Eşitlenmesi gereken hedef accelerator_view.

_Erişim_türü
Hedeflenen accelerator_view üzerinde istenen access_type. Bu parametrenin varsayılan değeri access_type_read.

Dönüş Değeri

İşlemin tamamlanmasının beklendiği bir gelecek.

değer_tipi

array_view ve ilişkili dizinin değer türü.

typedef typenamevalue_type value_type;

olarak_görüntüle

Bu array_view farklı bir sıra derecesi olan bir array_view olarak yeniden yorumlar.

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

Parametreler

_New_rank
Yeni array_view nesnenin sırası.

_View_extent
Yeniden şekillendirme extent.

value_type
Hem özgün dizi nesnesindeki hem de döndürülen array_view nesnedeki öğelerin veri türü.

Dönüş Değeri

Oluşturulan array_view nesne.

Ayrıca bkz.

Eşzamanlılık Ad Alanı (C++ AMP)