restrict (C++ AMP)

제한 지정자는 함수 및 람다 선언에 적용할 수 있습니다. 제한 지정자는 C++ AMP(C++ Accelerated Massive Parallelism) 런타임을 사용하는 애플리케이션의 함수 동작 및 함수의 코드에 제한을 적용합니다.

참고 항목

스토리지 클래스 특성의 restrict__declspec 일부인 키워드(keyword) 대한 자세한 내용은 restrict을 참조하세요.

절은 restrict 다음 형식을 사용합니다.

설명
restrict(cpu) 이 함수는 전체 C++ 언어를 사용할 수 있습니다. restrict(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 키워드(keyword) 상황별 키워드(keyword). 제한 지정자인 cpuamp는 예약어가 아닙니다. 지정자 목록은 확장할 수 없습니다. 절이 없는 restrict 함수는 절이 있는 restrict(cpu) 함수와 동일합니다.

restrict(amp) 절이 있는 함수에는 다음 제한이 적용됩니다.

  • 이 함수는 restrict(amp) 절이 포함된 함수만 호출할 수 있습니다.

  • 함수 인라이닝 처리 가능해야 합니다.

  • 함수는 이러한 형식만 포함하는 클래스 floatunsigned intdouble 구조체와, 변수만 int선언할 수 있습니다. bool 은(는) 허용되지만 복합 형식으로 사용하는 경우 4 바이트 정렬이어야 합니다.

  • 람다 함수는 참조로 캡처할 수 없으며 포인터를 캡처할 수 없습니다.

  • 참조 및 단일 간접 포인터는 로컬 변수, 함수 인수 및 반환 형식으로만 지원됩니다.

  • 다음은 허용되지 않습니다.

    • 재귀

    • 휘발성 키워드(keyword) 사용하여 선언된 변수입니다.

    • 가상 함수

    • 함수에 대한 포인터

    • 멤버 함수에 대한 포인터

    • 구조체의 포인터

    • 포인터에 대한 포인터

    • goto 문을.

    • 레이블 문

    • try, catch또는 throw 문입니다.

    • 전역 변수

    • 정적 변수 대신 tile_static 키워드를 사용합니다.

    • dynamic_cast 캐스트.

    • typeid 연산자

    • asm 선언

    • vararg

함수 제한에 대한 자세한 내용은 restrict(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)