EE/Parallel Computer Architecture

[Parallel Computer Architecture] Memory access of vector processor

아이스얼그레이 2022. 7. 16. 17:45

본 게시글은 Onur Mutlu 교수의 유튜브 채널에 게시된 강의를 토대로 작성되었습니다.
https://www.youtube.com/c/OnurMutluLectures

 

Onur Mutlu Lectures

This channel contains videos and slides from courses taught and lectures delivered by Professor Onur Mutlu (https://people.inf.ethz.ch/omutlu/). Onur Mutlu is a Professor of Computer Science at ETH Zurich. He is also a faculty member at Carnegie Mellon Uni

www.youtube.com

1. Load/Store Vector from/to Memory

Vector Load/Store 동작은 여러 개의 data element를 Load/Store 해야 합니다.

 

이때 memory에 linear하게 저장된 regular한 vector에 대해, Stride를 정의할 수 있습니다. Stride란 memory에서 element별로 몇 칸 떨어져 있는지를 나타내는 constant 입니다.

 

개념 이해를 위해 가장 간단한 경우인 stride = 1로 가정합니다.

 

만약 1cycle마다 하나의 element를 load할 수 있다면, element는 each cycle마다 consecutive하게 load될 수 있습니다.

 

그런데 만약 memory access에 1cycle 이상의 clock cycle이 요구된다면 어떻게 해결해야 할까요?(당연히 일반적인 memory access는 1cycle 보다 많은 clock cycle을 소모합니다.)

 

이를 해결하기 위해 등장하는 기법이 Memory bank입니다. 여러 bank에 element들을 interleave한다고 표현합니다.

1-1. Memory Banking

SIMD processor에서 memory는 bank라는 단위로 분리됩니다. 이때 bank는 독립적으로 접근할 수 있습니다.

그리고 각각의 bank는 자신만의 data register와 address register을 가지기 때문에 bank의 개수만큼 concurrent한 memory access가 가능하며, one bank access per cycle이 가능해집니다.

 

Vector length가 16인 상황을 가정해봅시다.

element per vector = 16 이기 때문에 memory에서 16개의 element를 load해야합니다.

그리고 위 그림과 같이 memory에 bank가 16개 있고 bank0에 저장된 data element(vector의 첫 번째 element)에 접근하는데 11cycle이 소모된다고 가정하겠습니다.

 

11cycle을 소모해서 bank0에 접근하기만 한다면 one bank access per cycle이 가능해집니다. 각 bank의 index는 vector의 index를 가르키는데, 이때 각 element에 접근하기 위해 현재 element의 주소에 Stride를 더해주면 다음 bank에 접근할 수 있기 때문입니다.

 

bank access와 동시에 현재 Base address와 Stride를 concurrent하게 더하는 동작을 수행한다면 one bank access per cycle이 가능해집니다. 아래 그림을 참고하시면 이해가 쉬울것 같습니다.

 

이때 Base address와 Stride를 더해주는 unit을 Load Store Unit(LSU)라고 합니다.

 

 

이때 이런 bank access를 수행하기 위한 조건이 있습니다.

 

1. Stride == 1

위에서 설명한 상황이 가장 간단한 Stride가 1인 상황을 가정하기 때문입니다.

 

2. consecutive elements interleaved accoss banks

Vector의 element가 bank 전체에 연속적으로 저장되어있어여 합니다. 즉, irregular한 data structure가 아닌 linear한 address를 가지는 regular한 data structure(vector, matrix etc.)에 대해서만 적용 가능한 방식입니다.

 

3. number of banks >= bank latency

즉, bank의 개수가 bank access latency보다 크거나 같아야 합니다.

 

만약 bank의 개수가 bank access latency보다 작다면, 다른 bank로 address(Base + Stride)를 전달해주기 전에 initial bank로부터 data를 받기 때문입니다.

 

사실 이 조건은 명확하게 이해하지 못했습니다. Load 또한 parallel하게 이뤄지기 때문에 필요한 조건이 아닌가 생각되는데, 명확하게 이해한 후 추가하겠습니다.

 

아무튼, 위 3가지 조건을 만족한다면 1element / cycle throughput을 얻을 수 있습니다.

 

예시를 통해 Memory Bank가 clock cycle을 어떻게, 얼마나 줄여주는지 확인해보겠습니다.

 

2. Simple memory banking example