Partager via


limitez (C++ ampère)

Le spécificateur de restriction peut être appliqué à exécuter et des déclarations de lambda.Il applique des restrictions au code dans la fonction et le comportement de la fonction dans les applications qui utilisent le runtime massif du parallélisme accéléré par C++ (C++ ampère).

[!REMARQUE]

Pour plus d'informations sur le mot clé d' restrict qui fait partie des attributs de classe de stockage d' __declspec , consultez restrict.

La clause d' restrict prend les formes suivantes :

Clause

Description

restrict(cpu)

La fonction peut utiliser le langage complet C++.Seuls les autres fonctions à l'aide de sont déclarés restreignent les fonctions (UC) peuvent appeler la fonction.

restrict(amp)

La fonction peut uniquement utiliser le sous-ensemble du langage C++ que C++ ampère peut accélérer.

Une séquence d' restrict(cpu) et d' restrict(amp).

La fonction doit respecter les limitations d' restrict(cpu) et d' restrict(amp).La fonction peut être appelée par les fonctions déclarées à l'aide de restrict(cpu), d' restrict(amp), d' restrict(cpu, amp), ou d' restrict(amp, cpu).

Le formulaire restrict(A) restrict(B) peut être écrite comme restrict(A,B).

Notes

Le mot clé d' restrict est un mot clé contextuel.Les spécificateurs, cpu et amp de restriction ne sont pas des mots réservés.La liste des spécificateurs n'est pas extensible.Une fonction qui n'a pas une clause d' restrict est identique à une fonction qui a la clause d' restrict(cpu) .

Une fonction qui a la clause d' restrict(amp) présente les limitations suivantes :

  • La fonction peut appeler uniquement les fonctions qui possèdent la clause d' restrict(amp) .

  • La fonction doit être inlinable.

  • La fonction peut déclarer uniquement int, unsigned int, float, et les variables d' double , et des classes et des structures contenant uniquement les types.bool est également autorisée, mais il doit être de 4 octet- alignés si vous l'utilisez dans un type composite.

  • Les fonctions lambda ne peuvent pas de capturer par référence et ne peuvent pas capturer des pointeurs.

  • Les références et les pointeurs à un pointeur en charge uniquement en tant que variables locales, arguments de fonction, et types de retour.

  • N'est pas autorisé ce qui suit :

    • Récursivité.

    • Variables déclarées avec le mot clé volatile.

    • Fonctions virtuelles.

    • Pointeurs vers des fonctions.

    • Pointeurs vers des fonctions membres.

    • Pointeurs dans les structures.

    • Pointeurs vers des pointeurs.

    • Instructions d'goto .

    • Instructions étiquetées.

    • try, catch, ou instructions d' throw .

    • Variables globales.

    • Variables statiques.Utilisez plutôt mot clé tile_static.

    • Casts d'dynamic_cast .

    • Opérateur typeid.

    • déclarations ASM.

    • Varargs.

Pour une présentation des limitations de fonction, consultez limitez les restrictions (ampère).

Exemple

l'exemple suivant montre comment utiliser la clause d' 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(); 

}

Voir aussi

Autres ressources

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