batasi (C++ AMP)

Penentu pembatasan dapat diterapkan ke fungsi dan deklarasi lambda. Ini memberlakukan pembatasan pada kode dalam fungsi dan pada perilaku fungsi dalam aplikasi yang menggunakan runtime C++ Accelerated Massive Parallelism (C++ AMP).

Catatan

Untuk informasi tentang restrict kata kunci yang merupakan bagian __declspec dari atribut kelas penyimpanan, lihat membatasi.

Klausa restrict mengambil formulir berikut:

Klausul Deskripsi
restrict(cpu) Fungsi ini dapat menggunakan bahasa C++ lengkap. Hanya fungsi lain yang dideklarasikan dengan menggunakan fungsi restrict(cpu) yang dapat memanggil fungsi .
restrict(amp) Fungsi ini hanya dapat menggunakan subset bahasa C++ yang dapat dipercepat C++ AMP.
Urutan restrict(cpu) dan restrict(amp). Fungsi harus mematuhi batasan keduanya restrict(cpu) dan restrict(amp). Fungsi ini dapat dipanggil oleh fungsi yang dideklarasikan dengan menggunakan restrict(cpu), , restrict(amp)restrict(cpu, amp), atau restrict(amp, cpu).

Formulir restrict(A) restrict(B) dapat ditulis sebagai restrict(A,B).

Keterangan

Kata restrict kunci adalah kata kunci kontekstual. Penentu pembatasan, cpu dan amp bukan kata yang dipesan. Daftar penentu tidak dapat diperluas. Fungsi yang tidak memiliki restrict klausa sama dengan fungsi yang memiliki restrict(cpu) klausa.

Fungsi yang memiliki restrict(amp) klausa memiliki batasan berikut:

  • Fungsi ini hanya dapat memanggil fungsi yang memiliki restrict(amp) klausa.

  • Fungsi harus inlinable.

  • Fungsi ini hanya intdapat mendeklarasikan variabel , unsigned int, float, dan double , serta kelas dan struktur yang hanya berisi jenis ini. bool juga diizinkan, tetapi harus selaras 4-byte jika Anda menggunakannya dalam jenis majemuk.

  • Fungsi Lambda tidak dapat menangkap dengan referensi dan tidak dapat menangkap pointer.

  • Referensi dan pointer tidak langsung tunggal hanya didukung sebagai variabel lokal, argumen fungsi, dan jenis pengembalian.

  • Berikut ini tidak diperbolehkan:

    • Rekursi.

    • Variabel dideklarasikan dengan kata kunci volatil .

    • Fungsi virtual.

    • Penunjuk ke fungsi.

    • Penunjuk ke fungsi anggota.

    • Penunjuk dalam struktur.

    • Penunjuk ke penunjuk.

    • goto Pernyataan.

    • Pernyataan berlabel.

    • try, catch, atau throw pernyataan.

    • Variabel global.

    • Variabel statis. Gunakan kata kunci tile_static sebagai gantinya.

    • dynamic_cast Gips.

    • Operator.typeid

    • deklarasi asm.

    • Varargs.

Untuk diskusi batasan fungsi, lihat pembatasan batasan(amp).

Contoh

Contoh berikut menunjukkan cara menggunakan restrict(amp)klausa.

void functionAmp() restrict(amp) {}
void functionNonAmp() {}

void callFunctions() restrict(amp)
{
    // int is allowed.
    int x;
    // long long int is not allowed in an amp-restricted function. This generates a compiler error.
    // long long int y;

    // Calling an amp-restricted function is allowed.
    functionAmp();

    // Calling a non-amp-restricted function is not allowed.
    // functionNonAmp();
}

Lihat juga

C++ AMP (C++ Paralelisme Masif Dipercepat)