Practice Problem 5.10

As another example of code with potential load-store interactions, consider the following function to copy the contents of one array to another:

load–store 상호작용이 발생할 가능성이 있는 또 다른 코드 예로서,한 배열의 내용을 다른 배열로 복사하는 다음 함수를 살펴보자.

 

load-store 상호작용 : "이전에 메모리에 쓴 값이 다음에 다시 읽혀서 반복 간 의존성이 생기는 상황"을 말한다.

src : 원본 배열

dest : 복사 대상 배열

n : 원소의 개수


 

Example A : 주소가 겹치지 않는 경우

<의미>

  • store 주소 ≠ 다음 load 주소
  • 즉, 쓴 곳을 다시 읽지 않음

<결과>

  • 임계 경로는 카운터 감소(sub) 쪽만 남음
  • load와 store가 서로 독립
  • CPU가 겹쳐서 실행 가능

>> CPE 낮음

 

Example B : 주소가 겹치는 경우

<의미>

  • store 주소 == 다음 iteration의 load 주소
  • 즉, 이전에 쓴 값을 바로 다음에 읽음

<결과>

  • 의존성 체인 : store -> load -> add -> store -> load -> ....
  • 이 체인이 임계 경로가 됨
  • 반복 간(loop-carried) write/read 의존성 발생

>> CPE 높음


 

A. copy_array(a+1, a, 999)의 효과는?

// 실제 동작
dest = a
src = a+1

i=0일 때, a[0] = a[1]
i=1일 때, a[1] = a[2]
...
i=998일 때, a[998] = a[999]

// 결과
모든 a[i]가 원래 a[i+1]값이 됨

초기값이 모두 i라면:
a[0] = 1, a[1] = 2, ... ,a[998] = 999

 

B. copy_array(a, a+1, 999)의 효과는?

// 실제 동작
dest = a+1
src = a

i=0일 때, a[1] = a[0]
i=1일 때, a[2] = a[1] // 방금 쓴 값을 읽음

// 결과
a 전체가 0으로 수렴(초기 a[0] = 0이라면)

 

C. 왜 A는 CPE 1.2 -> 1.0으로 개선되는데, B는 CPE 5.0이 나오는가?

// A의 경우(a+1 -> a)
- 주소 겹침x
- load와 store 독립
- 언롤링하면:
	- load 여러 개 미리 수행 가능
    - 파이프라인 잘 채워짐
CPE ≈ 1.0

// B의 경우(a-> a+1)
- 주소 겹침o
- 이전 iteration의 store 결과를 다음 iteration에서 반드시 load

stroe->load->store->load-> ....

// 임계 경로가 메모리까지 포함
// 언롤링해도 소용 없음
CPE ≈ 5.0

 

D. copy_array(a, a, 999)의 성능은?

// 실제 동작
a[i] = a[i]

// 논리적 결과
값 변화 없음

// 하지만 성능은?
store 주소 == load 주소(완전 동일)
매 iteration:
	store(a[i]) -> load(a[i])      // 가장 강한 load->store 의존성

// 예상 CPE
빠를 것으로 예상

Solution to Problem 5.10

This problem requires you to analyze the potential load-store interactions in a program.

이 문제는 프로그램에서 발생할 수 있는 load(읽기)–store(쓰기) 상호작용을 분석할 것을 요구한다.

 

A. 0 ≤ i ≤ 998 범위에서 각 원소 a[i]는 i + 1 값으로 설정된다.

B. 1 ≤ i ≤ 999 범위에서 각 원소 a[i]는 0으로 설정된다.

C. 두 번째 경우에서는, 한 반복(iteration)의 load 연산이 이전 반복에서 수행된 store의 결과에 의존한다.

D. 이 경우에는 Example A와 동일하게 CPE가 1.2가 될 것이다. 그 이유는 store 이후의 load 사이에 의존성이 없기 때문이다.

'컴퓨터과학(CS) > CS문제 풀이' 카테고리의 다른 글

Solution to Problem 5.12  (0) 2026.01.18
Solution to Problem 5.11  (0) 2026.01.18
Solution to Problem 5.9  (0) 2026.01.18
Solution to Problem 5.8  (0) 2026.01.18
Solution to Problem 5.7  (0) 2026.01.18