병렬처리의 단위

병렬처리란 여러 개의 프로그램들 혹은 한 프로그램의 분할된 부분들을 다수의 프로세서들을 이용하여 동시에 처리하는 것이라고 하였다. 그런데 병렬처리에 참여하는 각 프로세서(혹은 독립적인 컴퓨터 노드)에 분담되는 단위 프로그램의 크기에 따라 다양한 수준의 병렬성들이 존재할 수 있다. 그 단위 프로그램은 각각 독립적인 작업일 수도 있고, 더 작게 분할된 프로그램 세그먼트도 될 수 있다. 다만 그들이 서로 독립적으로 처리될 수만 있으면 된다. (이 부분을 원자성이라고 한다.)

  • 작업 단위(job level): 서로 다른 사용자들에 의해 제출된 작업 프로그램들 혹은 한 사용자에 의해 제출된 여러 개의 독립적인 작업 프로그램 단위로 병렬처리 되는 것을 의미한다. 예를 들어, 어느 교수가 강의와 연구를 동시에 수행하는 과정에서 성적관리 프로그램과 실험 데이터를 처리하는 프로그램을 동시에 처리하려고 한다면, 그 프로그램들은 서로 독립적으로 처리될 수 있다. 만약 컴퓨터 시스템 내에 두 개 이상의 프로세서들이 있다면, 이 두 작업 프로그램들은 병렬로 처리될 수 있다.
  • 태스크 단위(task level): 하나의 큰 작업은 내부적으로 서로 다른 기능을 수행하는 더 작은 프로그램들로 분리될 수 있다. 예를 들어, 팔과 다리를 가진 로봇이 있다고 하였을 때, 이 로봇을 움직이기 위해서는 부착된 여러 개의 센서들로부터 정보를 입력받아서 팔과 다리를 적절히 제어하도록 명령하는 컴퓨터 프로그램이 필요하다. 전체 프로그램은 하나의 작업 프로그램이지만, 그것은 여러 개의 태스크들로 분할 될 수 있다. 예시와 같이 보면, 각 팔을 제어하기 위한 태스크들과 각 다리를 제어하기 위한 태스크들로 나누어질 수 있으며, 그들은 병렬로 처리될 수 있다. 물로 ㄴ그들은 처리되는 도중에 상호 연관되는 정보를 교활할 필요도 있을 것이다.
  • 프로세스 단위(process level): 각 태스크는 다시 여러 개의 프로세스들로 나누어 질 수 있다. 여기서 각 프로세스는 특정 함수를 계산하는 정도의 크기이다. 분할은 사용자에 의해 임의로 이루어질 수도 있고, 컴파일에 의해 자동적으로 이루어지도록 할 수도 있다. 프로세스 단위에 대해서는 예시를 보면서 이해하는 것이 좋기 때문에 별도로 글을 작성하도록 하자.
  • 변수 단위(variable level): 프로세스 단위 병렬처리에서 각 프로세스는 여러 개의 프로그램 코드들로 이루어져 있는데, 각 코드(명령어)는 어떤 입력 변수를 받아서 연산을 수행한 후에 출력 변수를 생성한다. 그런데 한 프로세스 내의 여러 변수들을 동시에 계산하는 것이 가능할 수 있기 때문에 프로세스 내에도 병렬성이 존재한다. 그 이유는 변수들이 이전의 반복 루프에서 계산된 변수들을 이용하여 계산되기 때문이다.
  • 비트 단위(bit level): 대부분의 컴퓨터에서는 비트 단위의 병렬 계산이 허용된다. 즉, 하나의 데이터 단위를 구성하고 있는 각 비트들에 대한 독립적인 연산들을 병렬로 처리할 수 있다. 이것은 가장 낮은 수준의 병렬성이라고 할 수 있다.

병렬 컴퓨터의 성능과 효율을 높이기 위해서는 이와 같은 다양한 수준의 병렬성을 최대한 이용할 수 있어야 하며, 그를 위해서는 시스템 구조와 프로세서 구조가 적절히 설계되어야 한다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.