ограничьте 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();
}