limiti AMP (C++)
L'identificatore di restrizione può essere applicato da eseguire e dichiarazioni di lambda.Applica restrizioni sul codice della funzione e il comportamento della funzione nelle applicazioni che utilizzano il runtime massicce di parallelismo con accelerazione C++ (AMP C++).
[!NOTA]
Per informazioni sulla parola chiave restrict che fa parte degli attributi della classe di archiviazione __declspec, vedere restrict.
La clausola restrict accetta i seguenti formati:
Clausola |
Descrizione |
---|---|
restrict(cpu) |
La funzione può utilizzare il linguaggio completo di C++.Solo altre funzioni che vengono dichiarate utilizzando limitano le funzioni (CPU) possono chiamare la funzione. |
restrict(amp) |
La funzione può utilizzare solo un sottoinsieme del linguaggio C++ a l AMP C++ è possibile velocizzare. |
Una sequenza restrict(cpu) e restrict(amp). |
La funzione deve rispettare le limitazioni restrict(cpu)restrict(amp).La funzione può essere chiamata da funzioni che vengono dichiarate utilizzando restrict(cpu), restrict(amp), restrict(cpu, amp), o restrict(amp, cpu). Il form restrict(A) restrict(B) può essere scritta come restrict(A,B). |
Note
La parola chiave restrict è una parola chiave contestuale.Gli identificatori, cpu e amp di restrizione non sono parole riservate.L'elenco degli identificatori non è estensibile.Una funzione che non contenga una clausola restrict è uguale a funzione con la clausola restrict(cpu).
Una funzione con la clausola restrict(amp) presenta le seguenti limitazioni:
La funzione può chiamare solo le funzioni con la clausola restrict(amp).
La funzione deve essere inlinable.
La funzione può dichiarare solo int, unsigned int, floate variabili double e classi e strutture che contengono solo questi tipi.bool viene consentito, ma deve essere 4 byte- allineati se utilizzata in un tipo composto.
Le funzioni lambda non possono acquisire da di riferimento e non possono acquisire i puntatori.
I riferimenti e i puntatori di un singolo riferimento indiretto sono supportati solo come variabili locali, gli argomenti della funzione e tipi restituiti.
Di seguito non sono consentiti:
Ricorsione.
Variabili dichiarate con la parola chiave volatile.
Funzioni virtuali.
Puntatori a funzioni.
Puntatori a funzioni membro.
Puntatori in strutture.
Puntatori ai puntatori.
Istruzioni digoto.
Istruzioni contrassegnati.
try, catch, o istruzioni throw.
Variabili globali.
Variabili statiche.In alternativa, utilizzare parola chiave tile_static.
Cast didynamic_cast.
Operatore typeid.
dichiarazioni di listato ASM.
Varargs.
Per informazioni sulle limitazioni di funzione, vedere limitare le restrizioni (amp).
Esempio
Di seguito viene illustrato come utilizzare la clausola 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();
}