NavData 생성 병렬화

NavData 생성 시스템은 넓은 지세에서도 프로덕션 워크플로우나 파이프라인에 생성 횟수로 인해 문제가 발생하지 않을 만큼 빠르게 작동하도록 설계되었습니다. 하지만 항상 더 빠르게 작동할 수 있습니다. 이 때문에 시스템은 다중 프로세서에서 생성 프로세스의 일부를 평행으로 실행할 수 있는 기능을 제공합니다.

Gameware Navigation은 Intel의 오픈 소스 TBB(Threaded Building Blocks) 라이브러리를 사용하여 호스트 시스템의 다중 코어에서 PathData를 생성할 수 있는 기능을 기본적으로 제공합니다. NavData 생성 시스템의 API를 사용자 고유의 도구에 통합하면 다양한 타사 유틸리티를 사용하도록 프레임워크를 확장하여 평행 계산을 관리할 수 있습니다.

원칙적으로 다중 코어를 통해 생성 프로세스를 분할하면 사용 가능한 코어 수에 정비례하게 생성 시간을 줄일 수 있습니다. 실제로는 NavData 생성 시 병렬화되지 않은 사전 처리 및 사후 처리 단계로 인해 시간이 다소 더 걸립니다. 어느 경우든지, 특히 넓은 지세에서 평행 계산을 사용할 때 속도 면에서 크게 향상된다는 것을 알 수 있습니다.

다중 프로세서에서 생성하는 방법

다중 프로세서 사용과 관련된 단계 및 고려 사항은 NavData 생성 시스템의 Navigation Lab 또는 API를 사용하는지 여부에 따라 약간 다릅니다.

Navigation Lab 사용

다중 프로세서 생성은 Navigation Lab에서 기본적으로 활성화되어 있습니다.

Navigation Lab의 다중 프로세서에서 NavData의 생성을 활성화하거나 비활성화하려면

  1. Generation 창에서 Run 그룹을 확장합니다.
  2. Use multi-core 확인란을 선택하거나 선택 취소합니다.

Navigation Lab은 내부적으로 TBB를 사용하여 컴퓨터에서 사용 가능한 모든 프로세서에 걸쳐 NavData 생성 작업을 배포합니다.

다중 코어 지원은 독립 실행형 도구의 릴리스 빌드에서만 사용할 수 있습니다. TBB 디버그 빌드는 매우 느리게 실행되므로 독립 실행형 도구의 디버그 빌드는 TBB를 사용하지 않고 항상 단일 프로세서에서 순서대로 NavData를 생성합니다.

TBB를 통해 C++에서 Generator 사용

통합 단계 6: NavData 생성 API 사용에서 지정한 NavData 생성 시스템의 API를 통합하는 지침을 수행한 경우 이미 TbbParallelForInterface 클래스를 통해 TBB를 사용하도록 설정한 것입니다.

참고:

  • TbbParallelForInterface 클래스는 릴리스 빌드에서 계산 작업을 배포하는 데에만 TBB를 사용합니다. TBB 디버그 빌드는 매우 느리게 실행되므로 디버그 빌드의 TbbParallelForInterface는 TBB를 사용하지 않고 항상 단일 프로세서에서 순서대로 NavData를 생성합니다.
  • GeneratorInputOutput::m_runOptions를 통해 액세스할 수 있는 GeneratorRunOptions 오브젝트에서 다음을 확인합니다.

    • GeneratorRunOptions::m_doMultiCore 클래스 구성원 값이 true로 설정되어 있습니다(기본값).
    • GeneratorRunOptions가 중간 파일을 생성하지 않도록 구성되어 있습니다(기본값). 중간 파일이 필요할 경우 평행화는 자동으로 비활성화됩니다.

사용자 정의 인터페이스를 통해 C++에서 Generator 사용

사용자 정의 유틸리티를 사용하여 평행 계산을 관리하려면

  1. IParallelForInterface 클래스의 사용자 정의 구현을 작성합니다. 사용자 클래스는 Generator에서 작업을 받은 다음 이러한 각 작업이 수행되도록 평행 시스템 처리를 담당합니다.

    자세한 내용은 IParallelForInterface 클래스 설명을 참조하십시오. 또한 TbbParallelForInterface 구현을 위한 전체 소스 코드가 제공되므로 이 구현을 자체 클래스의 모델로 사용할 수 있습니다.

  2. NavData 생성 코드에서 Generator를 만들기 전에 IParallelForInterface 클래스의 인스턴스를 만들고 Generator를 구성할 때 매개변수로 전달합니다.
  3. GeneratorInputOutput::m_runOptions를 통해 액세스할 수 있는 GeneratorRunOptions 오브젝트에서 다음을 확인합니다.

    • GeneratorRunOptions::m_doMultiCore 클래스 구성원 값이 true로 설정되어 있습니다(기본값).
    • GeneratorRunOptions가 중간 파일을 생성하지 않도록 구성되어 있습니다(기본값). 중간 파일이 필요할 경우 평행화는 자동으로 비활성화됩니다.

사용자는 사용자 정의 평행 시스템의 다른 모든 요구 사항이 충족되었는지 확인해야 합니다.