限制(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(); 

}

请参见

其他资源

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