ograniczenie (C++ AMP)
Specyfikator ograniczenia może być stosowany do funkcji i deklaracji lambda. Wymusza on ograniczenia dotyczące kodu w funkcji i zachowania funkcji w zastosowaniach, które korzystają ze środowiska uruchomieniowego C++ Accelerated Massive Parallelism (C++ AMP).
Uwaga
Aby uzyskać informacje o słowie restrict
kluczowym, które jest częścią __declspec
atrybutów klasy magazynu, zobacz ograniczanie.
Klauzula restrict
przyjmuje następujące formy:
Klauzula | opis |
---|---|
restrict(cpu) |
Funkcja może używać w pełni języka C++. Tylko inne funkcje, które są zadeklarowane za pomocą funkcji restrict(cpu) mogą wywołać tę funkcję. |
restrict(amp) |
Funkcja może używać tylko podzbioru języka C++, który może być przyspieszony przez C++ AMP. |
Sekwencja restrict(cpu) i restrict(amp) . |
Funkcja musi stosować się do ograniczeń zarówno restrict(cpu) , jak i restrict(amp) . Funkcja może być wywołana przez funkcje, które są zadeklarowane przy użyciu restrict(cpu) , restrict(amp) , restrict(cpu, amp) lub restrict(amp, cpu) .Postać restrict(A) restrict(B) może być zapisana jako restrict(A,B) . |
Uwagi
Słowo restrict
kluczowe jest kontekstowym słowem kluczowym. Specyfikatory ograniczeń cpu
i amp
nie są słowami zarezerwowanymi. Lista specyfikatorów nie jest rozszerzalna. Funkcja, która nie ma klauzuli restrict
, jest taka sama jak funkcja, która ma klauzulę restrict(cpu)
.
Funkcja z klauzulą restrict(amp)
ma następujące ograniczenia:
Funkcja może wywołać tylko funkcje z klauzulą
restrict(amp)
.Funkcja musi być możliwa do wbudowania.
Funkcja może deklarować tylko
int
zmienne ,unsigned int
,float
idouble
oraz klasy i struktury, które zawierają tylko te typy.bool
jest również dozwolone, ale musi być wyrównany 4-bajtowy, jeśli używasz go w typie złożonym.Funkcje lambda nie mogą przechwytywać poprzez odwołanie i nie mogą przechwytywać wskaźników.
Odwołania i wskaźniki pojedynczego pośrednictwa są obsługiwane tylko jako zmienne lokalne, argumenty funkcji i typy zwracane.
Nie są dozwolone:
Rekursja.
Zmienne zadeklarowane za pomocą słowa kluczowego volatile .
Funkcje wirtualne.
Wskaźniki do funkcji.
Wskaźniki do funkcji członkowskich.
Wskaźniki w strukturach.
Wskaźniki do wskaźników.
goto
Instrukcji.Instrukcje oznaczone.
try
, ,catch
lubthrow
instrukcje.Zmienne globalne.
Zmienne statyczne. Zamiast tego użyj słowa kluczowego tile_static.
dynamic_cast
Rzuca.Operator
typeid
.Deklaracje asm.
Elementy vararg.
Aby zapoznać się z omówieniem ograniczeń funkcji, zobacz ograniczenia ograniczeń(amp).
Przykład
W poniższym przykładzie pokazano, jak używać klauzuli restrict(amp)
.
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();
}
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla