restringir (C++ AMP)
O especificador de restrição pode ser aplicado para funções e declarações de método.Impor restrições no código na função e comportamento de função em aplicativos que usam o tempo de execução maciço acelerado C++ de paralelismo (AMP C++).
Observação |
---|
Para obter informações sobre a palavra-chave de restrict que é parte dos atributos de armazenamento classe de __declspec , consulte restrict. |
A cláusula de restrict utiliza os seguintes formas:
cláusula |
Descrição |
---|---|
restrict(cpu) |
A função pode usar o idioma completo C++.Somente outras funções que são declaradas usando restringe as funções (processador central) podem chamar a função. |
restrict(amp) |
A função pode usar o subconjunto de linguagem C++ que o AMP C++ pode acelerar. |
uma seqüência de restrict(cpu) e de restrict(amp). |
A função deve aderir as restrições de restrict(cpu) e de restrict(amp).A função pode ser chamada pelas funções que são declaradas usando restrict(cpu), restrict(amp), restrict(cpu, amp), ou restrict(amp, cpu). O formulário restrict(A) restrict(B) pode ser escrito como restrict(A,B). |
Comentários
A palavra-chave de restrict é uma palavra-chave contextual.Os especificadores cpu , e amp de restrição não são palavra reservada.A lista de especificadores não é extensível.Uma função que não tem uma cláusula de restrict é a mesma que uma função que tem a cláusula de restrict(cpu) .
Uma função que tem a cláusula de restrict(amp) tem as seguintes restrições:
a função pode chamar somente as funções que têm a cláusula de restrict(amp) .
a função deve ser inlinable.
A função pode declarar apenas int, unsigned int, float, e variáveis de double , e estruturas e classes que contêm apenas esses tipos.bool é permitido, mas também deve ser 4 bytes alinhados se usá-la em um tipo composto.
As funções Lambda não pode capturar por referência e não pode capturar ponteiros.
As referências e ponteiros de única indireção são suportados apenas 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 de temporário .
funções virtuais.
Ponteiros para funções.
Ponteiros para funções de membro.
Ponteiros estruturas.
Ponteiros para ponteiros.
instruções degoto .
Instruções rotuladas.
try, catch, ou instruções de throw .
variáveis globais.
Variáveis estáticas.Use tile_static palavra-chave em vez disso.
conversões dedynamic_cast .
o operador de typeid .
declarações de ASM.
Varargs.
Para uma discussão sobre limitações de função, consulte restringir (limitações de amp).
Exemplo
O exemplo a seguir mostra como usar a cláusula de 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();
}