FPGA 코프로세서 자동 생성을 통한 알고리즘 가속화 1 FPGA 코프로세서 자동 생성을 통한 알고리즘 가속화 1
최혜진 2008-01-29 09:46:44
 

오늘날 시스템 설계자들은 기가헤르츠급 컴퓨터에 맞는 임베디드 설계 구현에 많은 어려움을 겪고 있다. 임베디드 시스템에서는 가장 큰 계산 요구 사항이 상대적으로 적은 수의 알고리즘으로 결정되는 경우가 많다. 이는 프로파일링 기법을 통해 식별되며 설계 자동화 도구를 사용하여 하드웨어 코프로세서로 빠르게 변환될 수 있다. 변환된 코프로세서는 오프로드된 프로세서와의 인터페이스 연결을 통해 `기가헤르츠급`의 성능을 제공할 수 있다.

글│Glenn Steiner, Kunal Shenoy, Dan Isaacs, David Pellerin, 자일링스


오늘날 시스템 설계자들은 공간, 전력 및 비용의 제약으로 인해 기가헤르츠급 컴퓨터에 맞는 임베디드 설계 구현에 많은 어려움을 겪고 있다. 그러나 다행히도 임베디드 시스템에서는 가장 큰 계산 요구 사항이 상대적으로 적은 수의 알고리즘으로 결정되는 경우가 많다. 이러한 알고리즘은 프로파일링 기법을 통해 식별되며 설계 자동화 도구를 사용하여 하드웨어 코프로세서로 빠르게 변환될 수 있으며 변환된 코프로세서는 오프로드된 프로세서와의 효율적인 인터페이스 연결을 통해 `기가헤르츠급`의 성능을 제공할 수 있다.

여기서는 코드 가속화와 하드웨어 코프로세서로의 코드 변환 기법에 대해 설명한다. 또한 보조 프로세서 장치(APU) 기반 기법을 적용한 실제 이미지 렌더링 사례 연구를 통해 벤치마크 데이터를 이용하여 가장 올바른 의사 결정을 수행하는 프로세스에 대해 알아본다. 설계에는 플랫폼 FPGA로 구현된 이머시브 파워PC(PowerPCTM)를 사용한다.

코프로세서의 가치

코프로세서는 주 처리 장치에서 일반적으로 수행되는 알고리즘을 제거하기 위해 주 처리 장치와 함께 사용되는 처리 요소이다. 일반적으로 하드웨어에서 구현되는 코프로세서 기능은 여러 소프트웨어 명령을 바꾼다. 따라서 코드 가속화는 여러 코드 명령을 단일 명령으로 줄이고 하드웨어 명령을 직접 구현함으로써 수행된다.

가장 널리 사용되는 코프로세서는 부동 소수점 장치(FPU)로서, CPU와 밀착 결합된 유일한 일반 코프로세서이다. 범용 코프로세서 라이브러리는 없다. 팬티엄4와 같이 라이브러리가 있는 경우라도 코프로세서와 CPU를 쉽게 결합할 수 없다.


그림 1과 같이 자일링스 버텍스-4 FX FPGA에는 각각 APU 인터페이스를 갖는 하나 또는 두 개의 파워PC가 있다. FPGA 내부에 프로세서를 내장함으로써 단일 칩으로 사용자가 원하는 완벽한 처리 시스템을 설계할 수 있다.

APU 인터페이스가 장착된 통합 파워PC는 FPGA 내부에서 구현할 수 있는 밀착 결합된 코프로세서를 사용한다. 주파수 요구 사항과 비밀 번호 제한으로 인해 외부 코프로세서를 사용하는 것은 쉬운 일이 아니다. 따라서 파워PC에 직접 연결된 애플리케이션 고유의 코프로세서를 만들어 소프트웨어 가속 속도를 현저히 향상시킬 수 있다. 또한 FPGA는 재프로그래밍이 가능하므로 CPU 연결 코프로세서 솔루션을 빠르게 개발하고 테스트할 수 있다.

코프로세서 연결 모델

코프로세서는 CPU 버스 연결, I/O 연결 및 명령 파이프라인 연결 형태로 사용할 수 있으며 각 연결 형태를 혼합한 형태로도 사용이 가능하다.

CPU 버스 연결

프로세서 버스 연결 가속기를 사용하려면 CPU가 버스를 통해 데이터를 이동하고 명령을 보낼 수 있어야 한다. 일반적으로 단일 데이터 트랜잭션에 여러 프로세서 주기가 필요하다. 데이터 트랜잭션은 버스 조정에 의해 방해를 받을 수 있으며 느린 프로세서 클럭 속도에서 버스가 클러킹 되도록 해야 한다는 점도 고려해야 한다. 버스 연결 가속기에는 직접 메모리 액세스(DMA) 엔진이 포함될 수 있다. DMA 엔진을 사용하는 경우 추가 로직이 필요하지만 CPI에 관계 없이 버스 연결 메모리에 있는 데이터 블록에서 코프로세서를 작동시킬 수 있다.

I/O 연결

I/O 연결 가속기는 전용 I/O 포트에 직접 연결된다. 데이터와 컨트롤은 일반적으로 GET 또는 PUT 함수를 통해 제공된다. 이러한 인터페이스는 조정 작업이 적고 제어 방법이 간단하며 연결된 장치가 많지 않으므로 일반적으로 프로세서 버스보다 클럭 속도가 빠르다. 이 인터페이스의 좋은 예가 자일링스 FSL(Fast Simplex Link)이다. FSL은 자일링스 MicroBlazeTM 소프트 코어 프로세서 또는 버텍스-4 FX 파워PC에 연결할 수 있는 간단한 FIFO 인터페이스다. FSL을 통해 데이터를 이동하는 경우 프로세서 버스 인터페이스를 거치는 것보다 지연 시간이 적고 데이터 전송 속도가 빠르다.

명령 파이프라인 연결

명령 파이프라인 연결 가속기는 CPU의 중앙 연산 장치에 직접 연결된다. 명령 파이프라인에 결합되므로 CPU에서 인식되지 않은 명령을 코프로세서가 실행할 수 있다. 또한 피연산자, 결과 및 상태를 데이터 실행 파이프라인과 직접 주고 받을 수 있다. 단일 연산으로 두 개의 피연산자를 처리할 수 있으며, 결과와 상태가 모두 리턴된다. 명령 파이프라인 연결 가속기는 직접 연결 인터페이스이므로 프로세서 버스보다 클럭 속도가 빠르다. APU 인터페이스를 사용하는 이러한 코프로세서 연결 모델 유형에 대한 자일링스 구현에서는 피연산자가 두 개인 일반 명령의 경우 데이터 제어 및 이동 시 클럭 주기가 10배 단축된다.

또한 APU 제어기가 데이터 캐시 제어기에 연결되어 데이터 로드/저장 작업을 수행할 수 있다. 따라서 APU 인터페이스는 DMA 속도와 유사한 초당 수억 바이트의 데이터를 이동할 수 있다. I/O 연결 가속기 또는 명령 파이프라인 가속기 모두 버스 연결 가속기와 결합할 수 있다.

즉, 추가 로직이 필요하기는 하지만 버스 연결 메모리에 있는 데이터 블록에서 작업을 수행하면서 지연 시간은 짧고 속도는 빠른 인터페이스를 통해 명령을 받고 상태를 리턴하는 가속기를 만들 수 있다. 이 문서에서 설명하는 C-to-HDL 도구는 버스 연결 및 I/O 연결 가속기를 구현할 수 있다. 또한 파워PC의 APU 인터페이스에 연결된 가속기를 구현할 수 있다. APU 연결은 명령 파이프라인을 기반으로 하지만 C-to-HDL 도구 세트는 I/O 파이프라인 인터페이스를 구현하며 해당 결과는 I/O 연결 가속기에 보다 가깝다.

FPGA/파워PC/APU 인터페이스

하드웨어 설계자는 FPGA를 통해 프로세서, 디코드 로직, 주변 장치 및 코프로세서를 단일 칩에 장착하는 완벽한 계산 시스템을 구현할 수 있다. 즉, 하나의 FPGA에 수천 개에서 수십만 개에 이르는 로직 셀을 포함할 수 있다.

프로세서는 자일링스 PicoBlazeTM 또는 MicroBlaze 프로세서와 같이 로직 셀에서 구현할 수 있으며, 버텍스-4 FX 파워PC와 같이 하나 이상의 하드 로직 요소일 수도 있다. 로직 셀이 많으면 프로세서 시스템에 적합하고 프로세서가 제어 또는 모니터링하는 데이터 처리 요소를 구현할 수 있다. FPGA는 재프로그래밍 가능한 요소이므로 설계 프로세스 중 원하는 단계에서 그 일부를 프로그래밍하고 테스트할 수 있다. 즉, 설계상의 결함이 발견되면 즉시 해당 부분을 재프로그래밍 할 수 있다.

FPGA를 사용하면 또한 과거 비용상의 문제로 허용되지 않은 하드웨어 계산 기능을 구현할 수 있다. 버텍스-4 FX 파워PC와 같이 CPU 파이프라인과 FPGA l 로직을 밀착 결합함으로써 고성능 소프트웨어 가속기를 만들 수 있다. 그림 2는 파워PC, 통합 APU 제어기 및 연결된 코프로세서를 보여주는 블록 도표다. 캐시 또는 메모리에서 보낸 명령이 동시에 CPU 디코더와 APU 제어기로 전달된다. CPU에서 명령을 인식하면 명령이 실행된다.
명령이 인식되지 않으면 APU 제어기 또는 사용자가 만든 코프로세서가 해당 명령을 인식하고 실행할 수 있다. 선택적으로, 하나 또는 두 개의 피연산자를 코프로세서에 전달하고 결과 또는 상태를 리턴할 수도 있다. APU 인터페이스는 또한 단일 명령으로 데이터 요소를 전송하는 기능을 지원한다. 데이터 요소의 크기 범위는 1바이트에서 네 개의 32비트 Word까지 다양하다. 패브릭 코프로세서 버스(FCB)를 통해 하나 이상의 코프로세서를 APU 인터페이스에 연결할 수 있다.

버스 연결 코프로세서의 유형은 FPU와 같은 상용 코어에서 사용자가 만든 코프로세서까지 모두 가능하다. 코프로세서는 제어 또는 상태 작업을 위해 FCB에 연결될 수 있으며 메모리 데이터 블록에 대한 직접 액세스 및 DMA 데이터 전달을 위해 프로세서 버스에 연결될 수 있다. 또한 FSL과 같이 간단한 연결 구조를 FCB와 코프로세서 간에 사용함으로써 FIFO 데이터 및 제어 통신을 수행할 수 있다. 이러한 경우 성능은 약간 저하된다.

명령 파이프라인 가속기의 성능 이점을 확인하려면 먼저 프로세서 버스 연결 FPU를 사용하여 설계한 후 APU/ FCB 연결 FPU 설계를 구현하는 것이 좋다. 표 1에서는 각 구현 방법에 따른 유한 임펄스 응답(FIR) 필터의 성능을 요약해서 보여준다.


표 1에 나와 있는 것처럼, 명령 파이프라인에 연결된 FPU는 소프트웨어 부동 소수점 작업 속도를 30배 가량 향상시키며 APU 인터페이스는 버스 연결 FPU를 통해 거의 4배의 속도 향상 효과를 제공한다.

<자료제공: 월간 반도체네트워크 2006년 9월호>

디지털여기에 news@yeogie.com <저작권자 @ 여기에. 무단전재 - 재배포금지>