限制(C++ AMP)
限制说明符可应用于函数和 lambda 说明。 它强制限制对在函数代码和函数的行为在使用加速的 C++ 大并行的应用程序 (C++ AMP) 运行时。
备注
有关是 __declspec 存储类的属性的 restrict 关键字的信息,请参见 restrict。
restrict 子句采用以下形式:
子句 |
描述 |
---|---|
restrict(cpu) |
函数可以使用完全的 C++ 语言。 声明的其他功能限制 (cpu) 功能可以调用函数。 |
restrict(amp) |
函数只能使用 C++ AMP 可以加快 C++ 语言的子集。 |
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 字节对齐,则可以在复合类型使用它。
Lambda 函数无法获取对的引用并不能捕获指针。
引用,并且单间接指针仅支持为局部变量,函数参数,并返回类型。
以下不允许:
递归。
声明的变量 volatile 关键字。
虚函数。
指向函数的指针。
指向成员函数的指针。
在结构的指针。
为指针的指针。
goto 语句。
labeled 语句。
try、catch或 throw 语句。
全局变量。
静态变量。 请改用 tile_static关键字。
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();
}