파이프라인 아키텍쳐

아주 어렸을 때 컴퓨터와 관련된 이야기가 나올 때 이 말을 들으면 웬지 뭔가 혁신된 그런 방식이 아닐까 했던 기억이 있는데, 요즘엔 이런 말을 쓰는 것도 보지 못한 것 같다. 왜 이런 말이 나왔는지도 잘 모르겠고. 너무나도 당연한 설계 방법인데도 불구하고.

지금은 이걸 무슨 설계방식이다 라고 말하는 것도 웃기는 지경이 되었지 싶다. 그렇게 디자인하지 않으면 안되는 것이니까. 반대로 이렇게 설계하지 않으면 어떻게 할 수 있는 것인가? 하는 생각이 들기도 하고.

혹시나 잘 모르는 사람을 위해서 적어보자면,

어떤 일을 빨리 처리하기 위해서 처리기를 병렬로 10대를 늘어놔서 처리속도를 10배 빠르게 했다면, 이것은 하나의 공정을 10개로 쪼개서 개개의 공정을 전문적으로 처리하는 장치를 직렬로 10대 늘어놓아 처리 속도를 10배 빠르게 한 것이다. 과정을 자세히 모른다고 하더라도 상식적으로 기계를 10대 늘렸으니 처리 속도가 어떻게든 개선이 되겠지 예상된다.

그런데 조금 더 들여다보면 공정을 처리하는 라인 (파이프라인)을 잘게 쪼개 길게 만든 것 뿐인데, 어떻게 처리 속도가 10배 올라갈까 하는 의문이 생각이 들 수는 있다. 이것은 한개의 일이 들어가서 처리되어 나올 때까지만을 생각하면 그럴 수 있다.

그런데 들어가는 일의 개수가 엄청나게 많다고 생각하면, 개개의 일이 각각의 처리기를 지나가는 시간이 1/10로 줄었으니까 처리되어 나오는 시간도 1/10로 줄게되어 결과적으로 10배의 속도로 처리되었다고 할 수 있게 된다.

아직 감이 안오는가? 나 혼자 밥을 하는데 1시간이 걸린다 치면, 그 일을 10명이 나눠한다고 치면, 10명이 모두 밥만 할 수도 있고, 10명이 밥을 하는 과정을 10개로 쪼개서 나눠 할 수도 있다. 전자가 병렬처리가 되고 후자는 파이프라인 처리가 된다. 밥을 한번만 한다고 보면 10명이 과정을 10개로 쪼개서 한다고 치면 밥이 되어 나오는 시간은 동일하다. 대신 개개의 사람들이 일한 시간은 줄게 된다. 만일 밥을 수만번 해야 한다고 치면, 개개의 밥이 만들어지는 과정에서의 중간 단계의 밥은 개개의 사람들에게 1/10시간만 머물게 되고 1/10의 시간마다 새로운 밥이 나오게 되니 속도가 10배 증가했다고 말할 수 있다.

CPU에서 파이프라인 처리라는 것은 CPU에서 설계상의 여러가지 제약으로 병렬설계는 못하겠으니까 처리과정을 직렬로 잘게 쪼개놓아서 속도를 개선했다고 볼 수 있다. 파이프라인 설계에서 속도가 진정으로 개선되기 위해서는 동일한 패턴으로 파이프라인을 계속 사용할 수 있게 만들어야 한다.

무슨 말이냐면 들어오는 입력마다 파이프라인에서 머무는 시간이 다르거다거나 지나쳐가는 처리기가 다르다고 하면, 동일한 시간간격으로 처리되어 파이프라인을 빠져나가지 못하니까 데이터의 흐름이 불규칙해지고 그안에 빈 공간이 생기기도 하고 (bubble)해서 처리속도가 느려지고, 최악의 조건에서는 하나의 데이터가 파이프라인을 빠져나갈 때까지 다른 데이터가 아예 들어가지도 못하는 경우도 생긴다. 그러니까, 이 말도 엔지니어링적인 관점에서 나온 마리 아니라 쉽게 말해서 당시의 마케팅 용 문구였구나 할 수 있다.

단일한 형태의 일만을 처리하는 경우에, 또 그 일이 늘상 병렬로 생기는 것이 아니라면, 속도 개선을 위해서 파이프라인 처리를 하는 것은 당연한 일이고 그렇게 하면 속도가 크게 개선되기는 하지만, 너무 당연해서 마케팅 용으로 사용하긴 별 다른 차별점이 없다. 그런데, 해도 해도 성능 개선이 쉽지 않아서 물건 팔기가 어렵다면 파이프라인 처리를 하지 않아도 되는 것을 그렇게 했다고 하고 그래서 성능이 개선되었다고 광고할 수 있는 것이다.

CPU에서 파이프라인 처리를 했다는 것은 그 수많은 instruction 중에서 몇 개 더 만들어놓고, 더 만들어놓은 것들 중에 파이프라인을 더 길게 써야 하는 것이 생겼다거나, 아니면 기존의 파이프라인을 더 쪼개서 공정이 길어지게 되었는데, 그 덕택에 매 파이프라인 스테이지를 머무는 시간이 짧아지게 되었다거나 하면, 이것은 그냥 설계상의 약간의 변경으로 얻어지게 된 결과중 하나였지만, 이것 말고 그다지 획기적인 장점이 없었다면, 마케팅 용도로 쓰여질 수도 있었겠구나 하는 것이다.