Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mewakili tampilan N-dimensi atas data yang disimpan di kontainer lain.
Sintaks
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)>;
Parameter
tipe_nilai
Jenis data elemen dalam array_view objek.
_Rank
Peringkat dari objek array_view.
Anggota
Konstruktor Publik
| Nama | Deskripsi |
|---|---|
| Konstruktor array_view | Menginisialisasi instans baru dari kelas array_view. Tidak ada konstruktor default untuk array<T,N>. Semua konstruktor dibatasi untuk berjalan pada CPU saja dan tidak dapat dijalankan pada target Direct3D. |
| ~array_view Destructor |
array_view Menghancurkan objek. |
Metode Publik
| Nama | Deskripsi |
|---|---|
| copy_to | Menyalin konten array_view objek ke tujuan yang ditentukan dengan memanggil copy(*this, dest). |
| data | Mengembalikan pointer ke data mentah array_view. |
| discard_data | Buang data yang mendasari tampilan ini saat ini. |
| get_extent | Mengembalikan objek rentang dari objek array_view. |
| get_ref | Mengembalikan referensi ke elemen terindeks. |
| get_source_accelerator_view | Mengembalikan accelerator_view tempat sumber array_view data berada. |
| Refresh | Memberi tahu array_view objek bahwa memori yang terikatnya telah dimodifikasi di luar antarmuka array_view. Panggilan ke metode ini membuat semua informasi yang di-cache menjadi kadaluarsa. |
| reinterpret_as | Mengembalikan array satu dimensi yang berisi semua elemen dalam array_view objek. |
| bagian | Mengembalikan subbagian dari objek array_view yang berada di titik asal yang ditentukan, dan secara opsional, memiliki batas yang ditentukan. |
| Mensinkronisasi | Menyinkronkan modifikasi apa pun yang dilakukan pada array_view objek kembali ke data sumbernya. |
| synchronize_async | Secara asinkron menyinkronkan modifikasi apa pun yang dilakukan pada array_view objek kembali ke data sumbernya. |
| synchronize_to | Menyinkronkan modifikasi apa pun yang dilakukan pada array_view objek ke accelerator_view yang ditentukan. |
| synchronize_to_async | Secara asinkron menyinkronkan modifikasi apa pun yang dilakukan pada array_view objek ke accelerator_view yang ditentukan. |
| lihat_sebagai |
array_view Menghasilkan objek dengan peringkat yang berbeda menggunakan data objek iniarray_view. |
Operator Publik
| Nama | Deskripsi |
|---|---|
| operator() | Mengembalikan nilai elemen yang ditentukan oleh parameter atau parameter. |
| operator[] | Mengembalikan elemen yang ditentukan oleh parameter. |
| operator= | Menyalin isi objek array_view yang ditentukan ke dalam objek ini. |
Konstanta Umum
| Nama | Deskripsi |
|---|---|
| Konstanta Peringkat | Menyimpan peringkat objek array_view. |
Anggota Data
| Nama | Deskripsi |
|---|---|
| Cakupan |
extent Mendapatkan objek yang menentukan bentuk array_view objek. |
| source_accelerator_view |
Mendapatkan accelerator_view tempat sumber array_view data berada |
| tipe_nilai | Jenis nilai dari array_view dan array terikat. |
Keterangan
Kelas array_view mewakili tampilan ke dalam data yang terkandung dalam objek array atau sub-bagian objek array .
Anda dapat mengakses array_view objek tempat data sumber berada (secara lokal) atau pada akselerator yang berbeda atau domain koherensi (dari jarak jauh). Saat Anda mengakses objek dari jarak jauh, tampilan disalin dan di-cache seperlunya. Kecuali untuk efek penyimpanan cache otomatis, objek array_view memiliki profil performa yang mirip dengan objek array. Ada pengurangan performa kecil saat Anda mengakses data melalui tampilan.
Ada tiga skenario penggunaan jarak jauh:
Referensi ke penunjuk memori sistem diteruskan ke akselerator melalui panggilan parallel_for_each dan diakses pada akselerator.
Tampilan dari array yang terletak di akselerator diteruskan melalui panggilan
parallel_for_eachke akselerator lain dan diakses di sana.Tampilan sebuah array yang terletak di akselerator diakses oleh CPU.
Dalam salah satu skenario ini, tampilan yang direferensikan disalin oleh runtime ke lokasi jarak jauh dan, jika dimodifikasi oleh panggilan ke array_view objek, disalin kembali ke lokasi lokal. Runtime mungkin mengoptimalkan proses penyalinan perubahan kembali, mungkin hanya menyalin elemen yang diubah, atau mungkin menyalin bagian yang tidak berubah juga. Objek yang tumpang tindih array_view pada satu sumber data tidak dijamin untuk mempertahankan integritas referensial di lokasi jarak jauh.
Anda harus menyinkronkan setiap akses multi-utas ke sumber data yang sama.
Runtime memberikan jaminan-jaminan berikut mengenai penggunaan data cache dalam objek array_view.
Semua akses yang disinkronkan dengan baik ke objek
arraydan objekarray_viewyang terkait dengannya dalam urutan program mematuhi hubungan serial mendahului.Semua akses yang disinkronkan dengan baik ke objek yang tumpang tindih
array_viewpada akselerator yang sama untuk satu objekarraydialiaskan melalui objekarray. Mereka menginduksi hubungan total terjadi-sebelum yang mengikuti urutan program. Tidak ada penembolokan.array_viewJika objek dijalankan pada akselerator yang berbeda, urutan akses tidak terdefinisi, menciptakan kondisi balapan.
Saat Anda membuat array_view objek menggunakan penunjuk dalam memori sistem, Anda harus mengubah objek tampilan array_view hanya melalui penunjuk array_view . Atau, Anda harus memanggil refresh() pada salah satu objek array_view yang dilampirkan ke pointer sistem, jika memori asli diubah secara langsung, alih-alih melalui objek array_view.
Salah satu tindakan memberi tahu array_view objek bahwa memori asli yang mendasar diubah dan bahwa salinan apa pun yang terletak di akselerator kedaluarsa. Jika Anda mengikuti panduan ini, tampilan berbasis pointer identik dengan tampilan array paralel data yang disediakan.
Hierarki Pewarisan
_Array_view_shape
_Array_view_base
array_view
Persyaratan
Header: amp.h
Namespace: Konkurensi
~array_view
array_view Menghancurkan objek.
~array_view()restrict(amp,cpu);
array_view
Menginisialisasi instans baru dari kelas 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);
Parameter
_Arr_type
Jenis elemen array gaya C tempat data disediakan.
_Wadah
Argumen templat yang perlu menetapkan kontainer linier yang mendukung anggota data() dan size().
_E0
Komponen paling signifikan dari luasnya bagian ini.
_E1
Komponen paling signifikan kedua dari rentang bagian ini.
_E2
Komponen paling tidak signifikan dari jangkauan bagian ini.
_Sejauh
Sejauh mana dalam setiap dimensi ini array_view.
_Other
Objek jenis array_view<T,N> dari mana untuk menginisialisasi array_view yang baru.
_Ukuran
Ukuran array dengan gaya C dari mana data disediakan.
_Src
Penunjuk ke data sumber yang akan disalin ke dalam array baru.
salin_ke
Menyalin konten array_view objek ke objek tujuan yang ditentukan dengan memanggil copy(*this, dest).
void copy_to(
array<value_type, _Rank>& _Dest) const;
void copy_to(
array_view<value_type, _Rank>& _Dest) const;
Parameter
_Dest
Objek yang akan disalin.
data
Mengembalikan pointer ke data mentah array_view.
value_type* data() const restrict(amp,
cpu);
const value_type* data() const restrict(amp,
cpu);
Tampilkan Nilai
Penunjuk ke data mentah dari array_view.
buang_data
Buang data yang mendasari tampilan ini saat ini. Ini adalah petunjuk pengoptimalan bagi runtime yang digunakan untuk mencegah penyalinan konten tampilan saat ini ke target accelerator_view saat diakses, dan penggunaannya dianjurkan jika konten yang ada tidak diperlukan. Metode ini adalah no-op ketika digunakan dalam konteks restrict(amp)
void discard_data() const restrict(cpu);
Sejauh
extent Mendapatkan objek yang menentukan bentuk array_view objek.
__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;
dapatkan_cakupan
Mengembalikan objek extent dari objek array_view.
Concurrency::extent<_Rank> get_extent() const restrict(cpu, amp);
Tampilkan Nilai
Objek extent dari objek array_view
get_ref
Dapatkan referensi ke elemen yang diindeks oleh _Index. Tidak seperti operator pengindeksan lain untuk mengakses array_view pada CPU, metode ini tidak secara implisit menyinkronkan konten array_view ini ke CPU. Setelah mengakses array_view di lokasi remote, atau melakukan operasi penyalinan yang melibatkan array_view ini, pengguna bertanggung jawab untuk secara eksplisit menyinkronkan array_view ke CPU sebelum memanggil metode ini. Kegagalan untuk melakukannya menghasilkan perilaku yang tidak ditentukan.
value_type& get_ref(
const index<_Rank>& _Index) const restrict(amp, cpu);
Parameter
_Index
Indeks.
Tampilkan Nilai
Referensi ke elemen yang diindeks oleh _Index
dapatkan_tampilan_akselerator_sumber
Mengembalikan accelerator_view di mana sumber data dari array_view berada. Jika array_view tidak memiliki sumber data, API ini akan melemparkan runtime_exception
accelerator_view get_source_accelerator_view() const;
Tampilkan Nilai
operator()
Mengembalikan nilai elemen yang ditentukan oleh parameter atau parameter.
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);
Parameter
_Index
Lokasi elemen .
_I0
Indeks dalam dimensi pertama.
_I1
Indeks di dimensi kedua.
_I2
Indeks dalam dimensi ketiga.
_I
Lokasi elemen .
Tampilkan Nilai
Nilai elemen yang ditentukan oleh satu atau beberapa parameter.
operator[]
Mengembalikan elemen yang ditentukan oleh parameter.
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);
Parameter
_Index
Indeks.
_I
Indeks.
Tampilkan Nilai
Nilai elemen pada indeks, atau array_view yang diproyeksikan pada dimensi yang paling menonjol.
operator=
Menyalin isi objek yang ditentukan array_view ke objek ini.
array_view& operator= (
const array_view& _Other) restrict(amp,cpu);
array_view& operator= (
const array_view<value_type, _Rank>& _Other) restrict(amp,cpu);
Parameter
_Other
Objek array_view yang akan disalin.
Tampilkan Nilai
Referensi ke objek ini array_view .
pangkat
Menyimpan peringkat objek array_view.
static const int rank = _Rank;
refresh
Memberi tahu array_view objek bahwa memori yang terikatnya telah dimodifikasi di luar antarmuka array_view. Panggilan ke metode ini membuat semua informasi yang di-cache menjadi kadaluarsa.
void refresh() const restrict(cpu);
reinterpretasikan_sebagai
Menginterpretasikan ulang *array_view* melalui *array_view* satu dimensi, yang sebagai opsi dapat memiliki tipe nilai yang berbeda dari *array_view* sumber.
Sintaks
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);
Parameter
_Value_type2
Jenis data objek baru array_view .
Tampilkan Nilai
Objek array_view atau objek const array_view yang didasarkan pada ini array_view, dengan jenis elemen dikonversi dari T ke _Value_type2, dan peringkat berkurang dari N ke 1.
Keterangan
Terkadang lebih mudah untuk melihat array multi-dimensi sebagai array linier satu dimensi, yang mungkin memiliki jenis nilai yang berbeda dari array sumber. Anda dapat mencapai ini pada array_view dengan menggunakan metode ini.
Peringatan Menginterpretasikan ulang objek array_view dengan menggunakan jenis nilai yang berbeda adalah operasi yang berpotensi tidak aman. Fungsionalitas ini harus digunakan dengan hati-hati.
Berikut contohnya:
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);
bagian
Mengembalikan subbagian dari objek array_view yang berada di titik asal yang ditentukan, dan secara opsional, memiliki batas yang ditentukan.
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);
Parameter
_E0
Komponen paling signifikan dari luasnya bagian ini.
_E1
Komponen paling signifikan kedua dari rentang bagian ini.
_E2
Komponen paling tidak signifikan dari jangkauan bagian ini.
_Ext
Objek jangkauan yang menentukan luasnya bagian. Asalnya adalah 0.
_Idx
Objek indeks yang menentukan lokasi asal. Subbagian adalah bagian tersisa dari ruang lingkup.
_I0
Komponen paling signifikan dari asal usul bagian ini.
_I1
Komponen kedua paling signifikan dari asal bagian ini.
_I2
Komponen paling tidak signifikan dari asal bagian ini.
_Rank
Peringkat dari bagian tersebut.
_Section_extent
Objek jangkauan yang menentukan luasnya bagian.
_Section_origin
Objek indeks yang menentukan lokasi asal.
Tampilkan Nilai
Subbagian dari array_view objek yang berada di posisi yang ditentukan dan, secara opsional, yang memiliki cakupan yang ditentukan. Ketika hanya index objek yang ditentukan, sub-bagian berisi semua elemen dalam tingkat terkait yang memiliki indeks yang lebih besar dari indeks elemen dalam index objek.
tampilan akselerator sumber
Mendapatkan sumber accelerator_view yang dikaitkan dengan array_view ini.
__declspec(property(get= get_source_accelerator_view)) accelerator_view source_accelerator_view;
selaraskan
Menyinkronkan modifikasi apa pun yang dilakukan pada array_view objek kembali ke data sumbernya.
void synchronize(access_type _Access_type = access_type_read) const restrict(cpu);
void synchronize() const restrict(cpu);
Parameter
_Access_type
akses_tipe yang dimaksudkan pada target accelerator_view. Parameter ini memiliki nilai access_type_readdefault .
sinkronkan_asinkron
Secara asinkron menyinkronkan modifikasi apa pun yang dilakukan pada array_view objek kembali ke data sumbernya.
concurrency::completion_future synchronize_async(access_type _Access_type = access_type_read) const restrict(cpu);
concurrency::completion_future synchronize_async() const restrict(cpu);
Parameter
_Access_type
Jenis akses yang dimaksudkan pada accelerator_view target. Parameter ini memiliki nilai access_type_readdefault .
Tampilkan Nilai
Masa depan yang menunggu operasi selesai.
sinkronkan_ke
Menyinkronkan modifikasi apa pun yang dilakukan pada array_view ini ke accelerator_view yang ditentukan.
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);
Parameter
_Accl_view
accelerator_view target yang akan disinkronkan.
_Tipe_akses
Jenis akses yang diinginkan pada accelerator_view target. Parameter ini memiliki nilai default access_type_read.
synchronize_to_async (sinkronkan_ke_asinkron)
Secara asinkron menyinkronkan modifikasi apa pun yang dilakukan pada array_view ini ke accelerator_view yang ditentukan.
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);
Parameter
_Accl_view
Akselerator_view target yang akan disinkronkan.
_Access_type
access_type yang diinginkan pada target accelerator_view. Parameter ini memiliki nilai default access_type_read.
Tampilkan Nilai
Masa depan yang menunggu operasi selesai.
jenis_nilai
Tipe nilai dari array_view dan array terikat.
typedef typenamevalue_type value_type;
lihat_sebagai
Menginterpretasikan ulang array_view ini sebagai array_view dengan peringkat yang berbeda.
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);
Parameter
_New_rank
Peringkat objek baru array_view .
_View_extent
Pembentukan ulang extent.
tipe_nilai
Jenis data elemen di objek array asli dan objek array_view yang dikembalikan.
Tampilkan Nilai
Objek array_view yang dibangun.