Programming 12

MFC 기반의 Multi-threading

근 20년간 MFC를 사용하고 있지 않다가 부득이하게 성능 테스트를 해볼  DLL을 타 부서에서 전달받았는데 C++로 되어 있고 사용자 인터페이스를 함께 작업해야해서 다시 한번 정리하는 의미로 글을 남긴다.  1. MFC에서의 기본 스레딩 개념MFC에서는 CWinThread 클래스를 사용하여 스레드를 관리할 수 있다. 이 클래스는 윈도우 애플리케이션의 스레드와 관련된 여러 기능을 제공한다. Windows API의 CreateThread와 BeginThread와 같은 함수도 사용 가능하지만, MFC의 CWinThread 클래스를 사용하는 것이 보다 편리하다.2. MFC에서 스레드 생성 및 관리(1) 스레드 클래스 만들기스레드를 만들려면 CWinThread를 상속한 클래스를 작성한다.class CMyThre..

Programming/Others 2025.01.08

Model Evaluation: Confusion Matrix, Precision, Recall, F1-Score

생성한 모델에 대한 성능 지표를 평가하기 위한 다양한 방법들이 존재한다. 그중 일반적으로 많이 사용하는 정밀도(Precision), 재현율(Recall) 및 F1-Score에 대해 알아보자. 먼저 평가 기법에 대해 알아보기 전에 시각적으로 모델의 성능을 이해할 수 있도록 제공해 주는  Confusion Matrix를 보면 다음과 같다.  Confusion Matrixsms 실제값(Real Value 또는 Ground Truth라고 함)과 모델이 예측한 예측값을 2x2 형태로 구성하여 원하는 결과값이 나왔는지에 대한 정의로 표현한다. 각 항목은 모델의 예측 결과를 실제 값과 비교한 결과를 나타낸다. True Positive (TP): 실제 positive인 데이터가 모델에 의해 positive로 예측된 경..

Visual C++에서 gRPC 사용하기

Windows  운영환경에서 여러 개발을 위한 패키지를 설치하기 위해서 Visual Studio에서는 Nuget을 지원하고 있다. 그러나 어떤 라이브러리들은 개발 언어에 따라 Nuget을 이용할 수 없고  CMake등을 이용하여 일일이 소스 코드를 컴파일하여야 하는 번거로움이 존재한다.  vcpkg는 마이크로소프트에서 제공하는 C 및 C++ 라이브러리를 Windows, Linux 및  MacOS에서 관리할 수 있는 도구이다. https://github.com/microsoft/vcpkg/blob/master/README.md vcpkg/README.md at master · microsoft/vcpkgC++ Library Manager for Windows, Linux, and MacOS. Contrib..

Programming/Others 2025.01.07

Jetson Xavier NX Developer Kit Initialization

NVIDIA에서는 IoT를 위한 다양한 칩을 개발, 판매하고 있다. 2024.02 현재 생산을 중단된 Jetson Xavier NX Developer Kit를 이용하기 위해 개발 환경을 구축하는 방법을 설명하고자 한다(AGX, ORIN 등 최신형 Chipset이 발표되었으나 개발자 보드의 비용이 만만치 않아 가장 저렴한 모델을 선택하였다) Jetson Xavier NX Development Kit은 방열판이 포함된 Jetson Xavier NX(P3668-0000) 모듈과 02.11 plug-in WLAN & BT module이 탑재된 EVM 보드(P3509-0000) 및 19V AC-DC 전원 장치로 구성되어 있다. Jetson Xavier NX Developer Kit은 현재 EOL(End of Li..

GPU는 왜 사용하는 것일까?

GPU를 사용하면 왜 빠르냐는 아주 무식한 질문을 한적이 있었다. 그에 대한 답변은 너무 간단했다. "CORE 가 많어" Core가 많으니 당연히 많은 연산을 할 수 있을것이고 좋은 성능을 나타낼 수 있다는 이야기였다. 한동안 누군가가 GPU를 왜 쓰냐는 질문을 하면 나도 똑같이 대답하다보니 무언가 좀더 자세히 알아보고 싶은 생각이 들었다. CPU는 스레드(thread)라고 하는 순차적인 명령어(a sequence of operations)들을 빠르게 처리하며 동시에 수~수십개의 스레드를 병렬(parallel)처리하도록 설계되어 있으나 GPU는 동시에 수천~수만개의 스레드를 병렬로 실행하는 목적으로 설계되었다. 그러나 GPU에서의 스레드는 명령어의 집합이 아니라 주로 병렬 계산(parallel compu..