Поделиться через


ограничьте AMP (C++)

Описатель ограничения могут применяться для объявления функций и лямбда-выражения.Он обеспечивает ограничения в коде в функции и расширения функциональности функций в приложениях, использующих C++ ускорять throw массивнейшая среда выполнения параллелизма (C++ AMP).

ПримечаниеПримечание

Дополнительные сведения о ключевом слове, которое является частью restrict атрибутов хранени- класса __declspec см. в разделе restrict.

Предложение restrict принимает следующие формы:

Предложение

Описание

restrict(cpu)

Функция может использовать общий язык C++.Только другие функции, объявленные с помощью ограничивают функции (цп). могут вызывать функцию.

restrict(amp)

Функция может использоваться только подмножество языка C++, C++ AMP может ускорения выполнения.

Последовательность restrict(cpu) и restrict(amp).

Функция должна соответствовать ограничениям как restrict(cpu), так и restrict(amp).Функция может быть называется функциями, которые объявлены с помощью restrict(cpu), restrict(amp), restrict(cpu, amp) или restrict(amp, cpu).

Форма restrict(A) restrict(B) может быть записано как restrict(A,B).

Заметки

Ключевое слово restrict контекстно-зависимое ключевое слово.Описатели, cpu и amp ограничения не зарезервированных слов.Список описателей не является расширяемым.Функция, которая не содержит предложение restrict это функция, которая присутствует предложение restrict(cpu).

Функция, которая присутствует предложение restrict(amp) имеет следующие ограничения.

  • Функция может вызвать только функции, которые содержат предложение restrict(amp).

  • Функция должна быть inlinable.

  • Функция может объявить только int, unsigned int, float и переменные double и классы и структуры, содержащие только эти типы.bool также разрешено, однако оно должно быть байт- выравниванным 4 при использовании его в составном типе.

  • Лямбда-функции, не могут фиксировать по ссылке и не могут захватить указатели.

  • Ссылки и указатели единый- косвенного обращения поддерживаются только как локальные переменные, аргументы и возвращаемые типы.

  • Не разрешены следующие:

    • Рекурсия.

    • Переменные, объявленные с помощью ключевого слова временный.

    • Виртуальные функции.

    • Указатели на функции.

    • Указатели на функции-членам.

    • Указатели в макете.

    • Указатели к указателям.

    • Выписки переход.

    • Заданные выписки.

    • try, catch или выписки throw.

    • Глобальные переменные.

    • Статические переменные.Взамен рекомендуется использовать tile_static ключевое слово.

    • Cast dynamic_cast.

    • Оператор typeid.

    • объявления asm.

    • Varargs.

Описание ограничений функции см. в разделе ограничьте ограничения (amp).

Пример

В следующем примере показано, как использовать предложение 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(); 

}

См. также

Другие ресурсы

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