제작 프로세스와 컴파일러 품질이 CPU 성능에 어떤 영향을 미칩니까?

제작 프로세스와 컴파일러 품질이 CPU 성능에 어떤 영향을 미칩니까?

강의를 읽고 있었는데 CPU 성능에 영향을 미치는 요소가 나열된 슬라이드 중 하나가 어떻게 작동하는지 이해할 수 없습니다.제조 과정그리고컴파일러 품질CPU 성능에 영향을 미침

답변1

컴파일러 품질이 더 쉽습니다 ...

좋은 컴파일러는 코드를 CPU 명령어로 효율적으로 변환하는 방법을 알고 있습니다.

간단한 수학 방정식(예: 1+1)을 수행하는 소프트웨어가 있다고 상상해 보세요. 현명하게 컴파일된 애플리케이션은 CPU에 숫자를 추가하고 답을 저장하고 작업이 완료되도록 지시합니다. 이는 다음과 같이 나타낼 수 있습니다.

  • 메모리 0을 1로 설정
  • 메모리 1을 1로 설정
  • 메모리 0을 1에 추가
  • 메모리 뱅크 0에 저장하세요..간단해요!

나쁜 컴파일러(몇 가지 본 적이 있습니다!)도 동일한 작업을 수행하지만 동일한 작업을 수행하기 위해 추가 명령을 실행하여 성능을 저하시키고 애플리케이션 속도를 저하시킵니다. 동일한 예:

  • 메모리 0 설정
  • 메모리 1 설정
  • 메모리를 0으로 설정
  • 메모리 1을 0으로 설정
  • 메모리를 0에서 1로 설정
  • 메모리 1을 1로 설정
  • 메모리 0과 1의 값을 불러옵니다.
  • 함께 추가하세요
  • 결과를 메모리 0에 저장

이제 비디오 편집기, 그래픽 응용 프로그램, 게임, 심지어 워드 프로세서와 같은 복잡한 응용 프로그램은 실행하는 데 수십만(수천만은 아닐지라도)의 작업을 수행해야 할 수도 있다는 점을 명심하십시오! 이것이 바로 좋은 컴파일러의 영향력입니다!

제조 프로세스는 제조가 공유 기능을 통해 함께 "접착"되거나 여러 응용 프로그램이라는 점에서 이러한 확장입니다. 이러한 작업이 제대로 수행되면 동일한 최종 결과를 달성하는 데 더 적은 컴퓨팅 성능이 필요합니다.

답변2

컴파일러의 품질(최적화 능력)은 기계어 코드가 하드웨어 리소스에 얼마나 잘 매핑되는지를 결정합니다. 컴파일러 최적화는 수행되는 작업량을 줄일 수 있습니다(예: 루프를 풀면 분기 수가 줄어들 수 있고, 레지스터 할당은 메모리 액세스 수를 줄일 수 있으며, 인라인은 호출 오버헤드를 제거하고 특정 호출자가 사용하지 않는 코드를 제거할 수 있음), 일정 대기를 피하기 위한 작업(예: 종속 명령어가 기다릴 필요가 없도록 로드를 더 일찍 예약), 작업을 보다 효율적으로 수행하는 특수 명령어 활용(예: 벡터화는 SIMD 명령어를 사용할 수 있음), 캐시 동작을 활용하기 위한 메모리 액세스 구성(예: , 내부 루프가 구조의 소수 멤버에만 닿을 때 구조 배열을 배열 구조로 변환합니다.

(일부 컴파일러 최적화는 모든 또는 대부분의 하드웨어에 적용되고 다른 일부는 특정 하드웨어 구현에 더 구체적입니다. 또한 비순차적 실행에 대한 하드웨어 지원이 덜 예약된 코드의 실행을 향상시키더라도 좋은 명령어 스케줄링은 여전히 ​​측정 가능한 결과를 제공할 수 있습니다. , 작다면 유익합니다.)

제조 공정에 따라 에너지 사용, 스위칭 속도, 트랜지스터 사용 면적(및 기타 구성 요소의 유사한 특성)이 결정됩니다. 분명히 더 빠르게 전환되는 트랜지스터는 더 높은 성능을 허용합니다. 트랜지스터당 면적을 줄이면 경제적으로 제조 가능한 칩에 더 많은 트랜지스터를 사용할 수 있습니다(이는 더 많은 성능으로 해석될 수 있습니다.) 구성 요소 간의 통신 시간을 줄일 수 있습니다(예: 캐시 액세스 대기 시간은 트랜지스터 스위칭 속도뿐만 아니라 거리에 따라 제한됩니다). 에너지 사용은 성능을 어느 정도 제한합니다. 전달해야 하는 전력이 많을수록 해당 전력을 전달하기 위해 더 많은 "핀"(솔더 볼)을 사용해야 하므로 칩에서 메모리, I/O 또는 통신에 사용할 수 있는 잠재적인 수가 줄어듭니다. 다른 프로세서에서는 폐열을 추출하는 것도 경제적 한계를 나타냅니다. 스위칭 에너지가 낮다는 것은 주어진 전력 예산 내에서 더 많은 작업을 수행할 수 있음을 의미합니다. 유휴("누설") 전력이 낮다는 것은 더 많은 트랜지스터에 전력을 공급하고 작업을 수행할 수 있다는 것을 의미합니다(이는 상태를 유지하기 위해 항상 전력을 공급해야 하는 SRAM의 경우 특히 중요할 수 있습니다).

관련 정보