=> 한마디로 고성능의 컴퓨팅 작업
옛날에는 슈퍼 컴퓨터가 대표적인 HPC 사례였다. 슈퍼 컴퓨터에 많은 CUP를 추가하였다.
하지만 한대의 컴퓨터에서 고성능의 컴퓨팅 작업을 하기에는 문제가 있다(IO, 발열, 확장성)
따라서 현대에서는 Cluster 방식을 사용
여러 서버 PC를 이용하여 HPC를 구현. Cluster 안의 서버 PC가 작업을 분할하여 처리
요즘 슈퍼 컴퓨터 구현 방식
어떤 어플리케이션 or 시스템을 실행 하려고 하는지에 따라 달라짐
High Speed Processor : 단일 CPU 성능을 높여서 고성능을 구현한다. CPU 성능 발전에는 한계가 있다. 바로 발열.(4Ghz의 벽)
Multi Processor : 여러 CPU를 사용하여 고성능을 구현한다. CUP간의 스케줄링, 컨텍스트 스위칭 문제
Multi Thread : 스레드간 같은 메모리 공유(통신)가 가능하다. Single Thread라도 시분할 처리로 인하여 스케줄링이 필요하다.
Multi Process : 프로세스간 통신을 위해 IPC(Inter Process Communication) 필요. 프로세스간 스케줄링 처리가 필요. CPU 자원을 한곳에 집중하여 사용하고 싶다면 Single Process가 좋을 것이다. 하지만 인터럽트와 익셉션 문제를 처리할때 굉장히 어렵다.
High Speed Processor : Single Process, Single Thread 방식을 사용 하는게 유리
Multi Processor : Multi Process, Multi Thread 방식을 사용 하는게 유리
No, CPU는 하나지만 코어가 N 개이다. 따라서 CPU 하나여도 Multi Process 방식 사용 가능
의존성 없는 작업 : 각 작업끼리 의존성이 없어서 개별 처리가 가능하다.(ex: 주식 종복별 분석, Monte Carlo Simulation ML)
의존성 있는 작업 : 각 작업끼리 의존성이 있어서 다른 작업이 완료 되어야 다음 작업 처리 진행이 가능 하다.작업끼리 커뮤니케이션이 많이 필요하다.(ex: 기상 예측 - 부산 결과를 알아야 대구를 계산 가능, 유전자 분석, 응력 Simulation), 클러스터로 구성시 서버 PC간 통신이 많을 것이다. 이것은 곧 오버헤드이다.
문제에 대한 정의와 작업으로 분리, 구성, 취합 전략이 중요하다.
IPC(파이프, 소켓, 리다이렉션) 작업이 필요. IO 작업 비용이 크다.
네트워크 통신이 필요. 이 역시 비용이 크다.
메모리는 L1, L2 캐시, DRAM, CPU간 이동이 발생하여 이 과정에서 Context Switching이 발생하는 오버헤드가 발생하다. 하지만 IO나 네트워크 통신에 비하면 저렴
최근에는 그래픽 카드를 많이 사용하면서 CPU에 있는 메모리응 GPU(GDRAM -> ALU)로 옴기는데 이 비용을 줄이고자 하는 노력이 있다.
IO 작업으로 인하여 CPU의 유휴 시간이 늘어날 수 있기에 HPC를 구현하는 어플리케이션을 개발할때 커뮤니케이션에 대한 고려가 필수적이다.
RDMA, Infiniband등 커뮤니케이션을 줄이고자 하는 기법들이 있다.
문제를 해결하는 방법의 특성에 따라 SMP가 좋을 지 Cluster가 좋을 지 판단
SMP는 CPU를 여러개 추가하여 성능을 높인다 ?
SMP가 반드시 사용해야 하는 경우가 있다.
DBMS : 중앙집중적으로 데이터를 추가/갱신/제거가 필요하다.
Game : 게임을 하는데 PC 여러개 필요 ?
어디까지 지원?, RDMA?, Infiniband?, GPU?
OpenMP, MPich, Cuda, OpenCL
CPU : 수많은 Instruction으로 복잡한 연산에 적합, 코어가 많아도 20개. 코어가 많지 않다는 것은 동시에 작업 하는게 쉽지 않다.
GPU : 수많은 코어로 단순하면서 대향의 연산에 적합, 코어가 기본적으로 4000개. 행렬 연산 같은 작업에 유리. 다만 어플리케이션을 실행하는데 필요한 Instruction이 없다.
CUP 성능을 높이기 수월하고 서버 확장에 용이하다.
MS HPC Pack이 구성된 전용 Pool 제공
HPC를 직접 설치해서 구성하기란 쉽지 않다. HW 환경 구성이 쉽지 않다. windows 같은 경우 AD가 전제 되어야 하고 방화벽등 여러 처리가 필요. 리눅스 역시 어려움
Master : 다른 노드 PC들 관리
Node : 작업을 처리