다음을 통해 공유


restrict (C++ AMP)

제한 지정자는 함수 및 람다 선언에 적용할 수 있습니다. 제한 지정자는 C++ AMP(C++ Accelerated Massive Parallelism) 런타임을 사용하는 응용 프로그램의 함수 동작 및 함수의 코드에 제한을 적용합니다.

참고

__declspec 저장소 클래스 특성의 일부분인 restrict 키워드에 대한 자세한 내용은 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 키워드는 컨텍스트 키워드입니다. 제한 지정자인 cpu 및 amp는 예약어가 아닙니다. 지정자 목록은 확장할 수 없습니다. restrict 절이 없는 함수는 restrict(cpu) 절이 있는 함수와 같습니다.

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

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

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

  • 이 함수는 int, unsigned int, float 및 double 변수와 이러한 형식을 포함하는 클래스 및 구조체만 선언할 수 있습니다. bool도 사용 가능하지만 복합 형식에서 사용하는 경우 4바이트로 맞춰야 합니다.

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

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

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

    • 재귀

    • volatile 키워드로 선언된 변수

    • 가상 함수

    • 함수에 대한 포인터

    • 멤버 함수에 대한 포인터

    • 구조체의 포인터

    • 포인터에 대한 포인터

    • 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)