limitado (AMP de C++)

El especificador de la restricción se puede aplicar para trabajar y declaraciones lambda.Impone restricciones en el código de la función y en el comportamiento de la función en aplicaciones que utilizan C++ acelerado runtime de Massive Parallelism (AMP de C++).

[!NOTA]

Para obtener información sobre la palabra clave restrict que forma parte de los atributos de clase de almacenamiento __declspec , vea restrict.

La cláusula restrict toma los formatos siguientes:

Cláusula

Descripción

restrict(cpu)

La función puede usar el lenguaje completo de C++.Sólo otras funciones declaradas mediante las funciones limitadas (CPU) pueden llamar a la función.

restrict(amp)

La función puede utilizar el subconjunto del lenguaje C++ que el AMP de C++ puede acelerar.

Una secuencia restrict(cpu) y restrict(amp).

La función debe observar las limitaciones restrict(cpu) y restrict(amp).La función puede llamar a las funciones declaradas mediante restrict(cpu), restrict(amp), restrict(cpu, amp), o restrict(amp, cpu).

El formulario restrict(A) restrict(B) puede escribirse como restrict(A,B).

Comentarios

La palabra clave restrict es una palabra clave contextual.Los especificadores, cpu y amp de restricción no son palabras reservadas.La lista de especificadores no es extensible.Una función que no tiene una cláusula restrict es igual que una función con la cláusula restrict(cpu) .

Una función que tiene la cláusula restrict(amp) tiene las siguientes limitaciones:

  • La función puede llamar a funciones con la cláusula restrict(amp) .

  • La función debe ser inlinable.

  • La función puede declarar únicamente int, unsigned int, float, y las variables double , y las clases y estructuras que sólo contienen estos tipos.bool también se permite, pero debe ser 4 byte- alineado si lo utiliza en un tipo compuesto.

  • Las funciones lambda no pueden capturar por referencia y no pueden capturar punteros.

  • Las referencias y los punteros de solo- direccionamiento indirecto solo se admiten como variables locales, argumentos de función, y tipos de valor devuelto.

  • Los siguientes no se permiten:

    • Recursividad.

    • Variables declaradas con la palabra clave volatile .

    • Funciones virtuales.

    • Punteros a funciones.

    • Punteros a funciones miembro.

    • Punteros en estructuras.

    • Punteros a punteros.

    • Instrucciones degoto .

    • Instrucciones etiquetadas.

    • try, catch, o instrucciones throw .

    • Variables globales.

    • Variables estáticas.Utilice palabra clave tile_static en su lugar.

    • Conversiones dedynamic_cast .

    • Operador typeid.

    • declaraciones asm.

    • Varargs.

Para obtener una descripción de las limitaciones de la función, vea (amp) Restricciones limitado.

Ejemplo

El ejemplo siguiente se muestra cómo utilizar la cláusula 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(); 

}

Vea también

Otros recursos

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