맨위로가기

AltiVec

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

AltiVec은 1990년대 후반 애플, IBM, 모토로라의 공동 프로젝트로 개발된 Power Vector Media Extension(VMX)의 프리스케일(구 모토로라) 상표이다. 이 기술은 멀티미디어 애플리케이션의 속도를 높이는 데 사용되었으며, IBM의 POWER 마이크로프로세서, Cell 광대역 엔진, Xbox 360의 제논 CPU 등 다양한 프로세서에서 구현되었다. AltiVec은 128비트 벡터 레지스터를 특징으로 하며, C++ 표준 템플릿 라이브러리와의 충돌, 메모리 정렬 문제, 64비트 정수 지원 부족 등의 한계가 존재한다.

더 읽어볼만한 페이지

  • 파워 마이크로프로세서 - 셀 (마이크로프로세서)
    셀 마이크로프로세서는 소니, 도시바, IBM이 공동 개발한 멀티 코어 프로세서 아키텍처로, PPE와 SPE로 구성되어 EIB를 통해 연결되며, 플레이스테이션 3, 블레이드 서버, 슈퍼컴퓨터 등에 응용되었고 IBM 로드러너 슈퍼컴퓨터는 PowerXCell 8i 프로세서를 사용하여 1페타플롭스를 달성했다.
  • 파워 마이크로프로세서 - 파워8
    POWER8은 IBM에서 빅 데이터, 데이터 분석, 클라우드 컴퓨팅 환경에 대응하기 위해 개발한 마이크로프로세서 아키텍처로, 최대 12개의 코어, 코어당 8개의 SMT, CAPI를 통한 확장성, 효율적인 전력 및 열 관리, 메모리 접근 최적화 등의 특징을 가진다.
  • SIMD 컴퓨팅 - SSE2
    SSE2는 인텔이 개발한 x86 아키텍처의 SIMD 명령어 집합 확장으로, MMX 명령어의 정수 벡터 연산을 확장하고 XMM 레지스터를 사용하여 부동 소수점 연산 성능을 향상시키며, AMD64 아키텍처에서도 지원된다.
  • SIMD 컴퓨팅 - SSE3
    SSE3는 인텔에서 개발한 스트리밍 SIMD 확장 3 명령어 세트로, 부동 소수점 연산, 디지털 신호 처리, 3차원 컴퓨터 그래픽 처리 성능 향상을 위해 기존 SSE2 명령어 세트에 몇 가지 새로운 명령어를 추가한 것이다.
AltiVec
명칭
종류SIMD 명령어 집합 확장
설계자애플, 모토로라
발표일1998년
아키텍처파워PC
다른 이름VMX (벡터 멀티미디어 확장)
Velocity Engine (애플 마케팅 명칭)
개요
설명AltiVec은 파워PC ISA를 위한 SIMD 명령어 집합 확장이다.
특징128비트 벡터 레지스터
정수 및 부동 소수점 연산 지원
병렬 처리 능력 강화
역사 및 개발
개발 배경애플, IBM, 모토로라 (AIM 얼라이언스) 협력 개발
멀티미디어 처리 성능 향상 목표
최초 발표1998년
적용 사례파워PC G4 프로세서
게임 콘솔
그래픽 처리
과학 연산
기술적 특징
레지스터128비트 벡터 레지스터 (32개)
데이터 타입8비트, 16비트, 32비트 정수
단정밀도 부동 소수점
명령어 종류덧셈, 뺄셈, 곱셈, 나눗셈
논리 연산
비교 연산
셔플 연산
픽셀 처리 연산
활용 분야
멀티미디어이미지 처리
비디오 처리
오디오 처리
과학 연산신호 처리
물리 시뮬레이션
게임3D 그래픽
물리 엔진
장점
성능 향상SIMD를 통한 병렬 처리로 멀티미디어 및 과학 연산 성능 향상
에너지 효율단일 명령어로 여러 데이터 처리하여 에너지 효율 증가
유연성다양한 데이터 타입 및 연산 지원
단점
복잡성프로그래밍 모델의 복잡성 증가
호환성AltiVec에 최적화된 코드는 다른 아키텍처에서 실행 시 성능 저하 가능성 존재
관련 기술
SIMDSIMD (Single Instruction, Multiple Data)
SSESSE (Streaming SIMD Extensions) - x86 아키텍처의 SIMD 확장
NEONNEON - ARM 아키텍처의 SIMD 확장

2. 역사적 배경

Power Vector Media Extension(VMX)는 1996년부터 1998년까지 애플, IBM, 모토로라의 공동 프로젝트를 통해 개발되었다.[1] 애플은 2005년 6월 6일 인텔 x86 기반 CPU로 전환하기 전까지 AltiVec의 주요 고객이었다.

2. 1. 초기 도입 및 활용

모토로라는 G4 라인부터 AltiVec 지원 프로세서를 처음으로 공급했다. 애플은 퀵타임, 아이튠즈와 Mac OS X의 핵심 부분, 특히 Quartz 그래픽 컴포저와 같은 멀티미디어 애플리케이션의 속도를 높이는 데 AltiVec을 사용했다.[1] 어도비 포토샵과 같은 이미지 처리 프로그램을 최적화하기 위해 어도비 등 다른 회사들도 AltiVec을 사용했다. AltiVec은 고성능 디지털 신호 처리를 위해 일부 임베디드 시스템에서도 사용되었다.[1]

2. 2. IBM의 AltiVec (VMX) 채택 및 발전

IBM은 초기 POWER 마이크로프로세서에서 AltiVec(VMX)을 일관되게 제외했는데, 이는 서버 애플리케이션에서의 유용성이 낮다고 판단했기 때문이다. 2007년에 출시된 POWER6 마이크로프로세서부터 AltiVec을 구현했다. IBM의 마지막 데스크톱 마이크로프로세서인 PowerPC 970(애플에서 "G5"로 불림)은 PowerPC 7400과 유사한 하드웨어로 AltiVec을 구현했다. AltiVec은 Power ISA v.2.03 사양의 표준 'Category:Vector' 부분에 대한 프리스케일(이전 모토로라)의 상표이다. VMX(IBM에서 사용) 및 "Velocity Engine"(이전에 애플에서 사용한 브랜드 이름)으로도 알려져 있다.[1]

2. 3. VMX128 및 VSX 확장

IBM은 제논(Xbox 360)에서 사용하기 위해 VMX를 향상시킨 VMX128을 개발했다. VMX128은 게임을 목표로 하는 새로운 루틴(3D 그래픽 및 게임 물리 가속)과 총 128개의 레지스터로 구성된다. VMX128은 더 큰 레지스터 파일과 추가적인 응용 프로그램별 연산을 위한 공간을 만들기 위해 다수의 정수 연산이 제거되어 VMX/AltiVec과 완전히 호환되지 않는다.

Power ISA v2.06는 VSX 벡터-스칼라 명령어를 도입하여[5] Power ISA의 SIMD 처리를 확장했다. 최대 64개의 레지스터를 지원하며, 일반 부동 소수점, 10진 부동 소수점 및 벡터 실행을 지원한다. POWER7은 Power ISA v2.06을 구현한 최초의 Power ISA 프로세서이다.

IBM은 Power ISA 2.07의 VSX 확장의 일부로 정수 연산을 위한 벡터 미디어 확장 범주에 새로운 명령어를 도입했다.

새로운 정수 벡터 명령어는 IBM에서 VMX 인코딩을 따라 Power ISA v3.0의 VSX 확장의 일부로 도입되었다. 이는 POWER9 프로세서와 함께 도입될 것이다.[6]

3. 기술적 특징 (x86-64 SSE와의 비교)

VMX/AltiVec와 SSE는 모두 128비트 벡터 레지스터를 갖추고 있으며, 이는 16개의 8비트 부호 있는 또는 부호 없는 문자, 8개의 16비트 부호 있는 또는 부호 없는 짧은 정수, 4개의 32비트 정수 또는 4개의 32비트 부동 소수점 변수를 나타낼 수 있다. 둘 다 데이터 스트림에서 작업할 때 캐시 오염을 최소화하기 위한 캐시 제어 명령을 제공한다.

하지만 중요한 차이점도 존재한다. SSE2와 달리 VMX/AltiVec는 특수한 RGB "픽셀" 데이터 유형을 지원하지만, 64비트 배정밀도 부동 소수점을 작동하지 않으며, 스칼라 레지스터와 벡터 레지스터 간에 데이터를 직접 이동하는 방법이 없다. PowerPC의 RISC 설계의 "로드/저장" 모델에 따라, 벡터 레지스터는 스칼라 레지스터처럼 메모리에서만 로드하고 저장할 수 있다.

그러나 VMX/AltiVec는 벡터의 모든 요소에서 작동하는 훨씬 더 완벽한 "수평" 연산 집합을 제공한다. SSE 및 SSE2(x86-64에서 16개로 확장됨)의 8개에 비해 32개의 128비트 벡터 레지스터가 제공되며, 대부분의 VMX/AltiVec 명령은 IA-32에서 두 개의 레지스터/레지스터 또는 레지스터/메모리 피연산자만 사용하는 것과 비교하여 세 개의 레지스터 피연산자를 사용한다.

VMX/AltiVec는 또한 두 개의 다른 벡터의 각 바이트에서 결과 벡터 값의 각 바이트를 가져올 수 있는 유연한 벡터 순열 명령어를 지원한다는 점에서 독특하며, 이는 또 다른 벡터에 의해 매개변수화된다. 이를 통해 단일 명령어로 정교한 조작이 가능하다.

4. 프로그래밍 지원

GCC, IBM VisualAge 컴파일러 등은 C/C++ 프로그램에서 직접 VMX/AltiVec 명령어에 접근할 수 있는 내장 함수를 제공한다. GCC는 자동 벡터화 기능을 포함하여 프로그래머가 내장 함수를 직접 사용할 필요 없이 VMX/AltiVec 가속 바이너리를 생성하도록 지원하며, "vector" 유형 키워드를 통해 네이티브 벡터 유형의 선언을 허용한다.

5. 한계점 및 해결 방법

VMX/AltiVec는 SSE와 마찬가지로 128비트 벡터 레지스터를 사용하여 16개의 8비트 문자, 8개의 16비트 정수, 4개의 32비트 정수 또는 4개의 32비트 부동 소수점 변수를 처리한다. 데이터 스트림 작업 시 캐시 오염을 최소화하는 캐시 제어 명령도 제공한다.

하지만 몇 가지 중요한 차이점이 존재한다. AltiVec는 SSE2와 달리 특수한 RGB 픽셀 데이터 유형을 지원하지만, 64비트 배정밀도 부동 소수점 연산은 지원하지 않으며, 스칼라 레지스터와 벡터 레지스터 간에 데이터를 직접 이동할 수 없다. PowerPC의 RISC 설계 특성상 벡터 레지스터는 메모리에서만 로드 및 저장이 가능하다. 반면, AltiVec는 벡터의 모든 요소에 대해 작동하는 다양한 "수평" 연산을 제공하며, 데이터 유형과 연산 조합이 훨씬 다양하다. 또한, 32개의 128비트 벡터 레지스터를 제공하여 (SSE 및 SSE2는 8개, x86-64에서는 16개) 대부분의 AltiVec 명령이 세 개의 레지스터 피연산자를 사용할 수 있다(IA-32는 두 개의 레지스터/레지스터 또는 레지스터/메모리 피연산자 사용).

AltiVec는 두 벡터에서 각 바이트를 가져와 결과 벡터를 생성하는 유연한 벡터 순열 명령어를 지원하여 단일 명령어로 복잡한 조작을 가능하게 한다.

최신 버전의 GCC, IBM VisualAge 컴파일러 등은 C/C++ 프로그램에서 AltiVec 명령에 직접 접근할 수 있는 내장 함수를 제공한다. GCC 4 버전부터는 프로그래머가 내장 함수를 직접 사용하지 않아도 AltiVec 가속 바이너리를 생성하는 자동 벡터화 기능을 제공한다. 'vector' 키워드를 통해 네이티브 벡터 유형을 선언할 수 있으며, 예를 들어 '`vector unsigned char foo;`'는 16개의 8비트 부호 없는 문자를 포함하는 128비트 벡터 변수 'foo'를 선언한다. 벡터 유형에 대한 산술 및 이진 연산자가 정의되어 일반적인 C 표현식으로 벡터 변수를 조작할 수 있다. 또한, '`vec_add`'와 같이 오버로드된 내장 함수는 벡터 내 요소 유형에 따라 적절한 opcode를 생성하며 강력한 유형 검사를 제공한다. 반면, IA-32 SIMD 레지스터에 대한 인텔의 데이터 유형은 벡터 레지스터 크기(128 또는 64비트)와 정수/부동 소수점 값 포함 여부만 선언한다. 프로그래머는 데이터 유형에 맞는 내장 함수(예: 8개의 16비트 정수 덧셈 시 `_mm_add_epi16(x,y)`)를 선택해야 한다.

5. 1. C++ 표준 템플릿 라이브러리와의 충돌

C++에서 AltiVec 지원에 접근하는 표준적인 방법은, 컴파일러가 "vector"의 문맥에 민감한 키워드 버전을 구현하지 않을 때 "vector"를 예약어로 취급하기 때문에, 표준 템플릿 라이브러리 `vector<>` 클래스 템플릿을 사용하는 것과 상호 배타적이다. 하지만, 컴파일러 특정 해결 방법을 사용하여 이들을 결합하는 것이 가능하다. 예를 들어, GCC에서는 `#undef vector`를 사용하여 `vector` 키워드를 제거한 다음, GCC 특정 `__vector` 키워드를 그 자리에 사용할 수 있다.

5. 2. 메모리 정렬 문제

VSX가 있는 Power ISA 2.06 이전의 AltiVec는 형식의 자연 정렬을 사용하여 메모리에서 로드하는 기능이 부족하다. 예를 들어, 유효 주소가 16바이트 정렬되지 않은 경우 Power6 이하에서는 특별한 처리가 필요한데, VSX를 사용할 수 없을 때 이러한 처리는 로드 작업에 3개의 추가적인 명령어를 추가한다.

```C

#include

typedef __vector unsigned char uint8x16_p;

typedef __vector unsigned int uint32x4_p;

...

int main(int argc, char* argv)

{

/* vals의 자연 정렬은 4입니다. 그리고 요구되는 16이 아닙니다. */

unsigned int vals[4] = { 1, 2, 3, 4 };

uint32x4_p vec;

#if defined(__VSX__) || defined(_ARCH_PWR8)

vec = vec_xl(0, vals);

#else

const uint8x16_p perm = vec_lvsl(0, vals);

const uint8x16_p low = vec_ld(0, vals);

const uint8x16_p high = vec_ld(15, vals);

vec = (uint32x4_p)vec_perm(low, high, perm);

#endif

}

5. 3. 64비트 정수 지원 부족

VMX가 탑재된 Power ISA 2.06 이전의 AltiVec는 64비트 정수를 지원하지 않았다. 64비트 데이터를 처리해야 하는 개발자들은 32비트 구성 요소를 활용하여 루틴을 개발해야 했다. 예를 들어, C 언어에서 64비트 덧셈( `add` )과 뺄셈( `subtract` )을 수행하려면, 빅 엔디안 환경에서 32비트 단어 4개로 구성된 벡터를 사용하고, 캐리 및 빌림 비트를 적절히 이동시키기 위해 순열(permutation)을 이용해야 했다.[3]

다음은 64비트 덧셈 및 뺄셈을 구현하는 C 코드 예시이다.

64비트 덧셈 (add64)64비트 뺄셈 (sub64)



Power8에 사용된 Power ISA 2.07부터는 64비트 더블 워드를 지원하여 이러한 문제가 해결되었다. Power8 환경에서는 다음과 같이 간단하게 64비트 덧셈과 뺄셈을 수행할 수 있다.[3]

```c

#include

typedef __vector unsigned long long uint64x2_p;

...

/* 네이티브 벡터 64비트 더블 워드를 사용하여 a+b를 수행합니다. */

uint64x2_p add64(const uint64x2_p a, const uint64x2_p b)

{

return vec_add(a, b);

}

/* 네이티브 벡터 64비트 더블 워드를 사용하여 a-b를 수행합니다. */

uint64x2_p sub64(const uint64x2_p a, const uint64x2_p b)

{

return vec_sub(a, b);

}

6. 구현 프로세서 목록

AltiVec, VMX 또는 VMX128을 포함하는 프로세서는 다음과 같다.

6. 1. 모토로라/프리스케일

Power Vector Media Extension(VMX)는 1996년부터 1998년까지 애플, IBM, 모토로라가 공동으로 개발한 기술이다.[1] 모토로라는 G4 라인부터 AltiVec 지원 프로세서를 처음으로 공급했으며, AltiVec은 일부 임베디드 시스템에서 고성능 디지털 신호 처리를 위해서도 사용되었다.

프리스케일은 e6500 기반 QorIQ 프로세서에 향상된 버전의 AltiVec을 제공하고 있다.

AltiVec을 지원하는 모토로라/프리스케일 프로세서는 다음과 같다.

프로세서
MPC7400
MPC7410
MPC7450
MPC7445/7455
MPC7447/7447A/7457
MPC7448
MPC8641/8641D
MPC8640/8640D
MPC8610
T2081/T2080
T4080/T4160/T4240
B4420/B4860


6. 2. IBM

Power Vector Media Extension(VMX)는 1996년에서 1998년 사이에 애플, IBM, 모토로라의 공동 프로젝트를 통해 개발되었다.[1]

IBM은 서버 애플리케이션에 사용되면서 그다지 유용하지 않았기 때문에, 초기의 POWER 마이크로프로세서에서 VMX를 일관되게 제외했다. 2007년에 출시된 POWER6 마이크로프로세서는 AltiVec을 구현했다. IBM의 마지막 데스크톱 마이크로프로세서인 PowerPC 970 (애플에서 "G5"로 불림) 역시 PowerPC 7400과 유사한 하드웨어로 AltiVec을 구현했다.[1]

AltiVec은 Power ISA v.2.03 사양의 표준 ''Category:Vector'' 부분에 대한 프리스케일(이전 모토로라)의 상표이다. 이 카테고리는 VMX(IBM에서 사용) 및 "Velocity Engine"(이전에 애플에서 사용한 브랜드 이름)으로도 알려져 있다.[1]

Cell 광대역 엔진은 (특히) 플레이스테이션 3에서 사용되며, SPU ISA가 개선되었지만 구조적으로 유사한 PPU에서 Power Vector Media Extension(VMX)을 지원한다.[11]

IBM은 제논(Xbox 360)에서 사용하기 위해 VMX를 향상시켰고, 이 향상된 기능을 VMX128이라고 명명했다. 이 향상된 기능은 게임을 목표로 하는 새로운 루틴(3D 그래픽 및 게임 물리 가속)과 총 128개의 레지스터로 구성된다. VMX128은 더 큰 레지스터 파일과 추가적인 응용 프로그램별 연산을 위한 공간을 만들기 위해 다수의 정수 연산이 제거되어 VMX/AltiVec과 완전히 호환되지 않는다.[10]

Power ISA v2.06는 VSX 벡터-스칼라 명령어를 도입하여[5] Power ISA의 SIMD 처리를 확장하여 최대 64개의 레지스터를 지원하며, 일반 부동 소수점, 10진 부동 소수점 및 벡터 실행을 지원한다. POWER7은 Power ISA v2.06을 구현한 최초의 Power ISA 프로세서이다.

IBM은 Power ISA 2.07의 VSX 확장의 일부로 정수 연산을 위한 벡터 미디어 확장 범주에 새로운 명령어를 도입했다.

새로운 정수 벡터 명령어는 IBM에서 VMX 인코딩을 따라 Power ISA v3.0의 VSX 확장의 일부로 도입되었다. 이는 POWER9 프로세서와 함께 도입될 것이다.[6]

'''벡터 멀티미디어 확장''' (Vector Multimedia Extension, VMX)은 IBM이 모토로라와 공동 개발한 벡터 연산 장치이다. AltiVec과는 하드웨어 구현 등이 다르지만 기본적인 구성과 명령어 세트는 동일하다. 다만, 요소 로드 명령어와 일부 시프트 명령어 등, AltiVec와 VMX에서 엄밀히 동작이 다른 명령어가 있어 완전한 호환성은 없다.[9]

PowerPC G5 (PowerPC 970)에서 처음 채택되었으며, POWER6 이후의 POWER 프로세서 시리즈에서 사용할 수 있다. 마이크로소프트의 게임기 Xbox 360의 CPU 제논에는 PowerPC 970의 VMX를 확장하여 레지스터를 128개로 늘린 '''VMX-128'''이 탑재되어 있다.[10]。VMX는 플레이스테이션 3에 탑재된 Cell의 Power Processor Element (PPE)에도 채택되었다.[11]

VMX/AltiVec을 지원하는 IBM 프로세서는 다음과 같다.

프로세서
파워PC 970
파워PC 970FX
파워PC 970MP
제논
셀 B.E.
PowerXCell 8i
POWER6/POWER6+
POWER7/POWER7+
POWER8
POWER9
파워10


6. 3. P.A. Semi

PA6T

7. 소프트웨어 애플리케이션

다음은 AltiVec 또는 VMX 하드웨어 가속을 활용하는 것으로 알려진 소프트웨어 애플리케이션이다.


  • 헬리오스(Helios)는 VMX를 지원하는 네이티브 POWER9/POWER10 포트를 가지고 있다.
  • '''Velocity Engine''''(벨로시티 엔진)은 애플(Apple Inc.)이 AltiVec 및 VMX를 부르는 명칭이다. AltiVec와 VMX는 별개의 기술이지만, 호환성이 있기 때문에 애플은 동일한 명칭을 사용하고 있다.
  • 퀵타임(QuickTime)이 지원하며, GarageBand, 아이튠즈, 파이널 컷 프로, iDVD 등 많은 응용 소프트웨어에서 활용되었다.[12]

참조

[1] 웹사이트 Power ISA v.2.03 http://www.power.org[...] Power.org 2024-08-09
[2] 웹사이트 The Microsoft Xbox 360 CPU story http://www-128.ibm.c[...] IBM 2015-10
[3] 웹사이트 Using data-parallel SIMD architecture in video games and supercomputers https://web.archive.[...] IBM Research
[4] 특허 Implementing instruction set architectures with non-contiguous register file specifiers https://patents.goog[...]
[5] 웹사이트 Workload acceleration with the IBM POWER vector-scalar architecture https://www.research[...] IBM 2016-03-01
[6] 웹사이트 Peter Bergner - [PATCH, COMMITTED] Add full Power ISA 3.0 / POWER9 binutils support https://sourceware.o[...] 2016-12-24
[7] 웹사이트 FAQ, Helios https://heliosmusic.[...] 2021-07-09
[8] 웹사이트 WWDC(Worldwide Developers Conference)基調講演レポート https://pc.watch.imp[...] 2024-10-27
[9] 웹사이트 Instruction Level Differences Between G4 and G5 http://developer.app[...]
[10] 웹사이트 後藤弘茂のWeekly海外ニュース ベールを脱いだ「Xbox 360」 https://pc.watch.imp[...] 2024-10-27
[11] 웹사이트 後藤弘茂のWeekly海外ニュース ISSCCで、ついにCellが登場 ~ソニーグループ、IBM、東芝が共同発表 https://pc.watch.imp[...] 2005-02-08
[12] 웹사이트 アップル、Velocity Engineに対応した「Final Cut Pro 3」 https://pc.watch.imp[...] 2024-10-27
[13] 웹인용 Power ISA v.2.03 http://www.power.org[...] Power.org 2024-05-30



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com