다음 이전 차례

5. 리눅스가 호스트하는 부속 프로세서(Linux-Hosted Attached Processors)

이런 접근은 요새 별로 인기가 없지만 다른 병렬 처리 방법들이 리눅스 시스템을 호스트에 부속 병령 컴퓨팅 시스템으로 사용함으로써 낮은 비용에 고성능을 얻는 것은 거의 불가능하다. 문제는 소프트웨어 지원이 아주 작다는 것이다; 여러분은 거의 혼자이다.

5.1 리눅스 PC는 좋은 호스트이다(A Linux PC Is A Good Host)

일반적으로 부속 병렬 프로세서들은 특정 타입의 기능들을 수행하는 데 전문화되는 경향이 있다.

여러분이 어쩌면 혼자일런지 모른다는 사실에 기죽기 전에 다음과 같은 것을 이해하는 것은 유용하다. 즉, 리눅스 PC가 적절하게 특정 시스템을 호스트하도록 하는 것은 어려울 수 있을지라도 리눅스 PC는 이런 타입으로 사용되는 데에는 적절한 몇개 안되는 플랫폼들 중 하나이다.

PC들은 두가지 주요한 이유 때문에 좋은 호스트이다. 첫번째는 싸고 쉬운 확장 능력이다; 더 많은 메모리, 디스크, 네트웍 등과 가은 리소스들이 쉽게 PC에 추가된다. 두번째는 인터페이스의 용이성이다. ISA와 PCI 버스 프로토타입 카드들이 널리 사용가능할뿐만 아니라 병렬 포트는 완전히 비-침략적인 인터페이스로 적당한 성능을 제공한다. IA32 분리된 I/O 스페이스는 또한 개별 I/O 포트 주소들의 레벨에서 하드웨어 I/O 주소 프로텍션을 제공함으로써 인터페이스를 용이하게 한다.

리눅스는 또한 좋은 호스트 OS이다. 전체 소스 코드의 자유로운 사용 가능성, 많은 "핵킹" 카이드들, 이들은 명백히 대단한 도움이다. 그러나 리눅스는 또한 괜찮은 거의-실-시간 스케줄링을 제공하고 http://luz.cs.nmt.edu/~rtlinux/에는 리눅스의 진정한 실-시간 버전조차 있다. 아마도 완전한 UNIX 환경을 지원하는 반면 리눅스는 Microsoft DOS 또는 Windows에서 실행할 수 있도록 작성된 개발 툴들을 지원하는 것이 조금 더 중요한 사실이다. MSDOS 프로그램들은, 글자 그대로 MSDOS를 실행할 수 있는 프로텍티드 가상 머쉰을 제공하는, dosemu를 사용한 리눅스 프로세스 안에서 실행될 수 있다. 리눅스는 좀 더 직접적으로 Windows 3.xx 프로그램들에 대해서 지원한다: wine, http://www.linpro.no/wine/, 과 같은 자유 소프트웨어는 UNIX/X 환경안에서 정확하고 효율적으로 대부분의 프로그램들을 실행할만큼 충분히 잘 Windows 3.11을 시뮬레이트한다.

다음 두 섹션들은 내가 리눅스에서 지원되었으면 하고 바라는 부속 병렬 시스템들에 대한 예제들을 제공한다....

5.2 그것에 DSP를 적용했는가(Did You DSP That)?

고-성능 DSP(디지털 시그널 처리(Digital Signal Processing)) 프로세서 시장이 번성중이다. 비록 이런 칩들이 일반적으로 어플리케이션-종속적인 시스템들에 임베딩되도록 고안된 것이지만, 그들은 또한 거대한 부속 병렬 컴퓨터들 또한 만들고 있다. 왜 그런가?

어떤 오디오 카드들과 모뎀들은 리눅스 드라이버들이 억세스할 수 있는 DSP 프로세서들을 포함하고 있지만 네개 또는 그 이상의 DSP 프로세서들을 가지는 부속 병렬 시스템을 사용하면 그 댓가가 크다.

Texas Instruments TMS320 시리즈, http://www.ti.com/sc/docs/dsps/dsphome.htm, 는 아주 오랫동안 아주 인기가 있었고 TMS320-기반 병렬 프로세서를 만들기가 쉬었기 때문에 사용가능한 그런 시스템들이 꽤 있었다. TMS320에는 정수-만의 버전과 부동-소숫점 가능 버전들이 있다; 더 오래된 디자인들은 다소 비일상적인 단일-정밀도 부동-소숫점 포멧을 사용했지만 새로운 모델들은 IEEE 포멧들을 지원한다. 오래된 TMS320C4x ('C4x 로 알려짐)는 TI-종속적인 단일-정밀도 부동-소숫점 포멧을 사용해서 80 MFLOPS까지 획득했다; 이에 반해서 단일 'C67x 은 VelociTI라고 불리는 VLIW-기반 칩 아키텍쳐를 사용해서, 1 GFLOPS 단일-정밀도 또는 IEEE 부동 소수점 연산에 대해서 420 MFLOPS 배-정밀도까지 제공할 것이다. 멀티프로세서로 이런 칩들의 그룹을 설정하는 것이 쉬울뿐 아니라 단일 칩안에서도 'C8x 멀티프로세서는 두개 또는 네개의 정수 부속 DSP들과 함께 100 MFLOPS IEEE 부동-소숫점 RISC 마스터 프로세서를 제공할 것이다.

몇개의 부속 병렬 시스템들보다 더 많이 사용된바 있는 다른 DSP 프로세서 패밀리는 Analog Devices http://www.analog.com/ 사의 SHARC(ADSP-2106x로 알려짐)이다. 이런 칩들은 외부 접착(glue) 논리 없이 6개의 프로세서 공유 메모리 멀티프로세서로 설정될 수 있다. 그리고 점 더 큰 시스템들도 여섯개의 4-비트 links/chip(칩당 링크)를 사용해서 설정될 수 있다. 대부분의 더 큰 시스템들은 군사용 어플리케이션을 목표로 하는 것 같고 약간 비싸다. 그러나 Integrated Computing Engines, Inc., http://www.iced.com/, 회사는 GreenICE라고 불리는 흥미로운 조그만 두-보드 PCI 카드 셋을 만들었다. 이 유닛은 16개의 SHARC 프로세서들 배열을 가지고 있고 단일-정밀도 IEEE 포멧을 사용해서 약 1.9 GFLOPS의 최고 속도를 낼 수 있다. GreenICE는 $5,000 미만의 가격이다.

내 의견으로는 부속 병령 DSP들은 실제로 리눅스 병렬 처리 커뮤너티가 더 많은 신경을 써야 마땅할 것이라고 생각한다....

5.3 FPGAs과 재설정 가능한 논리 연산

병렬 처리가 가장 높은 성능향상을 얻기 위한 것이 전부이라면 왜 커스텀 하드웨어를 만들지 않는가? 글쎄, 우리는 모두 답을 알고 있다; 이것은 너무 비싸며 개발하기에 시간이 너무 오래 걸리고 조금이라도 알고리즘을 변경할 때면 쓸모없는 것이 되버린다. 기타 등등. 그러나 전자적으로 재프로그래밍 가능한 FPGA(필드 프로그래머블 게이트 어레이(Field Programmable Gate Arrays))들의 요즘의 진보가 이런 제약들의 대부분을 무력화시켜 버렸다. 지금 게이트 밀집도가 충분히 높아서 단순한 전체 프로세서가 하나의 FPGA에 들어가도록 만들어질 수 있고 FPGA를 재설정(재프로그램)하는 것도 또한, 한 알고리즘의 한 국면에서 다음으로 옮겨갈 때라도 재설정하는 것이 타당할만큼의 수준까지 낮아졌다.

이 내용은 심장이 약한 사람들을 위한 것이 아니다: 여러분은 FPGA 설정에 대해서, 리눅스 호스트 시스템 위의 프로그램들에 대해서 인터페이스하는 로우-레벨 코드를 작성하는 일과 함께, VHDL과 같은 하드웨어 기술(description) 언어들로 작업해야 한다. 그러나 FPGA의 비용은 낮고 특별히 낮은-정밀도 정수 데이터(실제, 이런 재료의 조그만 상위집합에 대해서는 SWAR가 더 낫다)에 대해서 작업하는 알고리즘들에 대해서 비용이 낮고, FPGA는 여러분이 데이터를 제공하는 속도만큼 빠르게 복잡한 연산들을 수행할 수 있다. 예를 들어서 단순한 FPGA-기반 시스템들은 유전자 데이터베이스 검색에서 슈퍼컴퓨터보다 더 나은 속도를 만든다.

적절한 FPGA-기반 하드웨어를 만드는 다른 회사들이 있지만 다음과 같은 두 회사가 좋은 샘플을 제시한다.

Virtual Computer Company는 동적으로 재설정 가능한 SRAM-기반 Xilinx FPGA들을 사용한 다양한 제품들을 제공한다. 그들의 8/16비트 "가상 ISA 프로토 보드(Virtual ISA Proto Board)" http://www.vcc.com/products/isa.html는 $2,000 미만이다.

알테라(Altera) ARC-PCI(Altera Reconfigurable Computer, PCI bus), http://www.altera.com/html/new/pressrel/pr_arc-pci.html, 는 비슷한 타입의 카드이지만 알테라 FPGA들과 ISA가 아닌 PCI 버스 인터페이스를 사용한다.

많은 설계 툴들, 하드웨어 기술(description)언어, 컴파일러, 라우터, 맵퍼 등은 윈도우즈나 DOS에서만 실행되는 오브젝트 코드로 제공된다. 호스트 피씨에다 DOS/Windows를 가진 디스크 파티션을 가지고 그것들이 필요할 때마다 리부팅한다. 그러나 이들 소프트웨어 팩키지들은 리눅스에서 dosemu를 사용해서 또는, wine와 같은 윈도우즈 에뮬레이터를 사용해서 실행될 수 있다.


다음 이전 차례