Partager via


restrict (C++ AMP)

Le spécificateur de restriction peut être appliqué aux déclarations de fonctions et lambda. Il applique des restrictions au code dans la fonction et sur le comportement de cette fonction dans les applications qui utilisent le runtime C++ Accelerated Massive Parallelism (C++ AMP).

Remarque

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

La restrict clause prend les formes suivantes :

Clause Description
restrict(cpu) La fonction peut utiliser le langage C++ complet. Seules les autres fonctions déclarées en utilisant des fonctions restrict(cpu) peuvent appeler la fonction.
restrict(amp) La fonction peut uniquement utiliser le sous-ensemble du langage C++ que C++ AMP peut accélérer.
Séquence de clauses restrict(cpu) et restrict(amp) La fonction doit adhérer aux limitations des clauses restrict(cpu) et restrict(amp). La fonction peut être appelée par les fonctions déclarées au moyen de restrict(cpu), restrict(amp), restrict(cpu, amp) ou restrict(amp, cpu).

L'expression restrict(A) restrict(B) peut être écrite restrict(A,B).

Notes

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

Une fonction qui possède la clause restrict(amp) présente les limitations suivantes :

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

  • La fonction doit être en mesure d'être inline.

  • La fonction peut déclarer uniquement int, unsigned int, floatet variables, et double classes et structures qui contiennent uniquement ces types. bool est également autorisé, mais il doit être aligné sur 4 octets si vous l’utilisez dans un type composé.

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

  • Les références et les pointeurs à une seule indirection sont pris en charge uniquement en tant que variables locales, arguments de fonction ou types de retour.

  • Les éléments suivants ne sont pas autorisés :

    • récurrence,

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

    • fonctions virtuelles,

    • pointeurs désignant des fonctions,

    • pointeurs désignant des fonctions membres,

    • pointeurs dans des structures,

    • pointeurs désignant des pointeurs,

    • Instructionsgoto .

    • instructions étiquetées,

    • try, catchou throw instructions.

    • Variables globales.

    • variables statiques Utilisez à la place tile_static mot clé .

    • dynamic_cast Jette.

    • opérateur typeid,

    • déclarations asm,

    • varargs.

Pour une discussion sur les limitations de fonction, consultez les restrictions de restriction (amp) .

Exemple

L’exemple suivant montre comment utiliser la restrict(amp)clause.

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

C++ AMP (Parallélisme Massif Accéléré en C++)