2013-05-05 3 views
4

5 단계의 파이프 라인을 시뮬레이션하려고합니다. 모든 명령어를 구조체에 저장했습니다. 이C++에서 파이프 라인의 5 단계를 시뮬레이트하는 방법은 무엇입니까?

이 예 (기본적으로 lixcal 분석의 단계로 수행) : 지금 p[i] 파이프 라인의 단계 중 하나이며 경우

ADD R1 R2 R3 // R1 = R2+ R3 ... struct pipe{ int pc, string instruction , int r1, int r2....} 

(p[1]pc=pc+1 수, I[i] 지침입니다에게, (I[1]가 될 수있다 ADD R1 R2 R3)

내가 뭘 원하는

at t=1 : p[1] = I[1] 

at t=2 :p[2] = I[1], p[1] = I[2] 

at t=3 :p[3] = I[1], p[2] = I[2], p[1] = I[3] 

at t=4 :p[4] = I[1], p[3] = I[2], p[2] = I[3], p[1] = I[4] 
입니다

... 그런 식으로갑니다 지금까지 C++을 사용하고 있습니다. 어떻게하면 C++에서이 사이클을 나타낼 수 있습니까?

+0

, 당신은 작은 ARM 같은를 만들려고 가상 기기? – icktoofay

+0

@icktoofay 예 정확히 – pokche

+0

문제를 이해하지 못합니다. 질문에 알고리즘을 설명 했으므로 무엇이 필요합니까? – didierc

답변

3

각 timestep에서 배열 앞쪽에 요소를 추가하여 이미 존재하는 배열 요소를 오른쪽으로 이동하려는 것처럼 보입니다. 이

int& p_at_time(int index, int time_moment) { 
    return &p[time_moment-index+1]; 
} 
  • 와 t에서 = 1처럼 O(n**2) 작전을 수행 피할 수 : p_at_time (1,1) = I [1] t에서
  • = 2 : p_at_time (1,2) = 1 [2] (p_at_time (2,2)이 이미 == I[1]) t에서
  • = 3 : p_at_time (1,3) = I [3] (p_at_time (2,3) 및 p_at_time (3,3)의 값이 I [2] 나는 [1] 각각) 즉
관련 문제