본문 바로가기
My/잡다한 글

[리눅스 클러스터] 하드웨어 병렬화

by 라인T 2020. 4. 23.
반응형

하드웨어의 효율적인 병렬화 방법

1. 하이퍼 쓰레딩(SMT)

하이퍼 쓰레딩이란 프로세서는 한 개의 물리적 프로세서가 마치 여러개의 물리적 프로세서인 것처럼 동작함으로서 여러개의 쓰레드를 한 개의 프로세서가 동시에 한꺼번에 수행시킬수 있는 방식으로 , 기존 일반적인 프로세서 보다 약 30% 정도의 성능향상을 보여줬다.

기존 프로세서 병렬성은 한 개의 명령어(쓰레드)를 동시에 실행시킬수 있는데 반해 , 하이퍼 쓰레딩은 여러 개의 쓰레드를 한번에 동시에 실행 시킬수 있는 특징을 가지고 있다.

 

2. 시스템 레벨 병렬화

시스템 전체의 성능향상을 위하여 시스템 각 구성요소들의 병렬성을 이루는 방식을 의미 하며 , 시스템의 각 구성요소들은 각자 자신의 역활을 수행하면서 전체 시스템을 이루고 있다.

이전에는 마이크로프로세서가 하나인 시스템은 모든 연산이 하나의 마이크로프로세서에 의존 할 수 밖에 없었습니다.

이덕분에 성능이 저하 되었고, 이러한 성능저하를 제거하기 위해 여러개의 마이크로프로세서를 해당 시스템에 설치함으로써 독립적인 다수개의 명령어를 동시에 처리할수 있도록 하여 시스템 전체의 성능을 높이게 되었습니다.

시스템에서는 많은 작업들이 처리되어야 하는데 하드웨어의 물리적인 속도한계 때문에 병렬적으로 작업을 진행하게 만들어서 시스템 전체의 성능향상을 가져올수 있게 될것 입니다.

I/O 서브시스템을 담당하는 SCSI 등과 같은 종류는 병렬성을 극대화한 구조를 가지고 있으며, 각각의 핀들이 독립적으로 동작하면서 작업들을 동시다발적으로 처리할 수 있게 되어있습니다.

 

예시를 하나 하자면 네트워크 인터페이스가 있습니다.

세월이 흐름에 따라 네트워크 성능은 점점 중요해졌고 , 시스템의 빠른 속도를 뒷받침 하기 위해 네트워크 인터페이스의 성능향상이 필요해졌습니다. 그중 한가지 방법은 자동차 도로를 확장하는 것처럼 여러개의 NIC를 설치하여 대역폭을 늘리는 방식 입니다. 다수의 NIC를 하나의 네트워크가 담당하게 되며 , 궁극적으로 성능향상을 하였습니다.

 

이렇게 한개의 구성요소의 성능이 향상된다고 하여 반드시 전체 시스템의 성능이 향상되지는 않습니다. 향상된 성능을 뒷받침 해주는 시스템자체의 지원이 존재해야 합니다. 예를들면 , 사용자는 CPU가 2개가 존재하면 속도가 증가될것이라고 생각합니다. 하지만 일반 데스크탑 프로그램들은 CPU를 2개 활용할 수 있는 구조가 아니기 때문에 높은 성능을 기대할 수 없습니다. 서버용 프로그램들은 일반 데스크탑 프로그램과 달리 여러개의 CPU를 활용할 수 있는 구조로 작성되어 있어 다중 프로세서 환경에 효율적입니다. 

 

소프트웨어의 효율적인 병렬화 방법

프로그램 알고리즘을 예시로 들어보겠습니다.

1부터 1000까지 더하는 알고리즘을 예시로 가지면

쓰레드가 1개 밖에 없는 단순알고리즘은 1부터 1000 까지 하나씩 더해서 값을 구합니다. 

하지만 쓰레드가 10개가 되서 프로그램을 나눠서 돌린다고 생각합시다.

각각의 쓰레드에게 1-100 , 101-200 ... 901-1000 이렇게 따로 따로 나눠서 더하는 작업을 동시에 수행하면 속도는 증가하지 않을까 생각해봅니다.

 

물론 모든작업은 이렇게 병렬화를 할 수 있는것이 아닙니다. 다른 작업은 이어달리기 처럼 이전 작업을 마쳐야 다음작업을 진행할 수 있는 경우에는 병렬적으로 처리 할 수 없습니다. 이런경우를 "의존성" 이라고 합니다, 병렬화를 위해서는 의존성 파악이 매우 중요합니다.

의존성이 있는데 병렬화 한다고 작업을 제대로 못돌리면 시간낭비와 자원낭비가 될게 뻔합니다 , 이런 작업들을 위해

의존성을 파악해서 자동으로 병렬코드로 변경해주는 병렬 컴파일러가 있습니다.

 

기본 개념들

1. 멀티프로세싱

시스템 내에 존재하는 다수개의 독립적인 쓰레드들을 동시에 처리하여 관리할 수 있을까 하는데에서 출발한 아이디어 입니다 , 만일 운영체제가 독립적인 다수개의 쓰레드 관리를 할 수 있고, 각각의 쓰레드를 지원하면서 독립적인 방식으로 쓰레드들의 작업을 수행 시킬수 있다면 그 운영체제는 멀티프로세싱 환경을 지원한다고 이야기 합니다.

시스템에 물리적으로 마이크로프로세서가 2개 설치된다고 해도 , 운영체제에서 2개의 CPU를 모두 파악하지 못하고

1개의  CPU만 파악한다면 나머지 1개의 CPU는 유휴상태가 되고 있습니다. 이를 방지하기 위해 SMP 옵션을 사용합니다

 

2. 쓰레디드 프로세싱

쓰레드는 프로세스 내에서 실행되는 흐름의 단위 입니다. 종종 '경량 프로세스'라고 불리워지며 일반적인 프로세스가

가지고 있어야 할 모든 부분을 갖추고 있지 않기 때문입니다. 시스템의 효율성을 위해서 가벼운 프로세스를 생성하는게 훨씬 효율적일 것입니다. 이러한 쓰레드를 지원하는 프로그램 기법이 바로 쓰레디드 프로세싱 입니다.

예시를 들자면 , 사용자가 한개의 파일을 선택하여 다운로드 받으면서 , 다른 파일을 다운받을 수 있습니다. 하지만 프로그램이 쓰레디드 프로그래밍 기법으로 작성하지 않으면 이 사용자는 파일 다운로드가 완료될 때 까지 사용자

인터페이스를 조작 할 수 없습니다.

 

 

 

반응형

댓글