Partilhar via


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çãoObservaçã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(); 

}

Consulte também

Outros recursos

AMP C++ (C++ acelerado paralelismo maciço)