선반 완충기
Shelving buffer셸핑 버퍼는 슈퍼스칼라 프로세서의 효율을 높이기 위해 컴퓨터 프로세서에서 사용되는 기술입니다.이를 통해 명령 간의 데이터 종속성에 관계없이 여러 명령을 동시에 디스패치할 수 있습니다.이것에 의해, 순서가 어긋나는 실행이 발생해, 마이크로프로세서의 throughput이 향상됩니다.
배경
슈퍼스칼라 프로세서는 프로세서 자체의 코어로 다수의 명령을 동시에 실행할 수 있지만, 이 동작은 멀티프로세서 시스템과 혼동해서는 안 된다.대부분의 최신 프로세서는 슈퍼스칼라입니다.슈퍼스칼라 프로세서에서는 여러 명령이 동일한 스레드에서 디스패치됩니다.멀티코어 프로세서에는 각각 다른 스레드를 실행하는 여러 프로세서가 포함되어 있습니다.
데이터 의존성에 관한 문제
명령을 동시에 실행하면 데이터 의존성에 문제가 생깁니다.즉, 일부 명령은 다른 명령의 결과에 따라 달라질 수 있으므로 올바른 순서로 실행할 수 있도록 주의를 기울여야 합니다.
예를 들어, 다음과 같은 일련의 지시사항을 들 수 있습니다.
r1 = r2 + r3
r7 = r1 + r4
r7로 업데이트하면 쓰기 후 읽기(Read After Write) 데이터 종속성이 도입됩니다.r7은 실행 전에 r1(레지스터 1)의 올바른 값을 알아야 하므로 명령의 첫 번째 줄은 두 번째 실행 전에 완료해야 합니다.이 유형의 명령은 동시에 또는 동시에 실행할 수 없습니다. 작업 순서는 암묵적으로 직렬입니다.
구조
슈퍼스칼라 프로세서의 경우 프로세서의 명령어 창은 다수의 명령어로 채워집니다(이것을 발행율이라고 합니다).슈퍼스칼라 프로세서가 이러한 명령어를 창에서 CPU 실행 코어로 디스패치하기 위해 사용하는 방식에 따라서는 위에서와 같은 종속성이 있는 경우 문제가 발생할 수 있습니다.
i1, i2, i3(명령 1, 2, 3)를 포함하는 명령 창 3의 폭에 대해 생각해 보십시오.i2가 아직 실행이 완료되지 않은 명령에 의존하여 아직 실행할 수 없다고 가정합니다.
셸빙 버퍼를 사용하지 않으면 슈퍼스칼라 프로세서는 i1을 실행하고 i2가 실행될 때까지 기다린 후 i2와 i3를 동시에 실행합니다.
그러나 셸핑 버퍼를 사용하면 내용에 관계없이 명령 창이 셸핑 버퍼로 비워집니다.다음으로 프로세서는 셸핑 버퍼에서 병렬로 실행할 수 있는 적절한 수의 명령을 검색합니다(즉, 종속성이 없습니다).
따라서 프로세서는 최대 수의 명령을 동시에 실행하여 throughput을 최대화할 가능성이 높아집니다.
레퍼런스
- Dezso Sima, The Design Space of Shelving (PDF), archived from the original (PDF) on 2013-09-28