EPIC에 위키 백과 문서는 이미 VLIW와 EPIC에 공통적으로 많은 위험을 설명했다.
누구든지 그 기사에서 운명주의를 느끼지 않는다면 이것을 강조하겠습니다.
CPU 캐시 및 DRAM을 포함하는 메모리 계층 구조의로드 응답에는 결정적인 지연이 없습니다.
다시 말해, 메모리 액세스의 비 결정적 대기 시간 (*)에 대처하지 못하는 하드웨어 설계는 엄청난 실패가 될 것입니다.
(*) "대응"함으로써 합리적으로 우수한 실행 성능 (즉, "비용 경쟁력")을 달성해야하므로 CPU가 수십에서 수백주기 동안 유휴 상태에 빠지지 않도록해야합니다.
EPIC에서 채택한 대처 전략 (위의 위키피디아 기사에서 언급)은 실제로이 문제를 해결하지는 않습니다. 단지 데이터 의존성을 나타내는 부담이 이제 컴파일러에 달려 있다고 말합니다. 괜찮아; 컴파일러에는 이미 해당 정보가 있으므로 컴파일러가 간단하게 준수 할 수 있습니다. 문제는 CPU가 여전히 메모리 액세스를 통해 수십에서 수백주기 동안 유휴 상태가된다는 것입니다. 다시 말해서, 그것은 여전히 일차적 책임에 대처하지 못하는 이차적 책임을 외부화한다.
"실패로 예정된 하드웨어 플랫폼을 제공 한 이유는 무엇입니까? 왜 (1) 컴파일러 작성자가 그것을 사용하기 위해 영웅적인 노력을 기울일 수 없었습니까?"
나는 나의 표현이 그 질문에 대한 답을 분명히 할 수 있기를 바랍니다.
실패의 두 번째 측면도 있으며 치명적입니다.
동일한 전략에서 언급 한 대처 전략은 소프트웨어 기반 프리 페치를 사용하여 메모리 액세스의 비 결정적 대기 시간으로 인한 성능 손실의 적어도 일부를 복구 할 수 있다고 가정합니다.
실제로 프리 페치는 스트리밍 작업 (순차적 또는 예측 가능한 방식으로 메모리 읽기)을 수행하는 경우에만 수익성이 있습니다.
즉, 코드가 지역화 된 일부 메모리 영역에 자주 액세스하면 캐싱이 도움이됩니다.
그러나 대부분의 범용 소프트웨어는 많은 임의의 메모리 액세스를 수행해야합니다. 다음 단계를 고려하면 :
- 주소를 계산 한 다음
- 값을 읽은 다음
- 일부 계산에 사용
대부분의 범용 소프트웨어의 경우이 세 가지를 빠르게 연속적으로 실행해야합니다. 다시 말해, 항상 소프트웨어 로직 범위 내에서 주소를 계산하거나이 세 단계 사이의 스톨을 채우기 위해 충분한 작업을 찾는 것이 항상 가능한 것은 아닙니다.
마구간을 채우기 위해 충분한 작업을 찾는 것이 항상 가능한 이유를 설명하는 데 도움이되는 방법은 다음과 같습니다.
- 실속을 효과적으로 숨기려면 메모리에 의존하지 않는 100 개의 명령을 채워야하므로 추가 대기 시간이 발생하지 않습니다.
- 이제 프로그래머로서 원하는 소프트웨어를 디스어셈블러에로드하십시오. 분석 할 랜덤 함수를 선택하십시오.
- 독점적으로 메모리 액세스가없는 100 개의 명령 (*) 시퀀스를 어디에서나 식별 할 수 있습니까?
(*) 우리 NOP
가 유용한 일을 할 수 있다면 ...
최신 CPU는 파이프 라인을 순환하면서 각 명령의 진행 상황을 동시에 추적하여 동적 정보를 사용하여 동일한 문제를 해결하려고합니다. 위에서 언급했듯이 동적 정보의 일부는 비 결정적 메모리 대기 시간으로 인한 것이므로 컴파일러에서 어느 정도의 정확도를 예측할 수 없습니다. 일반적으로 컴파일 타임에 이러한 스톨을 채울 수있는 결정을 내릴 수있는 정보가 충분하지 않습니다.
AProgrammer의 답변에 대한 답변으로
「컴파일러 ・ ・ ・ 병렬의 추출은 어렵다」가 아닙니다.
최신 컴파일러의 메모리 순서 및 산술 명령 순서는 독립적으로 동시에 실행 가능한 작업을 식별하는 데 아무런 문제가 없다는 증거입니다.
주요 문제는 비 결정적 메모리 대기 시간은 VLIW / EPIC 프로세서 용으로 인코딩 된 "명령 쌍"이 메모리 액세스에 의해 중단 될 수 있다는 것을 의미합니다.
정지되지 않는 명령어 (레지스터 전용, 산술)를 최적화해도 정지 될 가능성이있는 명령어 (메모리 액세스)로 인한 성능 문제에는 도움이되지 않습니다.
80-20 최적화 규칙을 적용하지 못한 예입니다. 이미 빠른 것을 최적화하는 것은 느린 것들도 최적화되지 않는 한 전체 성능을 의미있게 향상시키지 않습니다.
Basile Starynkevitch 님의 답변에 답변
"... (어쨌든) 어려운"것은 아니지만, EPIC은 대기 시간의 높은 역 동성을 처리해야하는 모든 플랫폼에 적합하지 않습니다.
예를 들어, 프로세서에 다음이 모두있는 경우 :
- 직접 메모리 액세스가 없습니다.
- 모든 메모리 액세스 (읽기 또는 쓰기)는 DMA 전송으로 예약해야합니다.
- 모든 명령어는 동일한 실행 대기 시간을 갖습니다.
- 순서대로 실행;
- 넓은 / 벡터화 된 실행 단위;
그러면 VLIW / EPIC이 적합 할 것입니다.
그러한 프로세서는 어디에서 찾을 수 있습니까? DSP. 그리고 이것이 VLIW가 번창 한 곳입니다.
뒤늦게 살펴보면, Itanium의 실패 (그리고 명백한 증거에도 불구하고 R & D 노력이 실패에 계속 부어지고 있음)는 조직적 실패의 한 예이며 깊이 연구 할 가치가 있습니다.
물론 하이퍼 스레딩, SIMD 등과 같은 벤더의 다른 벤처 기업은 큰 성공을 거둔 것으로 보입니다. Itanium에 대한 투자가 엔지니어의 기술에 풍부한 영향을 미쳤을 수 있으며,이를 통해 차세대 성공적인 기술을 만들 수있었습니다.