# 응용 프로그램 설계

다음 표는 런타임 성능을 높일 수 있는 응용 프로그램 설계 상의 특징을 요약하고 있습니다. 성능을 높이도록 응용 프로그램을 설계하는 것은 일반적으로 시스템 작동에 최소의 영향만이 있습니다.

설계 패턴 | 빠른 이유 | 최선의 대안 | 주의 사항
--- | --- | --- | ---
스트림 당 도구 숫자를 적게 이용합니다. | 단일 ViDi 도구의 처리 시간은 해당 도구가 반환하는 정보의 양에 따라 크게 변동하지 않습니다. 예를 들어, 100개의 다른 형상을 찾도록 트레이닝된 단일 Blue 도구는 하나의 형상만을 찾도록 트레이닝된 도구와 동일한 속도로 실행됩니다. 나아가, 반환되는 형상의 수도 속도에 대한 영향은 매우 적습니다. 유사하게, Red 도구는 얼마나 많은 결함을 찾는가와 무관하게 동일한 속도로 실행되며, Green 도구든 2개 클래스로 분류하거나 2000개 클래스로 분류하거나 속도는 동일합니다. | 응용 프로그램을 하나의 도구로 구축하기 시작합니다. |
이미지 변환을 피합니다. | 도구 작업 중, 이미지는 신경망에 의해 처리를 위해 샘플링되어야 합니다. 이 샘플링은 bitmap 같은 래스터(비압축) 형식의 이미지를 필요로 합니다. 이러한 변환 작업은 시간이 걸립니다. 마찬가지로, 도구가 단일 채널(그레이스케일) 이미지를 입력으로 이용하도록 구성되었지만, 다채널 컬러 이미지가 제공되면, 런타임에서 각 이미지의 휘도 값이 계산되어야 합니다. | 응용 프로그램을 단일 채널 그레이스케일을 이용하도록 해결해 봅니다. | 일부 응용 프로그램은 색상 정보가 필요합니다.
처리된 데이터 양을 줄입니다. | 다음을 통해 처리된 데이터의 양을 줄입니다. 작은 ROI 사용 마스크 사용 최대한 적은 이미지 채널 사용 이렇게 하면 처리된 데이터의 양이 줄어들어 처리 속도가 향상됩니다. | ROI를 제한합니다. | ViDi 도구가 잘 작동하려면 맥락 정보가 필요하므로, ROI를 지나치게 제한하지 마십시오. 대개의 경우 다운샘플링(샘플 밀도 매개변수를 이용해 설정)은 필요하지 않습니다. 형상 크기를 크게 함으로써, 속도를 향상하고 런타임 다운샘플링의 필요를 없앱니다.
멀티스레딩 이용 | 다수 GPU가 있는 시스템에서는, 다수의 스트림을 동시에 처리하면 도구가 병행 실행되어 처리량이 늘어납니다. 단일 GPU 시스템에서는, 다수의 프로세스가 동일한 GPU를 이용하도록 시스템을 구성할 수 있습니다. 이렇게 하면 GPU 점유율이 높아져 처리량이 늘어나지만, 도구 실행 시간은 증가합니다. | --max-process-count 명령줄 인수를 이용해 다수의 스레드가 단일 GPU에 액세스하도록 합니다. 로컬 컨트롤의 GlobalConfig() 메서드를 이용해 런타임 응용 프로그램의 다수 처리 GPU 액세스를 활성화하려면, 다음을 이용합니다.
    control.GlobalConfig("max_process_count=2");
| 개별 도구의 처리 시간은 늘어납니다.
C++ (언매니지드) | 언매니지드 언어 환경을 이용하면, 시스템 활동이 도구 실행에 미치는 영향이 줄어듭니다. | 대기 시간이 짧고, 고성능인 응용 프로그램에는 Cognex Designer를 이용하지 마십시오. | Windows는 실시간 운영 체제(RTOS)가 아닙니다.