1. 인텔 8087부터 RapidCAD까지 FPU 코프로세서의 역사

 

1.jpg

 

여기에서는 코프로세서의 역사를 몇가지 소개하도록 하겠습니다.

 

코프로세서. 영어로 쓰면 Co-Processor입니다. 이름에서 알 수 있는 것처럼 프로세서의 기능을 보완하는 것입니다. 보완하는 프로세서란 이야기는 메인 프로세서는 따로 있고, 그 두개가 같이 작동해 시스템을 움직인다는 것이죠. 다만 메인이 무엇을 담당하고 코프로세서가 무엇을 처리하는지는 경우에 따라 다릅니다.

 

2.jpg

 

모토로라 MC88200

 

Rendition의 Verite V1000 같은 칩은 메인 프로세서가 고정기능 렌더링 파이프라인이 있고 코프로세서가 독자적인 RISC CPU였습니다. 모토로라의 MC88100 같은 경우 MC88200라는 Bus I/F 겸 캐시 컨트롤러 겸 캐시가 별도의 칩 형태로 나와 있어, 이거를 코프로세서로 분류해야 하는지 미묘하기도 하지만 일단 MMU가 있으니 코프로세서라 부를 수도 있을 것입니다.

 

3.jpg

 

인텔 iAPX 432

 

더 거대한 시스템에서는 인텔 iAPX 432처럼 I/O 처리 등을 위해 8086/8088 프로세서를 연결하는데, 시스템적으로 봤을 때 이들 칩은 코프로세서로 취급했습니다. 즉 시스템의 구성이나 정의에 따라서 무엇이든 코프로세서로 취급할 수 있다는 이야기가 됩니다.

 

다만 PC 시장에서는 주로 FPU(Floating Point Unit:부동 소수점 연산 유닛)을 코프로세서로 다루는 경우가 매우 많습니다. 사실 FPU는 80486 세대가 되기 전까진 다른 칩으로 구현했으며, 이후에도 NexGen의 NX586은 FPU로 NX587라는 칩을 코프로세서로 별도 장착했습니다. 왜 다른 칩으로 분리해야 했는지를 설명하도록 하겠습니다.

 

 

CPU 회로의 거대화를 막기 위해 FPU를 다른 칩으로 공급

 

소수점 연산은 크게 고정 소수점 연산과 부동 소수점 연산의 2가지로 나눌 수 있습니다. 고정 소수점 연산의 경우 10진수 표현은 32비트에서

 

XXXX.YYYYY

 

로 고정됩니다. 소수점의 위치는 구현에 따라 바꿀 수 있지만 일반적으로

 

0.YYYYYYYYY~XXXXXXXX.Y

 

의 범위가 됩니다. 32비트에선 자릿수가 9자리밖에 안 되기에 정수 부분의 최대 값은 아무리 꼼수를 써도 8자리가 끝입니다. 9자리를 꽉 채우면 더 이상 소수가 아니기 때문입니다.

 

이게 64비트가 되면 사용 가능한 자리수가 18자리로 늘어나니까

 

0.YYYYYYYYYYYYYYYYYY~XXXXXXXXXXXXXXXXX.Y

 

까지 표현이 가능하지만 경우에 따라선 이것도 모자랍니다.

 

반면 부동 소수점의 경위 10진수 표현은 32비트에서

 

0. YYYYYY× 10ZZ

 

가 됩니다. 유효 자리수가 약간 줄어드는 대신 -10-126~10127 같은 식으로 아주 넓은 범위의 숫자를 표현할 수 있습니다.

 

마찬가지로 64비트에서는

 

0. YYYYYYYYYYYYYYY× 10ZZZ

 

로-10-1022~101023까지 표현 가능합니다. 소수 부분의 유효 자리수도 15자리까지 늘어나니 과학 기술 연산도 나름대로 커버할 수 있게 됩니다.

 

이러한 특수한 데이터 포맷을 다룰 필요성 자체는 예전부터 알려져 있었으나, 문제는 이를 실현하려면 CPU의 회로가 거대화한다는 것입니다. 특히 곱셈, 나눗셈의 처리와 Sin/Cos, exp/log 같은 특수 함수의 연산 회로가 꽤 커지게 됩니다.

 

4.jpg

 

인텔 8087

 

실제로도 나중에 설명할 인텔 8086과 그 FPU인 인텔 8087을 비교하면 8086의 트랜지스터 수는 2만 9000개인데 비해 8087은 4만 5000개로 FPU가 크기가 더 큽니다. 이를 하나의 패키지로 만들면 당연히 다이 크기도 커지고 수율도 떨어지니 가격도 비싸질 수밖에 없습니다.

 

그렇다고 8086을 구입하는 모든 사람이 FPU를 필요로 하진 않습니다. 대부분의 사용자는 FPU를 쓰지 않지요. 따라서 FPU를 다른 칩으로 나누는 건 경제적인 합리성과 생산의 편리에서도 모두 알맞는 것입니다.

 

여담으로 부동 소수점 연산의 표준 중에 IEEE 754가 있습니다. 이것은 기본 형식과 교환 형식, 반올림 표준 연산 예외 처리 등 부동 소수점 연산에서 필요로 하는 요소를 규격화한 것으로 x86 계열 외에도 많은 CPU와 FPU가 IEEE 754에 준한 형태로 FPU를 구성하고 있습니다.

 

IEEE 754의 기본 형식 중 2진수는 처음에 16비트(반정밀도), 32비트(단정밀도), 64비트(배정밀도), 128비트(4배정밀도)의 4가지 포맷을 예정했으나 8087은 최대 80비트밖에 탑재하지 않았습니다.

 

이것은 128비트를 최대한으로 구현하면 회로 규모가 너무 커지기에 80비트라는 중간 자리수를 허용하도록 IEEE에 강하게 어필한 결과입니다. 그러나 그 결과 4배 정밀도를 지원하는 FPU는 찾아보기 힘들게 됐습니다. 80비트로 상한선을 만들었다는 점에서 8087은 좋지 않은 선례를 만들었다고 할 수도 있겠네요.

 

 

인텔 8087에서 비롯된 FPU의 역사

 

x86 계열 프로세서는 처음부터 FPU를 별도의 칩 형태로 제공했습니다. 아래 그림은 그 변천사를 정리한 것입니다.

 

5.png

 

FPU의 변천사

 

6.jpg

 

인텔 8087

 

우선 인텔 8086/8088이 출시되고 2년이 지난 후에 인텔 8087에 출시됐습니다. 2년이 걸렸다는 건 그만큼 개발에 시간이 걸렸다는 말이기도 합니다. 8087은 세컨드 소스 공급도 이루어져 IBM/AMD/사이릭스의 3개 회사가 완전히 호환되는 세컨드 소스 제품을 공급했었습니다.

 

8087 코어를 바탕으로 80186/80188 전용 FPU인 인텔 80187이 1989년에 공급 개시했는데 80186/80188는 임베디드용이라 수요는 그리 크지 않은 듯 하며 1991년에 판매 중단됐습니다.

 

7.jpg

 

인텔 80287

 

이후 인텔 80286 전용 FPU인 인텔 80287이 출시됐습니다. 이것도 AMD/사이릭스/IIT에서 세컨드 소스 제품을 출시했지요. 참고로 IIT는 Integrated Information Technology Inc.의 줄임말로서 1987년에 설립된 팹리스 반도체 기업입니다.

 

IIT는 호환 FPU 외에 VGA 호환 칩도 만들었는데 이 분야에서 사업은 썩 좋지 않아 1990년에 시장에서 철수하고 회사 이름을 8x8 Inc.로 변경했습니다. 이후엔 VoIP(Voice over IP) 관련 기기 등으로 방향을 바꿨으며 지금도 계속 사업을 진행 중입니다.

 

인텔이 FPU를 낸 후에 세컨드 소스가 나오기까지 상당한 시간 차이가 있는 건, 처음부터 수요가 그리 크지 않았던 FPU는 가격이 비싸기에 수익이 크며, 어느 정도 가격이 떨어질 때까지 세컨드 소스 공급을 보류했던 것이 이유로 꼽힙니다.

 

8.jpg

 

인텔 80387SX

 

상황이 복잡해진 건 80387 호환 세대부터입니다. 인텔 80386/80386SX도 아직 FPU를 내장하지 않아 인텔 80387/80387SX 같은 별도 칩으로 1989년에 출시했는데요. 이때 인텔은 세컨드 소스 공급에 의존하지 않고 대량의 호환 칩을 내놓았습니다.

 

인텔은 80386에서 세컨드 소스 공급을 하지 않기로 방침을 정했고 그 결과 주요 제조사는 모두 직접 호환 칩을 개발했습니다. 인텔 제품의 가격이 워낙 높기에 가격만 잘 맞추고 성능이 높으면 판매량이 괜찮았을 것이라 전망했을 것입니다.

 

C&T, 사이릭스, IIP, RiSE 등이 당시 유명했던 업체이며 그 외에도 Xtend, LG Technology(80386이 1985년에 나왔고 금성사가 1995년에 LG 전자로 이름을 바꿨으니 우리가 알고 있는 그 LG는 아니겠지요?) , Symphony Laboratories 같은 생소한 업체도 있었습니다. 그 중에서 Symphony Laboratories는 샘플 칩만 내놓는 데 그쳤습니다.

 

그 중 가장 유명한 것은 ULSI일지도 모르겠습니다. 정식 명칭은 ULSI Systems Technologies로 1987년에 설립된 회사인데, 창립자 겸 CEO인 George Hwang는 원래 인텔 직원이었으며 분사돼 나온 후 80387 호환 칩을 만들기로 계획했습니다.

 

80387의 호환 칩 목록에 AMD가 없는 건 우연이 아닙니다. 당시 AMD는 직접 80387 호환 칩을 만들 여력이 없었습니다. 그 대신 AMD는 ULSI에 투자해 완성된 칩을 AMD 브랜드로 출시하기로 했습니다.

 

그러나 인텔이 ULSI에 대해 여러 소송(민사, 형사, 특허권 침해 소송)을 걸면서 법적인 절차가 길어지자 ULSI의 제품 출시는 다른 호환 칩 업체보다 늦어졌고 결국 상업적으로도 실패했습니다. 당연히 AMD도 ULSI 칩을 이용하는 계획을 파기하게 됐습니다. 이 이야기는 Tim Jackson의 저서인 Inside Intel에서 다뤄지면서 유명해진 것입니다.

 

결국 코프로세서 시장은 인텔이 인텔 80486에서 드디어 FPU을 CPU 코어에 통합하면서 급격히 사라지게 됩니다. 어쨌건 이런 호환 FPU가 나올 때쯤 인텔 80486에 출시됐고, 그 다음해엔 인텔 80486이 시장으 주류가 됐으니 이는 어쩔 수 없는 일입니다.

 

 

FPU는 CPU 코어에 통합. 프로세서 업그레이드를 대체

 

다음에 인텔이 출시한 인텔 80487SX란 FPU는 사실 80486DX 그 자체입니다. 인텔은 이 당시 80486DX에 내장된 FPU을 무효화해서 가격을 낮춘 칩을 80486SX란 이름으로 출시했는데, 이 80486SX 기반 시스템에서 업그레이드를 제공하기 위해 FPU 코프로세서를 내놓는다는 식으로 나온 것이 이 80487SX가 되겠습니다.

 

9.jpg

 

인텔 80487SX

 

80487SX가 장착되면 메인 프로세서인 80486SX는 작동하지 않으며 FPU 처리를 포함한 모든 CPU 처리를 80487SX가 하게 됩니다. 따라서 엄밀히 말하면 코프로세서가 아니라 프로세서 업그레이드라 할 수 있겠습니다.

 

10.jpg

 

RapidCAD

 

인텔 80487SX에 이어 1992년에는 RapidCAD라는 제품이 나오는데, 이는 386 호환 486 프로세서이며 i80387DX 소켓에 장착됩니다. 이것 역시 코프로세서가 아니라 프로세서 업그레이드라 봐야 할 것입니다.

 

 

인텔 이외의 코프로세서

 

인텔 이외의 코프로세서를 보면 우선 NexGen의 Nx587이 있습니다. 이는 Nx586의 회로 규모가 커지면서 FPU를 외부로 뺀 제품인데, 원래 Nx586 자체의 명령어 셋트는 펜티엄 호환이지만 패키지는 독자적인 것이며 Nx587 역사 독자적인 패키지를 쓴 것이었습니다.

 

11.jpg

 

NexGen NX587

 

글쓴이는 Nx586을 탑재하는 메인보드를 쓴 경험이 있는데, 당시 일본에서 유통됐던 것은 대부분이 미국 Alaris의 NexGen586/90MHz가 탑재된 제품이며 메인보드에 Nx587 소켓은 없었습니다. Nx587 소켓이 달린 메인보드를 본 적이 없다보니 이게 유통은 된 것인가 궁금하다고 하네요.

 

NexGen은 후속작인 Nx686에서도 FPU를 외장형(Nx687)으로 뺄 계획이었으나 AMD가 인수한 후 K6이라는 원칩이 됐습니다. 이 K6에 탑재된 FPU는 다이 크기 절감을 위해 원래의 파이프라인 구조인 Nx687이 아니라 성능이 더 낮은 것을 이용했습니다.

 

12.jpg

 

Weitek 3167

 

이를 좀 더 극단적으로 한 것이 Weitek입니다. Weitek은 원래 모토로라의 MC68020 전용 FPU로 출시했던 Weitek 1164/1165라는 IEEE 754 호환 FPU를 제조했으며 이를 80286용으로 바꾼 것이 Weitek 1167입니다.

 

Weitek 1167의 성능을 더 높인 것이 나중에 나온 Weitel 2167과 80386 전용으로 만든 Weitek 3167, 80486 전용으로 만든 Weitek 4167입니다. 이듶 제품은 인텔 x86 시리즈와 패키지/소프트웨어 호환성이 없기에 인텔 사용자에게 어필할 수 없었습니다.

 

13.png

 

Weitek 3167의 데이터 시트에서 발췌. 독자적인 121핀 PGA 패키지를 쓰지만 전용 소켓이 없는 메인보드를 위해 이런 도터보드를 제공합니다.

 

그럼 하드웨어와 소프트웨어 호환성을 어떻게 마련하느냐는 게 문제인데요. 예를 들어 Weitek 3167의 경우 도터보드 모듈을 쓰는 걸 제시한 바 있습니다.

 

즉 인텔 80486과 Weitek 3167을 모두 장착한 도터보드를 만들고 이를 메인보드의 80386 소켓에 장착하는 것입니다. 다만 Weitek 4167에서는 신호 수가 늘어나서 그런지 메인보드에 전용 소켓을 넣는 식으로 바뀌었습니다. 물론 전용 소켓을 쓰는 제품이 많지 않다보니 상업적으로는 별로 성공하지 못한 듯 합니다.

 

14.png

 

Weitek 3167의 데이터시트. Weitek 3147에서는 핀 수가 142핀으로 늘어났습니다. 도터보드는 무리였던 듯 하네요.

 

 

2. 동영상 재생, 통신, 물리 연산에 특화한 코프로세서

 

위에선 FPU(부동 소수점 연산 유닛)만 소개했습니다. 그러나 코프로세서는 메인 프로세서와 협동해서 동작하는 것을 가리키니 꼭 FPU만을 코프로세서라 부를 수 있는 건 아닙니다. 그러니 FPU 이외에 어떤 코프로세서가 있는지 보도록 하겠습니다.

 

15.jpg

 

다만 여기서 가장 어려운 것이 가속 장치(엑셀러레이터)와 뭐가 다르냐는 것입니다. 예를 들어 GPU는 그래픽 처리를 전문으로 하는 일종의 코프로세서입니다. 다이렉트 X와 OpenGL은 소프트웨어만으로 실행하는 것이 불가능하진 않습니다. 모두 소프트웨어 레퍼런스 드라이버를 제공하기 때문입니다. 다만 그렇게 하면 속도가 느리기에 하드웨어로 처리할 뿐입니다.

 

이 관점에서 보자면 소프트웨어 방식으로 메인 프로세서에서 처리할 수 있는 걸 대신 처리하는 것 역시 일종의 코프로세서라 할 수 있을 것입니다. GPU는 제품 수도 많고 아예 따로 소개해야 하는 분야다 보니 여기선 생략하겠지만, 여기에서 소개하는 것은 코프로세서라기보다는 가속 장치라고 알려진 것이 꽤 있습니다.

 

 

동영상 재생에 특화된 비디오 코프로세서

 

동영상 분야는 옛날부터 액셀러레이터가 필요했습니다. PC에서 동영상을 다루게 된 것은 애플의 퀵타임, 혹은 마이크로소프트가 윈도우 3.0에 추가한 윈도우 MME(Multi Media Extentions)를 제공하기 시작한 1991년까지 거슬러 올라갑니다.

 

당시의 PC/AT 호환 컴퓨터는 인텔 486 기반, 매킨토시는 모토로라 MC68040을 탑재한 Quadra가 최신 기종이었던지라 동영상을 제대로 다룰만한 스펙은 아니었습니다.

 

당시 쓰인 포맷은 대체로 8비트 컬러 QVGA(320×240)였으나 그 외에 160×120이나 QCIF(176×144)도 있었고 동영상 포맷이 비압축인 경우도 드물지 않았습니다. 이후 PC/AT 호환 기종이나 맥에서도 동영상 압축 포맷을 지원하기 시작했지만, 여전히 CPU의 처리 성능은 압도적으로 부족했습니다.

 

처리 부하가 더욱 커진 것은 1993년에 MPEG-1이 표준화되면서였습니다. 이것을 이용한 컨텐츠로 비디오 CD가 등장했는데요. 이는 CD-ROM 한장에 VHS 화질의 동영상을 최대 74분 저장할 수 있어, 비압축 CD와 같은 1411.2Kbps로 동영상과 음성을 압축 저장할 수 있습니다.

 

MPEG-1에서는 재생 보정, 색공간 변환, DCT 처리 등 부하가 늘어나면서 당시의 하이엔드 PC나 맥으로선 실시간 재생이 어려울 정도였습니다.

 

16.jpg

 

동영상 재생 칩 MPACT!

 

바로 이 시장에 등장한 것이 지금은 사라지고 없는 Chromatic Research의 MPACT!입니다. Chromatic Research를 설립한 사람은 램버스의 설립자 중 하나인 Mike Farmwald입니다.

 

MPACT!는 792비트의 VILW/SIMD 프로세서(기본적으로는 VILW 프로세서이나 내부에서 SIMD 형식으로 데이터 처리할 수 있는 장치가 있음)와 4KB의 SRAM을 패키징한 칩으로 외부에 RDRAM을 탑재했습니다.

 

17.jpg

 

MPACT!를 탑재한 PCI 확장 카드

 

MPACT!는 MPEG-1 동영상 인코딩을 하나의 칩만으로 처리할 수 있었기에 당시엔 CD-ROM 드라이브와 함께 MPACT!의 확장 카드를 조합해 판매하는 게 유행했습니다.

 

18.jpg

 

MicroProcessro Report의 1996년 11월 18일호에 게재된 MPACT! 2의 블럭 다이어그램. 6개의 ALU 그룹으로 구성돼 총 1080비트를 지녔으며 파이프라인 스테이즈는 35개에 달했습니다.

 

이 MPACT!를 더욱 강화한 것이 MPACT!2입니다. 이것은 초기형 MPACT!의 2배 성능을 내는 것이 목표로 원래는 1997년 크리스마스 시즌에 나올 예정이었으나 실제로는 1998년이 되서야 출시됐습니다.

 

문제는 그 때 이미 CPU의 계산 능력이 급격하게 높아졌다는 것입니다. 초기 MPACT!가 나왔을 때는 CPU의 연산 능력이 낮았으니 이후 펜티엄 MMX가 등장하면서 동영상 처리는 다소 정확도를 희생하면 성능을 높일 수준이 됐습니다. 또 1999년부터는 펜티엄 3의 SSE나 AMD의 K6-2가 나오면서 성능 차이가 더 줄었습니다. 또 MPACT!의 특징이었던 MediaWare가 별로 좋지 않았다는 점도 제품 수명을 줄이는 원인이었습니다.

 

결정적인 것은 S3나 ATI 등이 그래픽 코어에 부분적이라고는 해도 동영상 재생 유닛을 넣었다는 것입니다. 여기에 CPU의 연산 성능을 조합하면 MPEG-1은 물론 더 부하가 높은 MPEG-2라 해도 나름대로 재생할 만 했습니다. 그 바람에 동영상 가속 장치로서 MPACT!의 수요 완전히 사라졌다고 해도 과언이 아니었습니다.

 

MPACT!2는 3D 랜더링도 제공하던 제품이었으나 적절한 API을 지원하지 않다보니 이 쪽에서 수요는 거의 없었습니다. 동영상 인코딩까지 할 수 있었다면 이야기가 또 달라졌을 수도 있겠으나 이 부분은 MPACT!는 물론 MPACT!2에도 없던 것이었고 후속작인 MPACT!3은 완성도 되지 못했으며 결국 1998년 10월에 ATI에 인수됩니다.

 

다만 이후로 GPU 제조사는 계속해서 동영상 인코딩/디코딩용 액셀러레이터를 GPU에 통합하는 형태로 제공하고 있습니다. 이것은 CPU의 발전을 넘어설 기세로 동영상 포맷의 부하가 높아지고 있기 때문입니다. 최근에는 4K 해상도를 지원하는 H.265 포맷을 CPU로만 처리했을 경우 프레임이 한자리수인 경우도 있어 동영상 가속 장치를 쓰기도 합니다.

 

 

GPU 내장 동영상 가속 장치의 전성기때 등장한 SpursEngine

 

동영상 액셀러레이터 시장은 한동안 GPU 내장 뿐이었으나 2008년에 도시바가 SpursEngine을 출시합니다.

 

19.jpg

 

SpursEngine SE1000을 탑재한 기판

 

20.jpg

 

1장의 기판에 4개의 SpursEngine를 탑재한 리드텍 윈패스트 HPVC1111 Four Wheel Drive SpursEngine 4x4

 

원래는 도시바의 제품에만 SpursEngine이 탑재됐으나 2009년에는 확장 카드가 출시됐고 2010년에는 이를 4개 장착한 확장 카드도 출시됐습니다.

 

이 프로세서의 기반은 IBM과 SCE(소니 컴퓨터 엔터테인먼트), 도시바가 공동 개발한 Cell BE 입니다. 여기서 범용 처리 PPE(Power Processor Element)를 빼고 SPE(Synergistic Processor Element)도 4개로 줄인 대신 MPEG-2와 H.264을 대응하는 동영상 처리 회로를 탑재한 것이지요.

 

이에 따라 동영상 인코딩/디코딩 시 성능 개선과 CPU 부하의 절감이 가능했으나 실제 제품은 2012년에 거의 단종됐습니다. 도시바의 SpursEngine 사이트도 2010년 7월 이후엔 갱신이 없다가 페이지 자체가 사라졌지요.

 

그 이유는 여러가지가 있으나 코프로세서도 계속해서 성능과 기능을 높이지 않는 한 범용 CPU나 GPU에게 성능과 가격에서 뒤쳐진다는 것 때문입니다. SpursEngine도 예외는 아니었다고 하네요.

 

21.jpg

 

매트록스 Radient eCL

 

참고로 업무용으로는 동영상 인코딩 전용 액셀러레이터/코프로세서가 다양하게 나왔습니다. 예를 들어 그래픽카드 업체로선 이제 그 입지가 사라졌다고 할 수 있는 캐나다의 매트록스 같은 곳은 업무용 시장에서 여전히 존재감이 있으며, Radient eCL 같은 FPGA 기반 동영상 가속 장치를 출시한 적도 있습니다.

 

이 시장에는 일본의 글래스 벨리(캐노퍼스)도 제품을 출시하고 있으나 그쪽까지 이야기하면 너무 장황해지니 여기에선 생략하겠습니다.

 

 

팩스부터 기가비트 이더넷까지 담당하는 통신 코프로세서

 

통신 관련 액셀러레이터는 여러가지가 있었으나 코프로세서의 역할을 명확하게 수행했다고 볼 수 있는 건 인텔의 SatisFAXtion이 최초라고 할 수 있습니다.

 

22.jpg

 

인텔 SatisFAXtion 모뎀/400

 

이는 팩스의 송수신을 자동으로 하는 확장 카드입니다. 출시는 1991~1992년에, 저가형인 SatisFAXtion Modem/100은 129달러, 중급형인SatisFAXtion Modem/200이 369달러, 고급형인 SatisFAXtion Modem/400이 549달러였습니다.

 

1991~1992년은 MS-DOS 시절이었습니다. 당시엔 팩스를 다루기 위해서 이미지 데이터의 처리가 따로 필요했습니다. 즉 SatisFAXtion은 단순히 모뎀 신호를 주고 받는 것이 아니라 G3 FAX 포맷의 취급이나 MS-DOS에서 작동하는 워드 프로세서 출력 G3 FAX 포맷으로 변환하는 것까지 수행했습니다.

 

G3 FAX 포맷으로의 변환은 CPU에서도 처리했지만 일단 포맷 변환 후 팩스 송수신은 보드의 컨트롤러가 전부 맡기에 그런 의미에선 분명 코프로세서라 할 수 있을 것입니다.

 

SatisFAXtion은 인텔의 기대만큼 팔리진 않았으며 또 소프트웨어 지원도 부담이 되서 그런가 1996년에는 시장에서 거의 사라졌고 1997년에는인텔의 위탁을 받아 SatisFAXtion를 개발했던 FaxBack, Inc.에 상표를 매각, 이후의 제품은 대만에서 내놓게 됐습니다.

 

이렇게 완전한 액셀러레이터가 아니라 일부 기능을 지닌 것만으로 예를 들어보자면 TCP Offloading이 있습니다. TCP Offloading은 인텔이 판매하는 일부 이더넷 카드에서 도입한 적이 있습니다.

 

또 미국의 Bigfoot Networks(지금은 퀄컴 아데로스에 인수돼 킬러라는 브랜드로 판매중)가 판매했던 Killer Xeno Pro는 TCP/IP 처리를 전부 온칩 컨트롤러가 담당하기에 어떤 의미에선 코프로세서라 부를 수 있을 것입니다.

 

23.jpg

 

24.jpg

 

기가비트 이더넷 카드 킬러 제노 프로

 

이 회사의 최신 솔루션인 킬러 E2200은 그정도까지는 아니고 그저 레이턴시가 적은 네트워크 컨트롤러라는 포지션으로 팔리고 있습니다.

 

원래 킬러 제노 프로는 프리스케일의 e300이라는 임베디드 컨트롤러에 필요한 네트워크 스택을 모두 넣어 PCI-E로 CPU와 통신하는 구성이었으나, 퀄컴 아데로스에 인수된 후엔 아데로스의 기가비트 이더넷 컨트롤러의 특정 브랜드로 판매됐으며, 그렇게 된 이상 액셀러레이터/코프로세서 기능을 탑재하기란 현실적으로 어렵게 됐습니다.

 

 

RS-232C에서 고속 통신이 가능한 확장 가속 보드

 

다시 옛날로 거슬러 올라가면 1990~1992년에는 RS-232C에서 고속으로 통신하는 액셀러레이터가 몇개 상품화됐습니다. 그땐 이더넷이 보급되지 않아 일반 유저는 RS-232C 포트로 통신하는 것이 일반적이었습니다.

 

RS-232C 포트는 일반적으로 9600bps~38400bps의 속도로 통신 가능했으나 일부는 115.2Kbps로 통신할 수 있는 것도 있었습니다. 그 중 920Kbps에 가까운 속도로 통신할 수 있는 보드가 당시 가격으로 2만엔 정도였다고 하네요.

 

이 정도의 속도라면 CPU에서 관리가 불가능하니 통신 관리는 모두 전용 보드에서 진행했습니다. 당시에는 프로토콜 스택 같은 건 존재하지 않았으며 파일 전송 소프트웨어가 고속 통신 보드에 직접 접속해 쓰는 식이었으니, 코프로세서라기보다는 액셀러레이터에 가까운 것이겠지만 어쨌건 그러한 제품도 있었습니다.

 

 

PhsyX 덕분에 보급된 물리 연산 프로세서

 

25.jpg

 

물리 연산 프로세서 PhysX PPU

 

2006년에 갑자기 Ageia의 PhysX가 등장했습니다. 원래는 스위스의 NovodeX AG라는 회사가 NovodeX라는 명칭으로 개발한 소프트웨어 기반 물리 엔진을 2004년에 Ageia가 NovodeX AG를 인수하면서 이름을 PhysX로 바꿨

 

26.jpg

 

PhysX를 탑재한 PFG의 PCI 확장 카드 PFGRPHYSX128P

 

PhysX PPU를탑재한 액셀러레이터 카드는 몇몇 업체에서 발표했는데 이게 어느 정도의 성능 개선 효과를 봤는지는 리얼리티마크의 동영상을 보시는 게 빠를 것입니다.

 


허나 2006년에 제품은 나왔지만 게임에서 이 PhysX API를 지원하지 않으면 사용할 수 없었으니 보급은 지지부진했습니다. 그러던 중 NVIDIA가 회사를 인수해 지포스 기반의 GPU에서도 사용이 가능해졌습니다. 지포스 GPU에서만 쓸 수 있다는 말이기도 하지만요.

 

NVIDIA는 지포스의 보급을 위한 도구를 손에 넣었지만 반대로 게임 업체에서는 NVIDIA가 관리하는 API를 사용하는 걸 꺼리다보니 오히려 PhysX의 보급은 늦어졌습니다.

 

최근에는 물리 엔진의 수요가 나오면서 AMD 기반 GPU를 탑재하는 PS4나 XBox One에서도 PhysX를 지원하면서 겨우 표준적인 API의 길을 걷게 됐습니다. 다만 이것은 CPU나 GPU가 처리하기에 처음에 Aegia가 상정했던 코프로세서와는 다른 형태의 구현입니다.

 

 

3. 암호화 통신에 GPGPU까지. 현재 활약 중인 코프로세서

 

지금까지는 일반 사용자들도 친숙한 분야의 코프로세서를 봤지는 이번에는 그렇지 않은 것들을 보도록 하겠습니다.

 

 

SCSI 등의 스토리지 분야에서 활약한 코프로세서

 

스토리지는 오래 전부터 고성능 액셀러레이터가 쓰여왔던 분야입니다. 이 분야의 첫 제품은 아답텍(Adaptec)의 AHA-1742라 보이는데요. 이것은 EISA 버스에서 동작하는 Fast SCSI 용 DMA 컨트롤러였으나 내부에 RISC 기반의 PhaseEngine이라 불리는 CPU를 탑재해 프로토콜을 일부 처리했습니다.

 

27.jpg

 

PhaseEngine을 탑재한 아답택의 PCI 버스용 UltraSCSI(SCSI-3) 호스트 어댑터

 

다만 최초의 PhaseEngine는 4MIPS 정도의 성능을 낸 것에 그쳤습니다. 뒤이어 10MIPS의 PhaseEngine을 탑재한 AIC-7xxx 시리즈는 컨트롤러 시장에 진출해 AHA-2742/2842/2942 같은 SCSI 컨트롤러에 쓰였습니다.

 

최근 PC에선 IDE가 주류를 차지하면서 SCSI 컨트롤러는 서버나 워크스테이션에서만 볼 수 있게 됐는데요. SCSI도 Fast SCSI에서 Ultra/Ultra2/Wide Ultra2/Ultra160로 점점 속도를 높여 나가 보다 높은 처리 성능이 필요하게 됐습니다. 그 결과 Ultra160을 지원하는 AIC-7899는  20MIPS의 PhaseEngine을 2개 탑재하게 됐습니다.

 

28.jpg

 

AIC-7899를 탑재한 아답텍의 PowerDomain 39160

 

다만 SCSI 그 자체는 Ultra320(320MB/s) 수준으로 끝났으나 나중에 SAS(Serial Attached SCSI)가 보급되면서 속도가 더 오른데다, Ultra SCSI가 보급될 때부터 레이드에 대한 수요도 나오게 되면서 더 높은 가속 장치의 성능을 요구하게 됐습니다.

 

레이드라고는 해도 레이드 0이나 레이드 1이라면 그 정도로 높은 성능은 필요 없습니다. 문제는 레이드 5인데요. 이 경우 데이터의 XOR 연산을 계속해서 실행할 필요가 있습니다. 그래서 하드웨어적으로 XOR 연산을 실시하고 다른 레이드 처리를 정리해서 수행함으로서 되도록 CPU 부하를 줄이는 방향으로 발전하게 됩니다.

 

이런 카드에는 여러 종류의 CPU가 쓰입니다. 예를 들어 인텔은 i960이나 XScale을 스토리지 분야에 사용했습니다. 또 ARM/MIPS/PowerPC 같은 프로세서를 탑재하거나 전용 ASIC을 사용한 곳도 있습니다.

 

29.jpg

 

2002년에 인텔이 선보인 XScale의 목표 시장. 2002년이다보니 클라이언트가 펜티엄 4입니다.

 

이러한 시장은 지금도 남아 있으나 최근에는 하드디스크를 SSD가 대체하면서 처리 속도에 한계가 보이고 있습니다.

 

일부 회사는 SSD를 단순히 SAS/SATA로 연결하는 게 아니라 플래시 메모리를 직접 연결해 레이드를 구성하는 제품을 출시하기 시작했습니다. 이렇게 되면 다른 범용 CPU로는 만족할 만한 속도가 나오지 않으니 FPGA나 ASIC로 컨트롤러를 직접 만들어 사용합니다.

 

 

암호화 통신과 네트워크. 지금도 코프로세서가 활약 중

 

앞에서 TCP Offloading을 수행하는 코프로세서를 소개했는데, 최근 쓰이는 네트워크에선 이 정도로는 비교가 안될 만큼 높은 처리 성능을 필요로 합니다.

 

예를 들어 인텔은 2011년의 IDF 베이징에서 LTE 기지국 처리를 코어 i7로 대체한 연구 프로젝트를 소개한 바 있는데요. 실제로 쓰이는 기지지국의 CPU는 그보다 더 앞선 것입니다.

 

30.jpg

 

IDF 2011에선 전용 하드웨어 대신 아이비브릿지 기반 코어 i7 프로세서를 사용해 C-RAN(Cloud Radio Access Network:기지국과 안테나를 분리해 클라우드처럼 동적으로 할당)을 구성하는 걸 소개했습니다.

 

아래 그림은 프리스케일이 기지국용으로 현재 제공 중인 QorIQ Qonverge B4860라는 CPU인데, 이 CPU에는 프리스케일의 e6500 2스레드 코어가 4개 있어 코어 i7처럼 동시에 8개의 스레드가 동작합니다.

 

31.jpg

 

QorIQ Qonverge B4860의 블럭 다이어그램. 왼쪽 아래에 보라색으로 표시한 것이 통신 프로토콜용 코프로세서입니다. 가운데 아래에 있는 Queue Management, Buffer Management, SEC도 코프로세서와 같은 기능을 합니다.

 

게다가 StarCore SC3900이라는 DSP 코어를 6개 탑재하고 MAPLE-B3라 불리는 LTE나 3/3.5G 통신 프로토콜을 해석해서 처리하는 코프로세서를 탑재하고 있습니다.

 

이 B4860은 1000명 정도의 사용자를 염두에 둔 Macro Cell, 대규모 기지국용 SoC인데 이정도 급이 되면 통신 프로토콜 등의 고정된 처리는 코프로세서에서 처리하는 것이 성능, 소비 전력, 다이 크기에서 모두 유리합니다.

 

 

CAVIUM Networks의 OCTEON III

 

이러한 건 프리스케일에만 국한된 것도 아닙니다. 예를 들어 미국 CAVIUM Networks의 OCTEON III를 보면 최대 32코어의 MIPS64 기반 네트워크 프로세서가 RAID/XOR 엔진과 DPI(Deep Packet Inspection) 엔진, 압축 처리 엔진 등의 코프로세서와 이를 제어하는 애플리케이션 가속 관리자가 CPU 코어 외부에 있어, 이를 함께 사용해 CPU의 부하를 줄이고 있습니다.

 

OCTEON III의 특징은 TDP가 3W 미만으로 억제됐다는 것입니다. 보급형이라 CPU 코어는 1개지만 CPU 성능을 사용하는 네트워크 처리라면 성능이 상당히 떨어지나, 코프로세서의 보조를 통해 일정한 처리 성능을 유지할 수 있습니다.

 

여기까지의 이야기는 CPU에 내장된 코프로세에 관한 것이긴 하나 서버에선 TLS/SSL의 액셀러레이터가 확장 카드로 제공되기도 합니다. TLS는 Transpoer Layer Security, SSL은 Secure Socket Layer의 줄임말로 인터넷에서 암호화 통신을 할 때 쓰는 프로토콜입니다.

 

예를 들어 웹 브라우저에서 https://로 시작되는 인터넷 주소에 액세스할 경우 그 통신은 SSL를 사용해 암호화되기에 중간에 감청한다 하더라도 해독이 불가능합니다.

 

이 암호화를 CPU에서 하면 나름 부하가 걸리기에 전용 하드웨어를 사용해 암호화 처리를 함으로써 CPU의 부담을 줄이자는 생각이 당연히 나오게 됩니다.

 

33.jpg

 

Silicon Ltd.의 TLS/SSL 가속 장치

 

그것을 실현한 것이 TLS/SSL 액셀러레이터로서 미국 Silicon Ltd.는 다양한 확장 카드 형태로 가속 장치를 제공하고 있습니다. 이것 역시 일종의 코프로세서라 불러도 무방할 것입니다.

 

무엇보다 어느 정도 규모가 커지면 서버에 코프로세서를 추가하고 처리 속도를 높이는 것 보다, SSL/TLS를 위한 전용 장치를 추가하고 여기서 SSL/TLS를 처리하는 게 효율적이라는 말이 당연히 나오게 됩니다.

 

34.jpg

 

A10 Networks의 애플리케이션 딜리버리 컨트롤러 썬더 AX 시리즈

 

미국 A10 Networks가 제공하는 AX 시리즈가 좋은 예일 것입니다. AX 시리즈는 클라이언트와 서버 사이에 위치해 클라이언트가 전송한 SSL 액세스 요청을 받아 암호화/복호화 처리를 도맡아 함으로서, 서버에서 처리하던 암호화 작업이 사라지기에 서버 부하를 줄이는 구조입니다.

 

A10 Networks는 이를 SSL/TLS Offload라 부르는데 가속 장치를 CPU나 시스템 외부로 빼내는 발상은 네트워크에서 특히 두드러지고 있습니다.

 

 

FPGA를 코프로세서로 사용

 

FPGA을 코프로세서로 사용한다는 발상은 오래 전부터 존재했습니다. FPGA에 대해 간단히 설명하자면 하드웨어 회로를 프로그램의 형태로 자유롭게 구성하는 것입니다.

 

35.jpg

 

FPGA의 대표적인 사례

 

프로그램은 전용 언어(Verilog와 HDL등)를 사용하는 것이 일반적이지만, 최근에는 상당히 큰 규모의 회로를 FPGA로 구성할 수 있게 됐습니다. 단순하게 표현하면 FPGA는 ASIC에 비해 2~3세대 정도 프로세스의 효율이 떨어집니다. 최근에는 FPGA도 모두 28nm 프로세스로 이행하고 있으나 이는 90~65nm 세대의 프로세스에서 제조한 ASIC과 같은 수준의 회로를 만들 수 있다는 뜻입니다.

 

그렇게 효율이 떨어지는데 왜 쓰는 것일까요? ASIC는 로직 설계가 끝나고 물리 구현을 위해 마스크를 만들고 제조하기에 평균 6개월 이상의 기간과 억 단위의 초기 비용이 필요합니다.

 

반면 FPGA는 로직 설계가 끝나면 이론적으로 몇 시간~몇 주만으로도 물리 실장이 끝나고 회로를 만들 수 있습니다. 마스크나 제조에 들어가는 초기 비용이 전혀 없습니다, 소량 다품종의 수요에 맞추려면 ASIC를 만드는 것보다 압도적으로 유리한 것입니다.

 

이런 특성은 코프로세서에서도 매우 유리합니다. 금융 관계 등 특수 알고리즘에 기반한 계산을 소프트웨어로 구현하면 연산에 시간이 너무 오래 걸리게 됩니다. 허나 FPGA를 탑재했을 경우 그 알고리즘을 실행하기 위한 전용 하드웨어를 쓰게 되니까 압도적으로 바른 속도로 실행할 수 있습니다.

 

또 그런 액셀러레이터는 그리 많이 쓰이지 않고 알고리즘도 종종 바뀌기도 하는데, FPGA라면 1개만 만드는 것도 가능하고 프로그래밍을 다시 하는 것도 매우 쉽습니다.

 

그래서 초기에는 FPGA을 탑재한 확장 카드를 PCI 버스 등에 맞춰 이걸 코프로세서로 쓰는 사례가 꽤 있었습니다.

 

또 AMD는 CPU 사이의 연결에 하이퍼트랜스포트 링크를 썼는데 이를 그대로 확장 카드에 접속하는 HTX(HyperTransport eXpansion) 커넥터 규격을 책정, 이걸로 FPGA 분야를 노리기도 했습니다. 그러나 실제 제품으로 나온 건 보지 못한듯.

 

36.jpg

 

HTX 슬롯용 계산 가속 카드 RCHTX-XV4. 2개의 자일링스 FPGA를 탑재합니다.

 

FPGA를 CPU에 바로 연결해 작동시킨다는 건 인텔이 2007년 IDF에서 FSB Licensing 형식으로 발표했습니다.

 

37.jpg

 

2007년 IDF에서 인텔이 발표한 FSB Licensing .

 

Xilinx와 Altera의 하이엔드 FPGA가 인텔의 P4 버스 라이센스를 취득하면서 사용자는 추가 비용 없이 FPGA을 직접 CPU 소켓에 접속, FPGA에 코프로세서 기능을 탑재해 자유롭게 쓸 수 있게 됐습니다.

 

사실 CPU소켓에 직접 접속이라고는 해도 패키지와 핀 배치가 전혀 다른 게 대부분이며 PGA 771 소켓보다 FPGA가 더 큽니다. 그래서 실제로는 아래 그림처럼 우선 CPU 소켓에 Interposer라 불리는 접속용 가이드를 삽입하고 FPGA를 탑재한 도터 카드를 Interposer에 삽입하는 2단계 구조가 많습니다. 라이저 카드라고 보면 될듯요? 

 

38.png

FSB Licensing의 구조

 

그리고 처음에는 FSB만 지원했으나 Xilinx/Altera가 QPI 버스 라이센스를 이후 취득하고 사용하는 등, 계속해서 FPGA를 사용하는 코프로세서의 수요에 맞춰 대응했으며 지금도 일부 사용자들이 사용 중입니다. 눈에 띄지는 않아도 계속 이어지는 것이지요.

 

 

GPU를 범용 계산에 활용하는 GPGPU

 

마지막으로 GPGPU입니다. 인텔의 Xeon Phi(제온 파이), NVIDIA의 테슬라(Tesla), AMD의 파이어스트림/파이어프로(FireStream/FirePro) 등이 여기에 해당합니다. FPGA 방식은 자유도가 높고 성능도 좋지만 하드웨어 프로그래밍의 난이도가 크고 소프트웨어 기반 시설도 직접 준비해야 합니다.

 

39.jpg

 

제온 파이

 

좀 더 쉽게 넓은 분야에서 쓸 수 있는 코프로세서가 필요하다는 수요는 항상 있었으며, 이와 함께 렌더링 성능이 갈수록 높아지지만 다른 용도도 염두에 두고 개발하고 싶다는 GPU 제조사의 생각이 잘 맞아 떨어져 등장하게 된 것이 GPGPU입니다.

 

원래 GPU는 연산 성능을 높이거나 연산 밀도를 높이는 식으로 발전해 왔으며 이는 그대로 범용 수치 연산에 이용할 수 있습니다.

 

허나 모든 용도에서 GPU를 쓸 수 있는 건 아닙니다. GPU의 경우 동시에 여러 계산을 할 수 있지만 레이턴시가 비교적 큽니다. 따라서 레이턴시를 숨길 수 있는 대규모 데이터 처리에 적합합니다.

 

그렇다고 데이터 용량이 무턱대고 크다면 그래픽카드에 장착된 메모리가 부족해지기이 이 균형을 어느 정도에서 잡느냐가 현재 성능 개선에서 중요한 부분 중 하나입니다.

 

또 GPGPU 방식은 대규모 병렬 연산에 잘 맞으나 순차 연산에서는 제 성능을 내기 어렵다는 단점도 있습니다. 그래서 아직 이용할 수 있는 애플리케이션이 한정돼 있습니다.

 

이러한 특징을 내세우는 방법도 각양 각색입니다. NVIDIA는 이미 널리 알려진 CUDA을 가장 큰 무기로 내세워 보급 중이며, 인텔은 개발 툴을 확충시켜 x86과 호환성을 높이고 있습니다.

 

AMD는 OpenCL와의 친화성을 최대한 내세우고 있습니다. 특히 AMD 자신이 퓨전 형식으로 CPU와 GPU을 통합한 APU을 주력 제품으로 삼고 있으며 ARM과 Imagination 테크놀러지 역시 이를 뒤쫒아 OpenCL에 대응하는 CPU/GPU를 출시할 예정입니다. 또 이를 함께 다루는 HSA(Heterogeneous System Architecture)의 소프트웨어 인프라를 현재 정돈하는 중입니다.

 

HSA라는 틀 속에서는 CPU와 GPU의 차이가 없어지니 이를 코프로세서라고 불러야 하는지는 약간 미묘한 점이 있으나, 적어도 앞으로 몇 년 동안은 GPGPU가 코프로세서로 작동할 것입니다.

 

소스

http://ascii.jp/elem/000/000/809/809566/

http://ascii.jp/elem/000/000/811/811864/

http://ascii.jp/elem/000/000/814/814516/

기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.