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

value_type
Jenis data elemen dalam array_view objek.

_Rank
Peringkat array_view objek.

Anggota

Konstruktor Publik

Nama Deskripsi
Konstruktor array_view Menginisialisasi instans baru 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 penunjuk ke data mentah .array_view
discard_data Buang data saat ini yang mendasar tampilan ini.
get_extent Mengembalikan objek tingkat 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 terikatnya telah dimodifikasi di array_view luar antarmuka. Panggilan ke metode ini merender semua informasi cache basi.
reinterpret_as Mengembalikan array satu dimensi yang berisi semua elemen dalam array_view objek.
bagian Mengembalikan sub bagian dari array_view objek yang berada di asal yang ditentukan dan, secara opsional, yang memiliki tingkat 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.
view_as 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 Publik

Nama Deskripsi
Konstanta peringkat Menyimpan peringkat objek array_view.

Anggota Data

Nama Deskripsi
Sejauh extent Mendapatkan objek yang menentukan bentuk array_view objek.
source_accelerator_view Mendapatkan accelerator_view tempat sumber array_view data berada
value_type Jenis nilai array array_view dan 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 penembolokan otomatis, array_view objek memiliki profil performa yang array mirip dengan objek. Ada penalti performa kecil saat Anda mengakses data melalui tampilan.

Ada tiga skenario penggunaan jarak jauh:

  • Tampilan ke penunjuk memori sistem diteruskan melalui panggilan parallel_for_each ke akselerator dan diakses pada akselerator.

  • Tampilan ke array yang terletak di akselerator diteruskan melalui panggilan ke akselerator parallel_for_each lain dan diakses di sana.

  • Tampilan ke array yang terletak di akselerator diakses pada 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 akses multithread ke sumber data yang sama.

Runtime membuat jaminan berikut mengenai penembolokan data dalam array_view objek:

  • Semua akses yang disinkronkan dengan baik ke array objek dan array_view objek di atasnya dalam urutan program mematuhi hubungan serial terjadi sebelum.

  • Semua akses yang disinkronkan dengan baik ke objek yang tumpang tindih array_view pada akselerator yang sama pada satu array objek diberi alias melalui array objek. Mereka menginduksi total terjadi-sebelum hubungan yang mematuhi 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() salah array_view satu objek yang dilampirkan ke penunjuk sistem, jika memori asli yang mendasar diubah secara langsung, alih-alih melalui array_view objek.

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 Warisan

_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 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 harus menentukan kontainer linier yang mendukung data() dan size() anggota.

_E0
Komponen paling signifikan dari luasnya bagian ini.

_E1
Komponen berikutnya yang paling signifikan dari tingkat bagian ini.

_E2
Komponen paling tidak signifikan dari tingkat bagian ini.

_Sejauh
Sejauh mana dalam setiap dimensi ini array_view.

_Other
Objek jenis array_view<T,N> untuk menginisialisasi yang baru array_view.

_Tingginya
Ukuran array gaya C tempat data disediakan.

_Src
Penunjuk ke data sumber yang akan disalin ke dalam array baru.

copy_to

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 penunjuk 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 .array_view

discard_data

Buang data saat ini yang mendasar tampilan ini. Ini adalah petunjuk pengoptimalan ke runtime yang digunakan untuk menghindari penyalinan konten tampilan saat ini ke target accelerator_view yang diaksesnya, dan penggunaannya direkomendasikan 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;

get_extent

Mengembalikan objek array_view tingkat objek.

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

Tampilkan Nilai

Objek extent array_view objek

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 jarak jauh atau melakukan operasi penyalinan yang melibatkan pengguna array_view ini 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

get_source_accelerator_view

Mengembalikan accelerator_view tempat sumber data 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 dalam dimensi kedua.

_I2
Indeks dalam dimensi ketiga.

_I
Lokasi elemen .

Tampilkan Nilai

Nilai elemen yang ditentukan oleh parameter atau 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 yang array_view diproyeksikan pada dimensi yang paling signifikan.

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 .

rank

Menyimpan peringkat objek array_view.

static const int rank = _Rank;

Refresh

Memberi tahu array_view objek bahwa memori terikatnya telah dimodifikasi di array_view luar antarmuka. Panggilan ke metode ini merender semua informasi cache basi.

void refresh() const restrict(cpu);

reinterpret_as

Menginterpretasikan ulang array_view melalui array_view satu dimensi, yang sebagai opsi dapat memiliki jenis 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 dengan array_view 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 sub bagian dari array_view objek yang berada di asal yang ditentukan dan, secara opsional, yang memiliki tingkat 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 berikutnya yang paling signifikan dari tingkat bagian ini.

_E2
Komponen paling tidak signifikan dari tingkat bagian ini.

_Ext
Objek jangkauan yang menentukan luasnya bagian. Asalnya adalah 0.

_Idx
Objek indeks yang menentukan lokasi asal. Sub bagian adalah sisa dari jangkauan.

_I0
Komponen paling signifikan dari asal bagian ini.

_I1
Komponen berikutnya yang paling signifikan dari asal bagian ini.

_I2
Komponen paling tidak signifikan dari asal bagian ini.

_Rank
Peringkat bagian .

_Section_extent
Objek jangkauan yang menentukan luasnya bagian.

_Section_origin
Objek indeks yang menentukan lokasi asal.

Tampilkan Nilai

Sub bagian dari array_view objek yang berada di asal yang ditentukan dan, secara opsional, yang memiliki tingkat 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.

source_accelerator_view

Mendapatkan sumber accelerator_view yang dikaitkan dengan array_view ini.

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

sinkronkan

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
access_type yang dimaksudkan pada accelerator_view target. Parameter ini memiliki nilai access_type_readdefault .

synchronize_async

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
access_type yang dimaksudkan pada accelerator_view target. Parameter ini memiliki nilai access_type_readdefault .

Tampilkan Nilai

Masa depan yang menunggu operasi selesai.

synchronize_to

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
Target accelerator_view untuk disinkronkan.

_Access_type
access_type yang diinginkan pada accelerator_view target. Parameter ini memiliki nilai default access_type_read.

synchronize_to_async

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
Target accelerator_view untuk disinkronkan.

_Access_type
access_type yang diinginkan pada accelerator_view target. Parameter ini memiliki nilai default access_type_read.

Tampilkan Nilai

Masa depan yang menunggu operasi selesai.

value_type

Jenis nilai array_view dan array terikat.

typedef typenamevalue_type value_type;

view_as

Menginterpretasikan ulang ini array_view sebagai array_view 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
Membentuk ulang extent.

value_type
Jenis data elemen di objek array asli dan objek yang dikembalikanarray_view.

Tampilkan Nilai

Objek array_view yang dibangun.

Lihat juga

Namespace Konkurensi (C++ AMP)