restrita (C++ AMP)
O especificador de restrição pode ser aplicado a declarações de função e lambda. Impõe restrições no código na função e no comportamento da função em aplicativos que usam o runtime do C++ Accelerated Massive Parallelism(AMP C++).
Observação
Para obter informações sobre a palavra-chave restrict
que faz parte dos atributos de classe de armazenamento __declspec
, confira restrict.
A cláusula restrict
usa os seguintes formas:
Cláusula | Descrição |
---|---|
restrict(cpu) |
A função pode usar a linguagem C++ completa. Somente outras funções que são declaradas usando as funções restrict(cpu) podem chamar a função. |
restrict(amp) |
A função só pode usar o subconjunto da linguagem C++ que o AMP C++ pode acelerar. |
Uma sequência de restrict(cpu) e restrict(amp) . |
A função deve atender às limitações de restrict(cpu) e restrict(amp) . A função pode ser chamada por funções que são declaradas usando restrict(cpu) , restrict(amp) , restrict(cpu, amp) ou restrict(amp, cpu) .A forma restrict(A) restrict(B) pode ser escrita como restrict(A,B) . |
Comentários
A palavra-chave restrict
é uma palavra-chave contextual. Os especificadores de restrição cpu
e amp
não são palavras reservadas. A lista de especificadores não é extensível. Uma função que não tem uma cláusula restrict
é igual a uma função que tem a cláusula restrict(cpu)
.
Uma função que tem a cláusula restrict(amp)
tem as seguintes limitações:
A função só pode chamar funções que tenham a cláusula
restrict(amp)
.A função deve ser embutível.
A função pode declarar somente as variáveis
int
,unsigned int
,float
edouble
, e classes e estruturas que contenham apenas esses tipos.bool
também é permitido, mas também deve ser alinhado com 4 bytes se você usá-lo em um tipo composto.As funções lambda não podem capturar por referência nem capturar os ponteiros.
As referências e ponteiros de indireção única só têm suporte como variáveis locais, argumentos de função e tipos de retorno.
Os seguintes não são permitidos:
Recursão.
Variáveis declaradas com a palavra-chave volatile.
Funções virtuais.
Ponteiros para funções.
Ponteiros para funções de membro.
Ponteiros em estruturas.
Ponteiros para ponteiros.
Instruções
goto
.Instruções rotuladas.
Instruções
try
,catch
outhrow
.Variáveis globais.
Variáveis estáticas. Use tile_static palavra-chave.
Conversões
dynamic_cast
.O operador
typeid
.Declarações asm.
Varargs.
Para uma descrição das limitações da função, confira Restrições de restrict(amp).
Exemplo
O exemplo a seguir mostra como usar a 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();
}
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de