다음을 통해 공유


accelerator 및 accelerator_view 개체 사용

사용할 수 있는 가속기accelerator_view 장치 또는 에뮬레이터 AMP C++ 코드가 실행 되도록 지정 하는 클래스.시스템에는 여러 장치 또는 다른 양의 메모리를 지원 또는 이중 정밀도 지원 디버깅 에뮬레이터 있을 수 있습니다.C + + 가속 대규모 병렬 (C++ AMP) 사용할 액셀러레이터, 기본값으로 설정 parallel_for_each 여러 번 호출에 대 한 여러 액셀러레이터 키 지정 살펴보고 특별 한 디버깅 작업을 수행 하는 데 사용할 수 있는 Api를 제공 합니다.

기본 가속기를 사용 하 여

하나를 선택 하는 코드를 작성 하지 않는 경우 기본 가속기, AMP C++ 런타임을 선택 합니다.런타임에서 다음과 같이 기본 액셀러레이터 키를 선택합니다.

  1. 응용 프로그램이 디버그 모드에서 실행 되 고 있으면 액셀러레이터는 디버깅 지원 합니다.

  2. 그렇지 않은 경우 설정 되어 있으면 CPPAMP_DEFAULT_ACCELERATOR 환경 변수로 지정 된 액셀러레이터 키입니다.

  3. 그렇지 않으면 에뮬레이트되지 않는 장치입니다.

  4. 그렇지 않으면 가장 많은 메모리를 사용할 수 있는 장치입니다.

  5. 그렇지 않은 경우 디스플레이에 연결 되어 있지 않은 장치입니다.

기본 가속기를 구성 하 고 해당 속성을 검사 하 여 기본 가속기의 속성을 확인할 수 있습니다.다음 코드 예제에서는 경로, 메모리 및 이중 정밀도 지원 기본 가속기를 인쇄합니다.

void default_properties() {
    accelerator default_acc;
    std::wcout << default_acc.device_path << "\n";
    std::wcout << default_acc.dedicated_memory << "\n";
    std::wcout << (default_acc.supports_double_precision ? 
        "double precision: true" : "double precision: false") << "\n";
}

Hh873132.collapse_all(ko-kr,VS.110).gifCPPAMP_DEFAULT_ACCELERATOR 환경 변수

지정 하는 CPPAMP_DEFAULT_ACCELERATOR 환경 변수를 설정할 수 있는 accelerator::device_path 기본 가속기.경로 하드웨어에 따라 다릅니다.다음 코드 사용 하 여 accelerator::get_all 사용할 액셀러레이터 키 목록을 검색 하 고 각 액셀러레이터 키의 경로 표시 하는 함수입니다.

void list_all_accelerators()
{
    std::vector<accelerator> accs = accelerator::get_all();
    for (int i = 0; i < accs.size(); i++) {
        std::wcout << accs[i].device_path << "\n";
        std::wcout << accs[i].dedicated_memory << "\n";
        std::wcout << (accs[i].supports_double_precision ? 
            "double precision: true" : "double precision: false") << "\n";    
    }
}

액셀러레이터 키를 선택합니다.

액셀러레이터 키를 선택할 수 있는 accelerator::get_all 메서드를 사용할 수 있는 액셀러레이터 키 목록을 검색 하 고 하나를 선택 하려면 해당 속성에 기반 합니다.이 예제에서는 가장 많은 메모리를 가진 가속기를 선택 하는 방법을 보여 줍니다.

void pick_with_most_memory()
{
    std::vector<accelerator> accs = accelerator::get_all();
    accelerator acc_chosen = accs[0];
    for (int i = 0; i < accs.size(); i++) {
        if (accs[i].dedicated_memory > acc_chosen.dedicated_memory) {
            acc_chosen = accs[i];
        }
    }

    std::wcout << "The accelerator with the most memory is "  
        << acc_chosen.device_path << "\n"
        << acc_chosen.dedicated_memory << ".\n";
}

[!참고]

반환 되는 액셀러레이터 키 중 하나가 accelerator::get_all CPU 가속기입니다.CPU 가속기의 코드를 실행할 수 없습니다.CPU 액셀러레이터를 필터링 하려면 값을 비교는 device_path 속성에 의해 반환 되는 가속기 accelerator::get_all 의 값은 accelerator::cpu_accelerator.자세한 내용은이 문서의 "특정 바로 가기 키" 섹션을 참조 하십시오.

기본 액셀러레이터 키를 변경합니다.

기본 가속기를 호출 하 여 변경할 수 있는 accelerator::set_default 메서드.GPU에서 임의의 코드를 실행 하기 전에 당 응용 프로그램 실행 하 고 변경 해야 하면 기본 액셀러레이터 키를 변경할 수 있습니다.액셀러레이터 키를 변경 하려면 모든 후속 함수 호출 반환 false.여러 액셀러레이터 키를 호출 하는 데 사용 하려는 경우 parallel_for_each, "여러 액셀러레이터를 사용 하 여" 섹션에서이 문서를 읽을 합니다.다음 코드 예제에서는 기본 가속기 에뮬레이션 되지 않습니다, 표시에 연결 되어 있지 않은 및 배정밀도 지원 하나를 설정 합니다.

bool pick_accelerator()
{
    std::vector<accelerator> accs = accelerator::get_all();
    accelerator chosen_one;

    auto result = 
        std::find_if(accs.begin(), accs.end(), [] (const accelerator& acc)
    {
        return !acc.is_emulated && 
            acc.supports_double_precision && 
            !acc.has_display;
    });

    if (result != accs.end())
        chosen_one = *(result);

    std::wcout << chosen_one.description << std::endl;

    bool success = accelerator::set_default(chosen_one.device_path);
    return success;
}

여러 액셀러레이터 키를 사용합니다.

여러 액셀러레이터 키 응용 프로그램에서 사용 하는 두 가지 방법이 있습니다.

  • 전달 하 여 accelerator_view 개체를 호출 하 여 parallel_for_each 메서드.

  • 생성할 수 있습니다는 array 를 사용 하 여 특정 개체 accelerator 개체입니다.런타임에 C + AMP를 가져옵니다는 accelerator_view 개체는 캡처된에서 array 람다 식에 대 한 개체.

특수 액셀러레이터 키

세 가지 특수 가속기 장치 경로 속성으로 사용할 수 있는 accelerator 클래스:

  • accelerator::direct3d_ref 데이터 멤버:이 단일 스레드 가속기 일반 그래픽 카드 에뮬레이트할 CPU의 소프트웨어를 사용 합니다.디버깅 하는 데 기본적으로 사용 됩니다 있지만 하드웨어 가속기 보다 느리므로 프로덕션 환경에서 유용 하 게 됩니다.또한 DirectX SDK와 Windows SDK만 가능 하 고 고객의 컴퓨터에 설치할 수 있습니다.자세한 내용은 GPU 코드 디버깅를 참조하십시오.

  • accelerator::direct3d_warp 데이터 멤버:이 가속기 스트리밍 SIMD 확장 (SSE)을 사용 하는 멀티 코어 Cpu를 AMP C++ 코드를 실행 하는 데는 대체 솔루션을 제공 합니다.

  • accelerator::cpu_accelerator 데이터 멤버이 액셀러레이터 키: 배열 준비를 설정 하는 데 사용할 수 있습니다.그 AMP C++ 코드를 실행할 수 없습니다.자세한 내용은 AMP C++ 배열 준비 블로그를 네이티브 코드에서 병렬 프로그래밍에 게시.

상호 운용성

AMP C++ 런타임 간의 상호 운용성 지원의 accelerator_view 클래스와 direct3d는 ID3D11Device 인터페이스.Create_accelerator_view 메서드는 IUnknown 인터페이스와 반환 된 accelerator_view 개체.Get_device 메서드는 accelerator_view 반환 하 고 개체는 IUknown 인터페이스입니다.

참고 항목

참조

accelerator 클래스

accelerator_view 클래스

기타 리소스

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

GPU 코드 디버깅