컴파일러

컴파일러의 명령 스케줄링의 주된 목적은?

  1. A프로그램의 결과가 바뀌더라도 어쨌든 명령의 수를 줄이는 것
  2. B결과를 바꾸지 않고 명령을 재배열하여 대기 시간을 메우는 것
  3. C실행할 명령을 OS 스케줄러가 고른 순서대로 다시 나열하는 것
정답과 해설 보기

정답: B. 결과를 바꾸지 않고 명령을 재배열하여 대기 시간을 메우는 것

로드나 곱셈의 결과를 바로 사용할 수 없는 경우, 그 결과를 사용하는 명령을 바로 뒤에 두면 CPU는 대기하게 됩니다. 명령 스케줄링은 데이터 의존 관계를 지켜 결과를 바꾸지 않는 범위에서, 의존이 없는 다른 명령을 사이에 넣도록 순서를 재배열하여 대기 시간을 유효하게 활용할 수 있게 합니다. 순서대로 실행하는 CPU에서 특히 효과가 큽니다. 결과를 바꾸는 변환은 허용되지 않으며, OS 스케줄러는 프로세스 전환을 결정하는 별개의 구조입니다.

  • A. 결과를 바꾸는 변환은 허용되지 않습니다.
  • B. 올바릅니다. 의존을 지켜 재배열하여 대기 시간을 메웁니다.
  • C. OS 스케줄러는 프로세스 전환을 결정하는 별개의 구조입니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 위의 함수의 마지막 재귀 호출에 꼬리 호출 최적화를 적용하면 어떤 효과가 있는가?
  2. 컴파일러와 인터프리터의 차이로 올바른 것은?
  3. JIT 컴파일을 사용하는 실행 환경의 특징으로 올바른 것은?
  4. LLVM의 기본 구성으로 올바른 것은?
  5. 컴파일러의 최적화 수준을 지정하는 옵션에서 최적화를 하지 않는 설정(-O0 등)이 자주 사용되는 상황은?

이 분야의 비교