Condividi tramite


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(); 

}

Vedere anche

Altre risorse

C++ AMP (C++ Accelerated Massive Parallelism)