2013-07-08 4 views
2

최적화 컴파일러는 일반적으로 소프트웨어 파이프 라인에 의한 명령 스케줄링을 고려합니다. 그러나 하드웨어 파이프 라인이 있으므로 소프트웨어 파이프 라인 스케줄링의 장점은 무엇입니까?소프트웨어 파이프 라인의 이점은 무엇입니까?

+1

컴파일러는 하드웨어가 가질 수있는 것보다 전체 계산의 그림이 크기 때문에 소프트웨어 스케줄링을 통해 성능을 향상시킬 수 있으며 하드웨어 스케줄링을 마지막으로 조정할 수 있습니다. –

답변

3

일부 경우 (CPU 특정) 실행 속도는 실행 순서에 따라 달라질 수 있습니다. 소프트웨어 파이프 라이닝을 사용하면 컴파일러는 최종 결과에 영향을주지 않고 명령문을 최적 순서로 재 배열합니다.

최적의 순서는 기존 하드웨어 파이프 라인에 따라 달라질 수 있으며, 일부 레지스터는 특정 실행 순서에 따라 더 최적으로 사용할 수 있습니다.

+0

소프트웨어 파이프 라이닝은 단지 * 재주문 * 또는 오히려 스케줄링 지침 이상의 것입니다. 특히, 코드 크기가 증가하고 레지스터 압력이 증가합니다. – Olsonist

1

소프트웨어 파이프 라이닝을 사용하면 루프를 더 빠르게 실행할 수 있습니다. 어떤 경우에는 정말로 빠릅니다. 예를 들어

: 추가 명령 r0까지 기다려야이 예에서

num = 100; 
i = 0; 
loop: 
load r0 sp+i; 
add r2 r1 r0; 
i++; 
if (i < num) goto loop 

메모리에서로드 된 값을 갖는다. 대기 시간이 3주기라고하면 그런 다음이 루프를 실행하기 위해 반복 당 3 사이클의 오버 헤드가 발생합니다. 이는 상당한 오버 헤드가 될 수 있습니다. 소프트웨어 - 파이프 라이닝을 통해이 오버 헤드를 약간 줄일 수 있습니다. add 명령 실행시에 프로그램 r0에서 이미 값을 갖는 루프 입사 번째 경우

num = 100; 
load r0 sp+0; 
i=0; 
loop: 
add r2 r1 r0; 
i++; 
load r0 sp+i 
if (i < num) goto loop 

. 프로그램이 add 명령에 도달 할 때까지 각 반복에서 값은 r0에 있습니다. 따라서 대기 시간이 줄어 듭니다.

추신 : 아이디어를 설명하기 위해 니모닉을 사용했습니다. 이것은 일부 아키텍처의 실제 어셈블리 언어가 아닙니다.

관련 문제