restrict (C++ AMP)
Спецификатор ограничения может применяться к объявлениям функций и лямбда-выражений. Он реализует ограничения на код функции и на ее поведение в приложениях, в которых используется среда выполнения C++ AMP.
Примечание.
Сведения о restrict
ключевое слово, которая является частью __declspec
атрибутов класса хранилища, см. в разделе "Ограничение".
Предложение restrict
принимает следующие формы:
Предложение | Description |
---|---|
restrict(cpu) |
В функции могут использоваться все возможности языка C++. Вызывать ее могут только другие функции, объявленные с помощью функции restrict(cpu). |
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)
.Функция должна поддерживать подстановку.
Функция может объявлять только
int
unsigned int
переменные иfloat
переменные, аdouble
также классы и структуры, содержащие только эти типы.bool
также допускается, но он должен быть выровнен по 4 байтам, если он используется в составном типе.Лямбда-функции не могут захватывать по ссылке и не могут захватывать указатели.
Указатели с одним косвенным обращением и ссылки поддерживаются только как локальные переменные, аргументы функций и типы возвращаемых значений.
Следующие возможности не допускаются:
Рекурсия.
Переменные, объявленные с переменным ключевое слово.
Виртуальные функции.
Указатели на функции.
Указатели на функции-члены.
Указатели в структурах.
Указатели на указатели.
Инструкции
goto
.Операторы с метками.
try
,catch
илиthrow
операторы.Глобальные переменные.
Статические переменные. Вместо этого используйте ключевое слово tile_static.
dynamic_cast
Бросает.Оператор
typeid
.Объявления asm.
Использование vararg.
Обсуждение ограничений функций см. в разделе "Ограничения (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();
}
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по