명시적 데이터 그래프 실행
Explicit data graph execution명시적 데이터 그래프 실행(EDGE)은 명령 집합 아키텍처(ISA)의 일종으로 인텔 x86 라인 등의 일반적인 프로세서에 비해 컴퓨팅 성능을 향상시키는 것을 목적으로 합니다.EDGE는 많은 개별 명령어를 "하이퍼 블록"으로 알려진 더 큰 그룹으로 결합합니다.하이퍼블록은 병렬로 쉽게 실행할 수 있도록 설계되었습니다.
최신 CPU 설계의 병렬화는 일반적으로 8개의 내부 유닛에서 시작되며, 1개에서 4개의 "코어"까지 EDGE 설계는 수백 개의 내부 유닛을 지원하며 기존 설계보다 수백 배의 처리 속도를 제공합니다.EDGE 컨셉의 주요 개발은 텍사스 대학교 오스틴에서 DARPA의 Polymorpous Computing Architectures 프로그램에 의해 주도되어 왔으며, 2012년까지 1 TFLOPS 성능을 갖춘 싱글 칩 CPU 설계를 생산하는 것을 목표로 하고 있습니다.[1]이는 2018년 현재 실현되지 않았습니다.
종래의 디자인
거의 모든 컴퓨터 프로그램은 데이터를 한 형식에서 다른 형식으로 변환하는 일련의 명령으로 구성됩니다.대부분의 명령에서는 작업을 완료하기 위해 몇 가지 내부 단계가 필요합니다.시간이 지남에 따라 여러 단계의 상대적 성능과 비용이 크게 변화하여 ISA 설계에 몇 가지 큰 변화가 생겼습니다.
CISC에서 RISC로
1960년대에 메모리는 상대적으로 비쌌고 CPU 설계자들은 이 자원을 더 잘 활용하기 위해 명령어와 데이터를 조밀하게 인코딩하는 명령어 세트를 생산했다.예를 들어,add A to B to produce C명령은 메인 메모리, 인덱스 또는 레지스터 등 서로 다른 장소에서 A와 B를 수집하는 다양한 형태로 제공됩니다.이러한 다른 명령어를 제공함으로써 프로그래머는 메모리에서 최소한의 공간을 차지하는 명령어를 선택할 수 있게 되었고, 프로그램의 요구를 줄이고 데이터를 저장할 수 있는 공간을 더 많이 남겨두었습니다.
실제로 이러한 명령어를 동작시키려면 CPU에 회로가 필요했습니다.이는 초기 설계에서는 큰 제약이 되었기 때문에 설계자는 실제로 필요한 명령만 선택해야 했습니다.1964년 IBM은 마이크로코드를 사용하여 필요에 따라 하드웨어에 다소나마 명령을 구현함으로써 광범위한 기계에서 단일 확장 명령 집합 아키텍처(ISA)를 실행할 수 있는 System/360 시리즈를 발표했습니다.이것은 ISA가 확장될 수 있게 해주었고, 이것은 1960년대와 70년대에 컴퓨터 디자인의 귀감이 되었습니다. 이른바 직교 디자인입니다.다양한 모드를 사용하는 이러한 메모리 액세스 스타일은 CISC(Complex Instruction Set Computing)로 알려진 수백 개의 명령 세트를 만들었습니다.
1975년 IBM은 가장 빠른 현대 컴퓨터의 약 3배 성능을 필요로 하는 전화 스위치를 개발하는 프로젝트를 시작했습니다.이 목표를 달성하기 위해 개발 팀은 IBM이 지난 10년 동안 수집한 방대한 양의 성능 데이터를 연구하기 시작했습니다.이 연구는 복잡한 ISA가 실제로 중대한 문제임을 증명했습니다. 가장 기본적인 명령만 하드웨어에 구현되도록 보장되었기 때문에 컴파일러는 특정 기계에서만 실행되는 보다 복잡한 명령어를 무시했습니다.그 결과, 프로그램 시간의 대부분은 단 5개의 명령으로 소비되고 있었습니다.게다가 프로그램이 이들 5개의 명령 중 하나를 호출했을 때에도 마이크로코드는 내부 하드웨어를 호출하는 것이었더라도 그것을 해독하는 데 한정된 시간이 필요했다.더 빠른 기계에서는 이 오버헤드가 상당했습니다.
당시 IBM 801로 알려진 그들의 작업은 결국 RISC(Reduced Instruction Set Computing) 개념을 이끌어냈습니다.마이크로코드가 삭제되어 특정 명령의 가장 기본적인 버전만 CPU에 삽입되었습니다.그 이상의 복잡한 코드는 컴파일러에게 맡겨졌다.많은 회로의 분리, 약예를 들어, Motorola 68000의 트랜지스터 중 1/3는 CPU에 더 많은 레지스터를 포함시킬 수 있게 해주었고, 이는 성능에 직접적인 영향을 미쳤다.1980년대 중반까지 이러한 기본 개념의 더욱 발전된 버전은 덜 발전된 제작 방식을 사용했음에도 불구하고 가장 빠른 CISC 설계의 10배에 달하는 성능을 제공하게 되었습니다.
내부 병렬화
1990년대에 칩 설계 및 제조 프로세스는 모든 잠재적 기능을 내장한 범용 프로세서를 구축할 수 있을 정도로 성장했습니다.성능 향상을 위해 CPU 설계는 내부 병렬화를 추가하기 시작했고 "슈퍼바이저"가 되었습니다.모든 프로그램에는 관련 없는 데이터에 대해 작동하는 명령이 있기 때문에 더 많은 기능 단위를 추가하면 이러한 명령을 동시에 실행할 수 있습니다.CPU의 새로운 부분인 스케줄러는 이러한 독립된 명령어를 검색하여 유닛에 공급하고 출력을 가져와 외부에서 연속적으로 실행된 것처럼 순서를 변경합니다.
슈퍼스칼라 설계에서 추출할 수 있는 병렬의 양은 스케줄러가 상호의존성을 검사할 수 있는 명령의 수에 의해 제한됩니다.더 많은 명령어를 검사하면 병렬로 실행할 수 있는 명령을 찾을 수 있는 가능성을 높일 수 있지만, 이는 스케줄러 자체의 복잡성을 증가시키기 위한 비용일 뿐입니다.많은 노력에도 불구하고 고전적인 RISC 또는 CISC ISA를 사용한 CPU 설계는 약 서너 개의 기능[citation needed] 유닛으로 안정되어 있습니다.
다른 유형의 데이터로 동작하는 명령어를 조사하고 해당 데이터 전용 유닛을 추가하여 시스템에서 성능을 높일 수 있습니다.이것에 의해, 부동 소수점 유닛과 최근에는 싱글 명령, 멀티 데이터(SIMD) 유닛이 도입되고 있습니다.이 접근방식의 단점은 CPU의 범용성이 떨어진다는 것입니다.예를 들어 거의 모든 부동소수점 명령을 사용하는 프로그램을 CPU에 공급하면 다른 유닛이 아이돌 상태일 때 FPU가 흐트러집니다.
현대의 CPU 설계에서 보다 최근의 문제는 레지스터와의 통신 지연입니다.일반적으로 CPU 다이 사이즈는 시간이 지남에 따라 거의 그대로 유지되어 왔지만, CPU 내의 유닛 사이즈는 유닛의 증설로 인해 훨씬 작아지고 있습니다.즉, 하나의 함수 유닛과 글로벌레지스터 파일 간의 상대적인 거리가 시간이 지남에 따라 커졌습니다.일단 메인 메모리와의 통신 지연을 피하기 위해 글로벌레지스터 파일 자체는 피할 수 있는 지연이 되었습니다.
새로운 ISA?
메모리와의 대화 지연이 가격 하락으로 인해 ISA(Instruction Set Architecture)가 CISC에서 RISC로 크게 변화한 것처럼, 설계자들은 병렬로 확장되는 문제와 레지스터와의 대화 지연이 늘어나면서 기본 ISA의 다른 스위치가 필요한지 여부를 고려하고 있습니다.
새로운 ISA를 도입하는 방법에는 Itanium으로 대표되는 VLIW(Very long instruction word) 아키텍처가 있습니다.VLIW는 스케줄러 로직을 CPU에서 컴파일러로 이동하여 명령 스트림을 조사하기 위한 메모리와 타임라인을 대폭 늘립니다.이 정적 배치, 정적 문제 실행 모델은 모든 지연을 알고 있을 때 잘 작동하지만 캐시 지연이 있는 경우 명령어를 채우는 것은 [2]컴파일러에게 어려운 과제임이 입증되었습니다.데이터가 캐시에 있는 경우 5 사이클이 걸릴 수 있는 명령어는 데이터가 캐시에 있는 경우 수백 사이클이 걸릴 수 있지만 컴파일러는 실행 시 해당 데이터가 캐시에 있는지 여부를 알 수 없습니다.이는 전체 시스템 부하 및 컴파일 중인 프로그램과 무관한 기타 요인에 의해 결정됩니다.
기존 설계의 주요 성능 병목현상은 데이터 및 해당 데이터에서 작동하는 명령이 이론적으로 메모리에 분산되어 있다는 것입니다.메모리 퍼포먼스가 전체적인 퍼포먼스를 지배하고 있으며, 기존의 동적 배치, 동적 문제 설계는 퍼포먼스 기능의 한계에 도달한 것으로 보입니다.VLIW는 정적인 배치, 정적인 문제 모델을 사용하지만 프로그램의 런타임 동작을 예측하고 사전에 적절하게 스케줄 하는 것이 어렵기 때문에 마스터하기 어려운 것으로 판명되었습니다.
엣지
이론.
EDGE 아키텍처는 정적 배치, 동적 문제 설계를 기반으로 하는 ISA의 새로운 클래스입니다.EDGE 시스템은 소스 코드를 수백 또는 수천 개의 개별 명령을 포함하는 정적으로 할당된 하이퍼 블록으로 구성된 형식으로 컴파일합니다.이러한 하이퍼블록은 CPU에 의해 동적으로 스케줄 됩니다.따라서 EDGE는 컴파일 시에 독립된 데이터를 검색하는 VLIW 개념과 데이터가 사용 가능하게 되었을 때 명령을 실행하는 슈퍼스케일러 RISC 개념을 결합합니다.
대부분의 실제 프로그램에서는 데이터와 명령의 연계가 명확하고 명확합니다.프로그램은 서브루틴, 프로시저 또는 메서드라고 불리는 작은 블록으로 분할됩니다(사용되는 시대와 프로그래밍 언어에 따라 다름). 일반적으로 데이터가 송수신되는 입구와 출구가 명확하게 정의되어 있습니다.이 정보는 고급 언어가 프로세서의 훨씬 단순한 ISA로 변환됨에 따라 손실됩니다.그러나 이 정보는 매우 유용하기 때문에 최신 컴파일러는 레지스터를 통해 메모리 액세스를 최적화하는 동안 프로그램 내에서 식별을 시도하면서 "기본 블록"이라는 개념을 일반화했습니다.명령 블록에는 제어문이 없지만 미리 정의된 명령이 있을 수 있습니다.데이터 흐름 그래프는 이러한 블록을 사용하여 한 명령 블록에서 다른 명령 블록으로 또는 일부 스토리지 영역으로 데이터 흐름을 지정함으로써 인코딩됩니다.
EDGE의 기본 개념은 ISA 수준에서 이러한 블록을 직접 지원 및 운영하는 것입니다.기본 블록은 잘 정의된 방법으로 메모리에 액세스하기 때문에 프로세서는 관련 블록을 로드하고 데이터를 소비하는 블록에 1개의 블록의 출력이 직접 공급되도록 스케줄링할 수 있습니다.이것에 의해, 글로벌 레지스터 파일의 필요성이 없어져, 프로그램 전체에 의해서 레지스터에의 액세스를 스케줄 하는 컴파일러의 태스크가 심플화됩니다.대신, 각 기본 블록에는 독자적인 로컬 레지스터가 할당되어 컴파일러는 블록내의 액세스를 최적화합니다.이것은 훨씬 심플한 작업입니다.
EDGE 시스템은 1960~1970년대 및 1990년대 데이터 흐름 언어와 매우 유사합니다.데이터 플로우 컴퓨터는 "데이터 플로우 실행 규칙"에 따라 프로그램을 실행하며, 이는 오퍼랜드가 사용 가능한 후 명령이 언제든지 실행될 수 있음을 규정합니다.EDGE와 마찬가지로 데이터의 분리 때문에 데이터 흐름 언어는 본질적으로 병렬이며, 일반적인 컴퓨팅 문제에 대한 해결책으로서 대규모 병렬화에 대한 일반적인 관심이 뒤따랐습니다.당시 기존 CPU 기술을 기반으로 한 연구에 따르면 데이터 플로우 머신이 CPU 근처에 충분한 양의 데이터를 병렬로 유지하는 것은 매우 어려운 일이며, 바로 이 병목 현상을 해결하기 위해서는 수백 개의 CPU와 그 메모리를 하나의 다이로 배치해야 합니다.
데이터 플로우 시스템이 대중화되지 않은 또 다른 이유는 C++와 같은 공통 명령어를 사용하는 것이 어려웠기 때문입니다.대신, 대부분의 데이터 흐름 시스템은 Programaph와 같은 전용 언어를 사용했고, 이로 인해 상업적 관심이 제한되었습니다.10년간의 컴파일러 연구로 이러한 많은 문제가 해소되었습니다.데이터 플로우와 EDGE 접근법의 주요 차이점은 EDGE 설계가 일반적으로 사용되는 언어로 동작할 수 있다는 것입니다.
CPU
EDGE 기반 CPU는 자체 로컬 레지스터를 가진 하나 이상의 소형 블록 엔진으로 구성됩니다.실제 설계에는 이러한 유닛이 수백 개 있을 수 있습니다.장치는 전용 블록 간 통신 링크를 사용하여 서로 연결됩니다.컴파일러에 의해 블록에 인코딩된 정보로 인해 스케줄러는 블록 전체를 검사하여 입력을 사용할 수 있는지 여부를 확인하고 실행을 위해 엔진에 전송할 수 있습니다. 즉, 블록 내의 개별 명령을 검사할 필요가 없습니다.
약간의 복잡성이 증가하면 스케줄러는 여러 블록을 검사하여 하나의 출력이 다른 블록의 입력으로 공급되는지 여부를 확인하고 이러한 블록을 장치 간 통신 지연을 줄이는 장치에 배치할 수 있습니다.최신 CPU가 수천 개의 명령을 검사하여 병렬 처리를 할 경우 EDGE의 복잡성과 동일한 방법으로 각각 수백 개의 명령으로 구성된 수천 개의 하이퍼 블록을 검사할 수 있습니다.이를 통해 스케줄러는 추가 비용 없이 훨씬 더 나은 범위를 갖게 됩니다.이 개념에 그 이름을 붙이는 것은 이 동작 패턴입니다.그래프는 그 사이에 흐르는 데이터로 연결된 블록의 문자열입니다.
EDGE 개념의 또 다른 장점은 대규모 확장이 가능하다는 것입니다.로우엔드 설계는 프로그램에 의해 블록이 호출될 때 단순히 블록을 전송하는 스터브스케줄러를 가진 단일 블록엔진으로 구성될 수 있습니다.데스크톱용 EDGE 프로세서에는 수백 개의 블록 엔진이 포함되어 있습니다.중요한 것은 이들 설계 간의 변경은 칩의 물리적 레이아웃과 스케줄러만이 알고 있는 개인 정보뿐입니다.단일 유닛 머신용으로 작성된 프로그램은 데스크톱 버전에서 변경 없이 실행되지만 속도는 수천 배 빨라집니다.또한 전력 확장이 대폭 개선되고 간소화되어 필요에 따라 블록 엔진을 켜거나 끌 수 있으며 전력 소비량에 선형적인 영향을 미칩니다.
EDGE 개념의 가장 큰 장점은 모든 종류의 데이터 로드를 실행하는 데 적합하다는 것입니다.CPU의 다른 부분이 다른 종류의 데이터 전용으로 되어 있는 현재의 CPU 설계와는 달리 EDGE CPU는 일반적으로 단일 타입의 ALU와 같은 유닛으로 구성됩니다.여러 프로그램을 동시에 실행하는 데스크톱 사용자는 부동소수점만을 사용하여 단일 프로그램에서 정보를 제공하는 과학 사용자와 동일한 병렬 처리를 얻을 수 있습니다. 두 경우 모두 스케줄러는 유닛에 가능한 모든 블록을 로드하기만 하면 됩니다.예를 들어, 낮은 수준에서는 개별 블록 엔진의 성능이 전용 FPU의 성능에 미치지 못하지만 대규모 병렬 처리를 통해 이러한 이점을 압도하려고 시도합니다.
실장
트립
오스틴의 텍사스 대학교는 TRIPs로 알려진 EDGE ISA를 개발하고 있었습니다.CPU의 마이크로아키텍처를 심플화하기 위해 TRIPS ISA는 각 TRIPS 하이퍼블록에 대해 다음과 같은 몇 가지 명확한 제약을 가하고 있습니다.
- 최대 128개의 명령어가 있습니다.
- 최대 32개의 적재 및/또는 저장,
- 최대 32개의 레지스터 뱅크 읽기 및/또는 쓰기를 발행합니다.
- 블록의 끝을 나타내기 위해 사용되는 하나의 분기 결정이 있습니다.
TRIPS 컴파일러는 하이퍼 블록에 명령을 정적으로 번들하지만 특정 ALU에서 실행되도록 이러한 블록을 정적으로 컴파일합니다.즉, TRIP 프로그램은 컴파일된 정확한 구현에 어느 정도 의존합니다.
2003년에는 4x4 그리드에 16개의 블록 엔진을 탑재한 TRIP 프로토타입과 1메가바이트의 로컬 캐시 및 전송 메모리를 제작했습니다.IBM이 130nm 공정을 사용하여 캐나다에서 개발한 TRIPS의 단일 칩 버전에는 공유 레벨 2 캐시 및 다양한 지원 시스템과 함께 두 개의 "그리드 엔진"이 포함되어 있습니다.이러한 4개의 칩과 1기가바이트의 RAM을 도터 카드에 함께 장착하여 실험합니다.
TRIPS 팀은 2008년에 이용 가능한 하이엔드 범용 CPU의 약 50배인 1 TFLOPS의 지속적인 성능으로 실행할 수 있는 싱글 칩 구현을 최종 목표로 설정했습니다(듀얼 코어 Xeon 5160은 약 17 GFLOPS를 제공합니다).
현금.
CMU의 CASH는 "Pegasus"[3]라는 중간 코드를 생성하는 컴파일러입니다.CASH와 TRIPs의 개념은 매우 유사하지만, CASH는 특정 아키텍처에 대한 산출물을 생성하는 것을 목표로 하지 않기 때문에 블록 레이아웃에 대한 명확한 제한이 없습니다.
Wave Scalar(Wave Scalar)
Washington 대학의 WaveScalar 아키텍처는 EDGE와 실질적으로 유사하지만 "파도" 내에 명령을 정적으로 배치하지는 않습니다.대신, 특수 명령(phi 및 rho)이 파도의 경계를 표시하고 스케줄을 [4]설정할 수 있습니다.
레퍼런스
메모들
- ^ 텍사스 오스틴 대학, "TRIPS: 2012년까지 초당 1조 계산"
- ^ W. Havanki, S. Banerjia, T.제4회 고성능 컴퓨터 아키텍처 국제 심포지엄 진행, 1998년 1월, 266~276페이지, Conte. "광범위 프로세서용 트리지온 스케줄링"
- ^ "Phoenix 프로젝트"
- ^ WaveScalar ISA
참고 문헌
- 텍사스 대학교 오스틴, "TRIPS 기술 개요"
- A. Smith et al., "EDGE 아키텍처용 컴파일", 2006년 코드 생성 및 최적화에 관한 국제회의, 2006년 3월