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ı | Nesneyi yok eder array_view . |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
copy_to | öğesini çağırarak copy(*this, dest) nesnenin array_view içeriğini belirtilen hedefe kopyalar. |
data | ham verilerine array_view bir işaretçi döndürür. |
discard_data | 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. |
get_source_accelerator_view | veri kaynağının array_view bulunduğu accelerator_view döndürür. |
yenilemek | Nesneye array_view , bağlı belleğinin arabirimin array_view 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. |
section | Belirtilen kaynakta ve isteğe bağlı olarak, belirtilen uzantıya sahip olan nesnenin bir alt bölümü array_view 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 olarak kaynak verilerine eşitler. |
synchronize_to | Nesnede array_view yapılan tüm değişiklikleri belirtilen accelerator_view eşitler. |
synchronize_to_async | Nesnede yapılan array_view değişiklikleri zaman uyumsuz olarak belirtilen accelerator_view eşitler. |
view_as | 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. |
işleç[] | 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 Sabiti | Nesnenin derecesini array_view depolar. |
Veri Üyeleri
Veri Akışı Adı | Açıklama |
---|---|
kapsam | Nesnenin extent şeklini array_view tanımlayan nesneyi alır. |
source_accelerator_view | veri kaynağının array_view bulunduğu accelerator_view alır |
value_type | ve ilişkili dizinin değer türü array_view . |
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 nesneler, array_view
nesnelerinkine benzer bir performans profiline array
sahiptir. Verilere görünümler aracılığıyla erişirken küçük bir performans cezası vardır.
Üç uzaktan kullanım senaryosu vardır:
Sistem bellek işaretçisine yönelik bir görünüm, bir hızlandırıcıya parallel_for_each çağrısı yoluyla geçirilir ve hızlandırıcıdan erişilir.
Hızlandırıcıda bulunan bir dizi görünümü, başka bir
parallel_for_each
hızlandırıcıya yapılan çağrı yoluyla geçirilir ve buradan erişilir.CPU'da hızlandırıcıda bulunan bir dizi görünümüne erişilir.
Bu senaryolardan herhangi birinde başvuruda bulunan görünümler çalışma zamanı tarafından uzak konuma kopyalanır ve nesneye array_view
yapılan çağrılar tarafından değiştirilirse 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ı, nesnelerdeki verilerin array_view
önbelleğe alınmasını sağlamak için aşağıdaki garantileri verir:
Program sırasına göre bir
array
nesneye vearray_view
nesneye tüm iyi eşitlenmiş erişimler seri gerçekleşmeden önce ilişkisine uyar.Tek
array
bir nesne üzerinde aynı hızlandırıcıda çakışanarray_view
nesnelere iyi eşitlenmiş tüm erişimler, nesne aracılığıylaarray
diğer adla eklenir. 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 nesne yerine array_view
doğrudan değiştirilirse, sistem işaretçisine bağlı nesnelerden birini array_view
çağırmanız refresh()
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
Nesneyi yok eder array_view
.
~array_view()restrict(amp,cpu);
array_view
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
ve size()
üyelerini destekleyen data()
doğrusal bir kapsayıcı belirtmesi gereken bir şablon bağımsız değişkeni.
_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
boyutun her boyutunun kapsamı.
_Diğer
Yeni array_view
öğesinin başlatıldığı türde array_view<T,N>
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
öğesini çağırarak copy(*this, dest)
nesnenin array_view
içeriğini belirtilen hedef nesneye 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_view
bir 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
ham verilerinin işaretçisi array_view
.
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, kısıtla (amp) bağlamında kullanıldığında işlem yapılmaz
void discard_data() const restrict(cpu);
kapsam
Nesnenin extent
şeklini array_view
tanımlayan nesneyi alır.
__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;
get_extent
Nesnenin extent nesnesini array_view
döndürür.
Concurrency::extent<_Rank> get_extent() const restrict(cpu, amp);
Dönüş Değeri
extent
Nesnenin array_view
nesnesi
get_ref
_Index tarafından dizine alınan öğeye başvuru alın. CPU'da array_view erişmek için diğer dizin işleçlerinden farklı olarak, bu yöntem bu array_view içeriğini örtük olarak CPU ile eşitlemez. Uzak bir konumdaki array_view eriştiğinde veya bu array_view içeren bir kopyalama işlemi gerçekleştirdikten sonra kullanıcılar bu yöntemi çağırmadan önce array_view 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
get_source_accelerator_view
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.
işleç[]
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
nesneye bir başvuru.
rütbe
Nesnenin derecesini array_view
depolar.
static const int rank = _Rank;
yenileme
Nesneye array_view
, bağlı belleğinin arabirimin array_view
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
seçenek olarak kaynak array_view farklı bir değer türüne sahip olabilecek tek boyutlu bir array_view aracılığıyla array_view yeniden yorumlar.
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
Öğe türü öğesi türünden öğesine dönüştürülen ve derecenin N'den T
1'e _Value_type2
düşürüldüğü, bunu array_view
temel alan 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);
section
Belirtilen kaynakta ve isteğe bağlı olarak, belirtilen uzantıya sahip olan nesnenin bir alt bölümü array_view
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 ilişkili ölçüde nesnedeki öğelerin dizinlerinden daha büyük dizinleri olan tüm öğeleri index
içerir.
source_accelerator_view
Bu array_view ilişkili olduğu kaynak accelerator_view alır.
__declspec(property(get= get_source_accelerator_view)) accelerator_view source_accelerator_view;
synchronize
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
_Access_type
Hedef accelerator_view hedef access_type. Bu parametrenin varsayılan değeri vardır access_type_read
.
synchronize_async
Nesnede yapılan array_view
değişiklikleri zaman uyumsuz olarak kaynak verilerine eşitler.
concurrency::completion_future synchronize_async(access_type _Access_type = access_type_read) const restrict(cpu);
concurrency::completion_future synchronize_async() const restrict(cpu);
Parametreler
_Access_type
Hedef accelerator_view hedef access_type. Bu parametrenin varsayılan değeri vardır access_type_read
.
Dönüş Değeri
İşlemin tamamlanmasının beklendiği bir gelecek.
synchronize_to
Bu array_view yapılan tüm değişiklikleri belirtilen accelerator_view eşitler.
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.
_Access_type
Hedef accelerator_view istenen access_type. Bu parametrenin varsayılan değeri access_type_read.
synchronize_to_async
Bu array_view yapılan tüm değişiklikleri zaman uyumsuz olarak belirtilen accelerator_view eşitler.
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şitlenecek hedef accelerator_view.
_Access_type
Hedef accelerator_view istenen access_type. Bu parametrenin varsayılan değeri access_type_read.
Dönüş Değeri
İşlemin tamamlanmasının beklendiği bir gelecek.
value_type
array_view ve ilişkili dizinin değer türü.
typedef typenamevalue_type value_type;
view_as
Bunu array_view
farklı bir array_view
derecelendirme 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şturduğunuz array_view
nesne.