Bagikan melalui


Kelas array_view

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_each ke 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 array dan objek array_view yang terkait dengannya dalam urutan program mematuhi hubungan serial mendahului.

  • Semua akses yang disinkronkan dengan baik ke objek yang tumpang tindih array_view pada akselerator yang sama untuk satu objek array dialiaskan melalui objek array. Mereka menginduksi hubungan total terjadi-sebelum yang mengikuti urutan program. Tidak ada penembolokan. array_view Jika 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.

Lihat juga

Namespace Konkurensi (C++ AMP)