통합 성능 프리미티브
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
통합 성능 프리미티브(IPP)는 인텔에서 개발한 라이브러리로, MMX, SSE, AVX 등 다양한 프로세서 기능을 활용하여 영상, 오디오 코덱, 컴퓨터 비전, 암호학, 데이터 압축 등 다양한 분야의 성능을 최적화한다. IPP는 신호 처리, 이미지 처리, 데이터 압축, 암호화의 네 가지 주요 처리 그룹으로 구성되며, 프로세서 환경에 따라 최적의 코드를 동적으로 선택하는 디스패치 기능을 지원한다. 또한, 멀티스레드 및 싱글스레드 버전을 제공하며, OpenCV의 IPP 서브셋인 IPPCV는 무료로 사용할 수 있다. IPP는 2002년 처음 출시된 이후 지속적으로 업데이트되었으며, 유료 라이선스를 기본으로 하지만, 커뮤니티 및 학술 연구용 무상 라이선스도 제공한다.
더 읽어볼만한 페이지
- 멀티미디어 소프트웨어 - 사운드 포지
사운드 포지는 다중 채널 멀티트랙 레코딩을 지원하는 오디오 편집 소프트웨어로, 인공지능 기반 음성 활동 감지 기능, CD 마스터링 작업 활용을 위한 DDP 포맷 내보내기, 고해상도 오디오 및 다양한 파일 형식 지원, 그리고 DirectX 및 VST3 플러그인 확장 기능을 제공한다. - 멀티미디어 소프트웨어 - 프랩스
프랩스는 게임 플레이 영상 캡처, 화면 캡처, 프레임 속도 표시 및 벤치마킹 기능을 제공하는 소프트웨어로, 고품질 영상 녹화가 가능하지만 파일 크기가 크고, 업데이트 중단 및 고객 지원 부족에 대한 비판이 있다. - 인텔 소프트웨어 - 타이젠
타이젠은 리눅스 재단 주도로 삼성전자와 인텔이 후원하여 개발된 리눅스 기반 오픈 소스 운영체제로, 스마트폰, 스마트 TV, 웨어러블 기기, 차량용 인포테인먼트 시스템 등 다양한 기기 플랫폼을 지원하며 삼성전자는 바다 운영체제를 통합하여 생태계를 확장했고 웨어러블 기기에서는 Wear OS로 전환되었으나 스마트 TV에서는 계속 사용되고 있다. - 인텔 소프트웨어 - 미고 (운영 체제)
미고는 인텔 모블린과 노키아 마에모 프로젝트를 통합해 개발된 리눅스 기반 오픈 소스 운영 체제로, 다양한 플랫폼 지원을 목표했으나 노키아의 전략 변경으로 타이젠으로 대체되었고, 이후 커뮤니티 개발자들에 의해 Mer 프로젝트와 Sailfish OS로 이어졌다. - 멀티미디어 프레임워크 - 퀵타임
퀵타임은 1991년 애플에서 처음 출시된 멀티미디어 프레임워크로, 다양한 기능 업데이트를 거치며 발전했으나 애플의 소극적인 지원으로 쇠퇴하였고, 비디오 및 오디오 트랜스코딩, 코덱 지원 등의 특징을 가지며 퀵타임 플레이어를 통해 다양한 파일 형식을 재생할 수 있도록 지원했으나, 2016년 4월 윈도우 버전 지원이 중단되었다. - 멀티미디어 프레임워크 - 다이렉트쇼
DirectShow는 마이크로소프트에서 개발한 윈도우 기반 멀티미디어 프레임워크이자 API로, 필터 그래프를 통해 비디오 재생, 오디오 녹음, 편집, 인코딩 등 다양한 작업을 처리하며, 뛰어난 코덱 확장성을 가지지만 복잡한 구조와 코덱 충돌 문제가 있다.
통합 성능 프리미티브 - [IT 관련 정보]에 관한 문서 | |
---|---|
일반 정보 | |
개발사 | 인텔 |
최신 버전 | 2021.11.0 |
최신 릴리스 날짜 | 2024년 3월 28일 |
프로그래밍 언어 | C/C++ |
운영 체제 | 리눅스, macOS, 마이크로소프트 윈도우 |
라이선스 | 독점, fre웨어 |
웹사이트 | Intel® Integrated Performance Primitives (Intel® IPP) |
2. 기능
이 라이브러리는 MMX, SSE, SSE2, SSE3, SSSE3, SSE4, AVX, AVX2, AVX-512, AES-NI, 멀티 코어 프로세서를 포함한 다양한 프로세서 기능을 활용하여 성능을 높인다.[38][6] 인텔 IPP는 다음과 같은 다양한 기능을 포함한다:
- 영상 코덱
- 오디오 코덱
- JPEG / JPEG2000 / JPEG XR
- 컴퓨터 비전
- 암호학
- 데이터 압축
- 색 관리
- 디지털 화상 처리
- 광선 추적 및 렌더링
- 신호 처리
- 음성 부호화
- 음성 인식
- 문자열 처리
- 벡터 및 행렬 연산
3. 구성
인텔 IPP는 크게 4가지 처리 그룹으로 나뉜다.[6]
진입점의 분포는 다음과 같다.[6]
인텔 IPP 함수는 여러 데이터 유형을 지원한다. 주요 데이터 유형에는 8u (8비트 부호 없는 정수), 8s (8비트 부호 있는 정수), 16s (16비트 부호 있는 정수), 32f (32비트 부동소수점), 64f (64비트 부동소수점) 등이 있다. 일반적으로 애플리케이션 개발자는 대부분의 처리 함수에서 주로 하나의 데이터 유형을 사용하며, 입력, 처리, 출력 단계에서 필요에 따라 형식을 변환한다.[6]
4. 디스패치 기능
IPP는 실행되는 컴퓨터의 CPU 종류에 맞춰 가장 성능이 좋은 코드를 자동으로 골라 실행하는 '디스패치' 기능을 제공한다. 여러 세대의 CPU에 맞춰 최적화된 코드가 미리 준비되어 있다.[18][19] 예를 들어, SSE나 SSE2 명령어까지만 지원하는 CPU에서는 해당 명령어를 사용한 코드를 실행하고, 더 발전된 AVX 명령어를 지원하는 CPU에서는 AVX 코드를 실행하는 방식이다.
IPP를 동적 링크 방식으로 사용하는 경우에는 프로그램 실행 시 가장 적합한 공유 라이브러리 (윈도우에서는 DLL 파일)가 자동으로 선택된다. 하지만 정적 링크 방식으로 사용하는 경우에는 개발자가 직접 `ippInit()` 함수를 코드에서 호출하여 초기화해야 한다. (과거에는 `ippStaticInit()` 함수도 사용되었으나 IPP 9.0 버전부터는 사용되지 않는다[20]).[21][22][23] `ippInit()` 함수는 보통 애플리케이션 프로그램이 시작되는 지점(예: `main` 함수)에서 호출한다.[24] 만약 동적으로 링크되는 라이브러리 안에서 IPP를 사용한다면, 해당 라이브러리가 로드될 때(윈도우의 경우 `DllMain` 함수 등) `ippInit()` 함수를 호출해야 할 수도 있다.[25]
5. 멀티스레드 지원
IPP는 멀티스레드를 지원하는 버전과 지원하지 않는 싱글스레드 버전, 두 가지로 제공된다. 멀티스레드 버전은 함수 내부에서 작업을 여러 스레드로 나누어 처리하므로, 멀티코어 CPU 환경에서 성능을 높일 수 있다. 하지만 모든 IPP 함수는 기본적으로 스레드 안전(thread-safe)하므로[26], 싱글스레드 버전을 사용하여 애플리케이션 코드 측에서 더 세분화된 멀티스레드 처리를 수행하는 것도 가능하다.
IPP 7.1 버전부터는 라이브러리 내부에서 자동으로 스레드를 관리하는 멀티스레드 버전의 사용을 더 이상 권장하지 않으며(deprecated), 대신 싱글스레드 버전을 사용하는 것을 권장하고 있다.[27][28] 이러한 변화에 따라, 내부 스레드 수를 조절하는 `ippSetNumThreads()`와 같은 함수들도 더 이상 사용이 권장되지 않는다.[29]
IPP 9.0 버전에서 싱글스레드 라이브러리는 인텔 C++ 컴파일러(Intel C++ Compiler) 런타임 라이브러리에 대한 의존성을 제거했다. 멀티스레드 라이브러리는 인텔 OpenMP 라이브러리에만 의존한다.[30]
6. IPPCV
원래 OpenCV는 최적화된 코드를 빌드하기 위해 선택적으로 일반판 인텔 IPP(Integrated Performance Primitives)를 사용할 수 있었다. 인텔 IPP는 MMX, SSE, SSE2, SSE3, SSSE3, SSE4, AVX, AVX2, AVX-512, AES-NI, 멀티 코어 프로세서 등 다양한 최신 프로세서 기능을 활용하여 성능을 높이는 라이브러리이다.[38]
인텔 IPP는 다음과 같은 다양한 기능을 포함한다:
분야 | 기능 |
---|---|
미디어 | 영상 코덱, 오디오 코덱, JPEG/JPEG 2000/JPEG XR |
비전/그래픽 | 컴퓨터 비전, 디지털 화상 처리, 광선 추적 및 렌더링, 색 관리 |
보안/압축 | 암호학, 데이터 압축 |
신호 처리 | 신호 처리, 음성 부호화, 음성 인식 |
기타 | 문자열 처리, 벡터 및 매트릭스 연산 |
OpenCV 3.0 버전부터 인텔 IPP의 일부 기능이 IPPCV (또는 IPPICV)라는 이름으로 OpenCV 프로젝트에 기증되었다.[31] 이에 따라 IPPCV는 모든 OpenCV 사용자가 상업적 용도나 비상업적 용도에 관계없이 무료로 사용할 수 있게 되었다.[32][33][34]
7. 역사
2007년 6월 5일 업데이트: 데이터 압축 코드 샘플, 새로운 비디오 코덱 지원, macOS 64비트 애플리케이션 지원, Windows Vista 지원, 레이 트레이싱 및 렌더링 기능 추가.