6. Super Computer Architecture

요즘 Super computer를 위한 system의 방식은 대부분, RISC 기반의 Symmetric Multi-Processing(SMP) node들을 fast network로 연결하는 것에서 크게 벗어나지 않는데 이것은 구조상으로 자연스러운 발전 모습인 것 같다. 비교적 값싼 RISC processor와 규격화된 통신 software로 processor들을 연결하는 network product들 덕분에, vendor가 제공하는 complete system 대신 자체적으로 cluster computer를 구성할 수 있게 되었다.

다음 site에 Super Computer에 대한 정보가 더 있다.

6.1. Main Architectural Classes

Machine 자체에 대한 얘기를 하기 전에, 성능을 향상시키기 위해서 고안된 mechanism들을 살펴보는 것이 좋을 것 같다. 첫 번째로 hardware의 구조는 하나의 CPU 성능을 넘어서 computer system의 속도를 높이는 것의 가능성 여부까지도 결정하는 주된 요소이다. Hardware와 더불어 중요한 또 하나의 요소는, 주어진 hardware platform에서 사용될 효율적인 code를 생성하는 compiler의 성능이다. 대부분의 경우 hardware의 영향과 software의 영향을 분리하기는 힘들기 때문에 각각의 영향으로 인한 결과를 분석할 때는 주의해야 한다. 이 chapter에서는 주로 hardware의 구조에 대해서 살펴본다.

그동안 Flynn의 분류체계는 high-performance computer를 분류하는데 유용했다. 이 체계는 instruction과 data의 흐름을 어떻게 조작하는가에 따라서 4가지로 분류한다. 우선은 각 class를 간략하게 설명하고 나중에 좀더 자세히 살펴보도록 한다.

6.2. SISD machines

SISD machine은 하나의 CPU로 하나의 instuction 흐름을 serial하게 처리하는 system이다. 요즘 많은 대형 mainframe들이 두 개 이상의 CPU를 갖긴 하지만 각각의 instruction 처리 흐름은 서로 연관이 없다. 따라서 그런 것들도 (여러개가) 각자의 data space에서 동작하는 SISD machine으로 분류되는 것이 맞다. DEC, Hewlett-Packard, Sun Microsystems의 workstation 대부분이 SISD machine의 예라고 할 수 있다. 이 문서에서는 SISD machine의 정의만 알아두도록 하고 자세히 살펴보지는 않겠다.

6.3. SIMD machines

SIMD machine에서는 1,024에서 16,384개 까지의 많은 processing unit이 똑같은 instruction을 서로 다른 data에 대해서 lock-step으로 수행해서 한 개의 instruction이 많은 data를 병렬적으로 처리하게된다. SIMD machine의 예로는 CPP DAP Gamma II나 Alenia Quadircs 같은 것이 있다.

SIMD system의 하위 분류로 vector processor가 있다. Vector processor는 특별한 구조의 CPU들을 이용해서 하나의 data가 아니라 비슷한 data들의 array를 처리한다. data가 이렇게 vector 단위로 처리되면 결과를 clock cycle당 한 배나 두 배 -- 특별한 경우에는 -- 세 배의 비율로 얻을 수 있다. (system에서는 clock cycle을 내부 시간의 기본 단위로 정의한다.) 따라서 vector processor는 data를 거의 병렬적으로 처리할 수 있는데, 단 이것은 vector mode로 동작할 때 만이다. 이렇게 하면 일반적인 scalar mode 일 때보다 몇 배 빠르게 처리할 수 있다. 실제로는 vector processor를 대부분 SIMD machine으로 인식하며, 예로는 Hitachi S3600이 있다.

6.4. MISD machines

이론적으로 이런 유형의 machine은 하나의 data 흐름에 대해서 여러개의 instruction을 수행한다. 그렇지만 아직까지 이런 종류의 machine이 실제적으로 구현된 적이 없을뿐더러 이런 system은 생각하기도 쉽지 않다. 앞으로의 내용에서 이 유형은 제외하도록 한다.

6.5. MIMD machines

이런 종류의 machine은 여러개의 instruction을 여러개의 data에 대해서 병렬적으로 수행한다. 앞에서 나왔던 여러 개의 processor를 가진 SISD machine과의 차이점은, instruction이나 data가 수행할 작업의 서로 다른 부분을 나타낼 뿐 실제로는 하나의 작업으로 연관이 되어 있다는 점이다. 따라서 MIMD system에서는 여러 개의 sub-task를 병렬적으로 처리해서 결국 수행할 하나의 main task 결과를 얻는데 까지의 시간을 단축할 수 있다. 한편 MIMD system의 종류는 다양하기 때문에 Flynn의 분류체계가 적절하지 않은 면이 있다. 동작하는 방식이 서로 많이 다른, four-processor NEC SX-5와 thousand processor SGI/Cray T3E가 같은 종류로 분류되는 것이다. 그러므로 추가적인 구분을 두고 그것에 따라서 살펴보도록 하겠다.

6.5.1. Shared memory systems

Shared memory system에서는 여러개의 CPU가 하나의 address space를 공유한다. 이 방식에서는 모든 CPU들이 사용할 수 있는 memory가 한 개뿐이기 때문에 data가 저장된 곳에 대한 정보를 굳이 알고 있을 필요가 없다. Shared memory system은 SIMD일 수도 있고 MIMD 일 수도 있는데, Single-CPU vector processor는 전자의 예이고 multi-CPU model은 후자의 예이다. 앞으로는 SM-SIMD나 SM-MIMD라는 약어로 표현하는 경우도 있을 것이다.

6.5.2. Distributed memory systems

이 형태는 각자의 memory를 갖는 CPU들이 서로 network로 연결되어 필요할 때마다 각각의 memory로부터 data를 교환한다. Shared memory machine의 경우와는 달리 user는 원하는 data가 존재하는 위치를 알아야 하고 필요할 때마다 data를 옮겨 주어야 한다. Distributed memory system도 SIMD나 MIMD가 모두 가능하다. lock step으로 동작하는 SIMD system경우에는 processor마다 각자의 분산된 memory를 갖는다. Distributed memory MIMD system의 경우에는 연결되는 network의 topology가 다양한데, topology의 구체적인 정보를 user가 알 필요까지는 없기 때문에 이식성이 좋다. 앞으로는 distributed memory system에 대해서 DM-SIMD나 DM-MIMD라는 용어로 각각을 가리키도록 한다. Shared memory와 distributed memory는 분명히 구분되는 것처럼 보이지만 항상 그런 것은 아니다. 예를 들어, Kendall Square Research system에서는 hardware level에서 "virtual shared memory"라는 개념을 도입했다. Virtual shared memory는 programming level에서도 simulation이 가능해서, processor들에 data를 분산시키는 compiler의 지시 방법으로 High Performance Fortran(HPF) specification이 1993년에 발표되기도 했는데, HPF가 구현된 system은 user 입장에서는 shared memory machine으로 보이게 된다. HP나 SGI/Cray 같은 Massively Parallel Processor system(MPP system이라고도 한다)의 vendor 들도, 물리적으로 분산된 memory를 collective address space로 addressing 함으로써 virtual shared-memory programming model을 지원한다. 그렇게 해서 system의 모든 memory를 하나의 global address space로 사용할 수 있다. 그런 종류의 system에 대해서는 ccNUMA 부분에서 더 다루도록 한다. 참고로 TreadMarks 같은 package에도 workstation들의 network를 위해서 virtual shared memory environment를 제공한다.

6.6. Distributed Processing Systems

최근의 경향 중 하나는 분산 처리(Distributed Processing)인데 이것은 DM-MIMD에서 한 단계 더 나아간 개념이다. 여러 개의 intergrated processor를 몇 개의 box나 workstation, 또는 mainframe 등에 넣는 대신 (Gigabit) Ehternet이나 FDDI 등으로 연결해서 하나의 program 안에서 concurrent하게 수행되도록 하는 것이다. 개념적으로는 DM-MIMD computing과 별로 다를 것이 없지만 processor간의 통신 속도가 좀 느리다. 많은 package에서 distributed computing이 가능한데, 예를 들면 PVM(Parallel Virtual Machine)이나 MPI(Message Passing Interface)가 있다. 이런 "message passing" model이라고 불리는 방식의 programming이 널리 받아들여졌기 때문에 PVM이나 MPI는 대부분 major vendor의 distributed-memory MIMD에 채택되었고, 심지어 호환성을 위해서 shared-memory MIMD에도 적용되었다. 뿐만 아니라 high computational power를 얻기 위해서 HiPPI channel 등으로 shared-memory system을 cluster하는 경향도 있다. 예를 들면 NEC SX-5나 SGI/Cray SV1 등이 이런 구조를 갖는다. 따라서 clustered node 내에서 shared-memory programming style을 사용할 수 있다.

6.7. ccNUMA machines

앞의 내용에서 나왔던 것처럼, 비교적 적은 수의(16개 정도까지) RISC processor를 Symmetric Multi-Processing(SMP) node에 집적시키는 경향을 볼 수 있다. 그런 node 안의 processor들은 실제로는 값싼 network로 연결되어 있지만 가상적으로는 항상 1-stage crossbar로 연결되어 있는 것이다.

이것은 앞에서 나왔던 vector processor와 비슷한 방식이지만 모든 processor들이 전체 address space에 접근할 수 있다는 점에서 다르다. 따라서 그런 system은 SM-MIMD machine이라고 볼 수 있다. 그렇지만 memory가 실제로는 분산되어 있기 때문에 data access operation이 항상 일정한 시간내에 수행된다는 보장이 없다. 이런 system을 ccNUMA라고 하는데 ccNUMA는 Cache Coherent Non-Uniform Memory Access를 뜻한다. 여기서 "Cache Coherent"라는 것은 모든 CPU에 대해서 사용되는 변수가 일관된 값을 가져야 함을 말한다. 즉 이 변수들을 제공하는 cache가 서로 같은 변수값을 일관되게 가져야 하는데 CPU들의 cache가 consistent하도록 만드는 방법에는 여러 가지가 있다. 그 중 하나는 다른 CPU에서 전송중인 변수들을 유심히 관찰하고 있다가 자신이 가지고 있는 변수이면 그 값을 update하도록 하는 snoopy bus protocol을 사용하는 것이다. 그 외에 각 변수의 유효하도록 해주는 특별한 memory인 directory memory를 갖는 방법도 있다.

물리적으로는 memory가 분산되어 있지만 특별한 효과를 위해서 (directory memory처럼) hardware/software가 통합되어 있기 때문에 실제로는 이런 system을 SM-MIMD라고 볼 수도 있다.