본문 바로가기

dev_AI_framework

ML Framework 의 C++ 구현 , 방법과 그 장점

python 의 subprocess 모듈의 사용, subprocess 모듈은 새로운 프로세스를 생성하고, 입력과 출력 관리, 새로운 프로세스와의 상호작용을 지원한다.

 

  • subprocess 모듈 임포트
    • import subprocess를 사용하여 subprocess 모듈을 임포트합니다.
  • C++ 실행 파일 경로 설정
    • cpp_executable 변수에 C++ 실행 파일의 경로를 설정합니다. Windows에서는 hello.exe로 변경해야 합니다.
  • subprocess.run() 함수 호출
    • [cpp_executable]: 실행할 명령어 및 인수를 리스트로 전달합니다.
    • capture_output=True: 표준 출력과 표준 오류를 캡처합니다.
    • text=True: 출력을 텍스트 형식으로 반환합니다.
    • subprocess.run() 함수를 사용하여 C++ 실행 파일을 실행합니다. 주요 매개변수는 다음과 같습니다:
  • 실행 결과 출력
    • result.stdout을 사용하여 C++ 프로그램의 표준 출력을 출력합니다.

 

 

// add.cpp
#include <iostream>

int main(int argc, char* argv[]) {
    if (argc != 3) {
        std::cerr << "Usage: " << argv[0] << " <num1> <num2>" << std::endl;
        return 1;
    }

    int num1 = std::stoi(argv[1]);
    int num2 = std::stoi(argv[2]);
    std::cout << "Sum: " << (num1 + num2) << std::endl;

    return 0;
}

인수를 받는 C++ 프로그램

 

import subprocess

# C++ 실행 파일 경로
cpp_executable = "./add"  # Windows에서는 "add.exe"로 변경

# 인수를 포함하여 C++ 프로그램 실행
num1 = "3"
num2 = "5"
result = subprocess.run([cpp_executable, num1, num2], capture_output=True, text=True)

# 실행 결과 출력
print("C++ 프로그램 출력:")
print(result.stdout)

C++ 실행 파일에 인수를 전달하여 실행하는 Python 코드 작성

 

이러한 방식의 장점

1. 성능 향상

C++는 성능이 중요한 계산 집약적인 작업에 매우 적합합니다. Python은 상대적으로 속도가 느리지만 개발 속도와 유연성이 뛰어납니다. 두 언어를 결합하면, 성능이 중요한 부분은 C++로 구현하고, 고수준의 로직과 사용자 인터페이스는 Python으로 구현할 수 있습니다.

2. 코드 재사용

기존에 작성된 C++ 라이브러리나 코드를 재사용할 수 있습니다. 이미 잘 테스트되고 최적화된 C++ 코드를 Python 프로그램에서 활용하여 개발 시간을 단축하고 코드의 안정성을 높일 수 있습니다.

3. 확장성

Python 프로그램의 기능을 확장하거나 새로운 기능을 추가할 때, 필요한 부분만 C++로 작성하여 프로그램을 확장할 수 있습니다. 이를 통해 Python의 간결함과 C++의 성능을 동시에 누릴 수 있습니다.

4. 멀티스레딩

Python의 GIL(Global Interpreter Lock)로 인해 멀티스레딩 성능이 제한될 수 있습니다. 그러나 C++에서 멀티스레딩을 구현하고 이를 Python에서 실행하면, 이러한 제한을 극복할 수 있습니다.

5. 특정 라이브러리 사용

C++로 작성된 특정 라이브러리나 프레임워크를 사용해야 할 때, 이를 Python에서 직접 사용할 수 있습니다. 예를 들어, 고성능 그래픽 라이브러리나 시스템 레벨의 라이브러리를 사용할 때 유용합니다.

6. 최적화된 코드 실행

Python에서 실행하기에는 비효율적인 작업(예: 복잡한 수학 계산, 이미지 처리 등)을 C++로 구현하면, 전체 프로그램의 성능을 크게 향상시킬 수 있습니다.

7. 유연한 개발 환경

Python의 유연성과 C++의 성능을 결합하여 다양한 환경에 맞는 솔루션을 개발할 수 있습니다. 예를 들어, 프로토타입 개발은 Python으로 빠르게 진행하고, 프로덕션에서는 C++로 성능을 최적화할 수 있습니다.