프로세스 단위 병렬처리 부연설명

설명하다가 넘어간 부분이 있어서 마저 설명하려 한다.

프로세스 단위 병렬성을 좀 더 쉽게 이해해보기 위해 예시 그림을 그려보고 정리하려 한다.

예를 들어, 아래와 같은 프로그램을 살펴봅니다.

for i=1,5
{
x(i) = x(i-1)+y(i-1)
y(i) = x(i-2)+y(i-2)

s(i) = x(i)+y(i)
if s(i) >= 100
then a=a+1
else b=b+1
}

이런 프로그램 코드 중에서는 두 개의 프로세스들로 나누어질 수 있다. 앞에 두 문장과 나머지 문장으로 P1, P2로 나눠서 생각해 볼 수 있다. 그런데 이 경우에 두 프로세스들은 병렬로 처리될 수 없다. 그 이유는 P1(i)에서 계산되는 x(i), y(i)를 P2(i)에서 사용해야 하기 때문이다. 그러나, 더 면밀히 분석해보면, P1(i)와 P2(i-1)은 병렬로 처리될 수 있다는 것을 알 수 있다. 즉, 이 프로세스들의 처리 과정을 아래 그림에서처럼 나타내어볼 때, 대각선으로 친 부분에 대해서는 두 개 씩 동시 처리가 될 수 있다.

결과적으로, I=1일 대는 P1만 처리되지만, i=2부터는 P1, P2가 병렬로 처리될 수 있게 된다. 이때, P2를 처리하는 프로세서는 P1을 처리하는 프로세서로부터 그 이전에 계산한 x,y를 전송받아서 사용해야 하기 때문에, 프로세서간 통신이 필요하게 된다.

이처럼 프로세스 단위로 병렬처리를 할 경우에는 다른 처리단위와 달리 병렬화를 위해 확인해야 할 것들이 많다. 그리고 이런 규칙을 사용자(개발자)가 직접 지정할 수도 있고, 컴파일러에 의해 자동화될 수도 있다.