벤치리뷰·뉴스·정보/아키텍처·정보분석

[분석정보] 범용 컴퓨팅을 강화한 Sandy Bridge의 그래픽

tware 2010. 12. 14. 22:00

 

비 그래픽 프로그램을 실행시키기 위한 코어

 

 Intel의 차기 CPU "Sandy Bridge (샌디 브릿지)"에 내장된 그래픽 코어는 전체 구조는 기존의 Intel 그래픽을 계승하고 있지만, 내부 구조는 크게 변경되어있다. 3D 그래픽과 범용 컴퓨팅 및 미디어 프로세싱의 3 분야 각각의 처리를 높이기 위해 프로세서와 주변 기능이 대폭 강화되고 있다.

 그 중에서도 눈에 띄는 것은 범용 컴퓨팅을 위한 확장. Intel은 Sandy Bridge 그래픽 코어는 레지스터 파일을 증대시켜 레지스터를 많이 필요로 하는 범용 컴퓨팅에서도 레지스터가 넘쳐 메모리 액세스가 발생되기 어렵게 했다. 그러나 그것만이 아니다. Sandy Bridge 그래픽 코어는 다른 중요한 범용 컴퓨팅을 위한 확장이 이루어지고 있다.

 요즘의 GPU에서는 비 그래픽의 범용 소프트웨어를 효율적으로 달리게 하는 것이 중요한 테마가 되고 있다. NVIDIA와 AMD의 GPU는 이를 위한 기능을 강화해 왔다. 그 중 프로세서 부분에서는 범용 컴퓨팅을 위해 4종 세트인 기능이 떠올라왔다. (1) 프리디케이션 (Predication) 흐름 제어 제어 (2) 분산기 / 수집기 (3) 장벽 동기화 (4) 아토믹 오퍼레이션의 4 가지다.

 범용 컴퓨팅에서의 Sandy Bridge 그래픽 코어의 최대의 포인트는 이 4 종 세트를 갖춘 것이다. 잘라 말하면, 지금까지의 Intel 그래픽 코어는 다양한 범용 프로그램을 효율적으로 달리게하는 것은 어려웠다. 그러나 Sandy Bridge 그래픽 코어는 이 4 종 세트가 일반 컴퓨팅이 자신있는 NVIDIA GPU와 어느 정도 비슷하게 범용 프로그램을 실행시킬 수 있게 되었다. 간신히 타사 GPU에 늘어선 이라고도 말할 수 있지만, Intel 코어에게는 큰 도약이다.

 

Intel의 Sandy Bridge의 그래픽


벡터 조건 분기에서 프로그래밍이 쉽게


 벡터 연산에서는 같은 명령을 여러 데이터에 대해 수행한다. 그러나 프로그램이 복잡하면 조건 분기 등의 흐름 제어의 제어가 필요하게 된다. 프리디케이션은 이러한 경우의 벡터 조건 분기를 실현하는 기능이다. 조건 분기하여 하나의 벡터의 각 데이터 요소에 대한 명령 스트림이 분기하는 경우도 프리디케이션에 의해 제어가 가능하게 된다.

 예를 들어, 조건 분기하여 벡터 안의 특정 스레드 (또는 스트랜드)가 분기하고 다른 스레드가 분기하지 않은 경우. 실행 유닛은 분기 테이큰과 노트 테이큰 두 분기 경로를 교대로 순차적으로 실행한다. 그리고 조건이 성립한 스레드만 그 연산 결과를 레지스터에 기록. 분기 조건이 성립 여부는 프리디케이션 용 마스크 레지스터에 저장한다. 명령어는 마스크 레지스터의 플래그를 참조하여 마스크 되지 않은 스레드만 이 레지스터에 기록한다.

 이 기능이 있으면 프로그램을 쓰는 쪽은 컴퓨터가 벡터임을 의식하지 않고 분기있는 프로그램을 작성할 수 있다. 분기에서 성능이 크게 떨어질 염려가 없어지기 때문이다.

 따라서 스칼라 프로그램을 쓰면, 자동으로 다수의 데이터에 대해 수행되는 "Single Program, Multiple Data (SPMD) "모델을 보다 광범위 하게 적용이 간단하게 된다. GPU는 원래 1 픽셀에 대해서 셰이더 프로그램을 쓰면 SPMD 모델에 따라 자동으로 수백만의 픽셀에 대해 실행된다. 프리디케이션이 복잡한 분기를 가진 코드도 SPMD 모델에서 어느 정도 효율적으로 수행 할 수있다.

 이것은 CPU의 현재의 SIMD (Single Instruction, Multiple Data) 계 명령과의 차이점이다. Sandy Bridge CPU 코어 측의 AVX (Advanced Vector Extensions)에서도 마스크 로드 및 스토어는 가능하지만, GPU처럼 마스크 전용 레지스터는 가지지 않고, 명령 단위로 마스크도 할 수 없다.

 

벡터 조건분기

 

 

Sandy Bridge의 그래픽 구조

 

Larrabee와 유사한 프리디케이션 기능을 구현


 Sandy Bridge는 명령어 단위의 프리디케이션 기능의 구현을 통해 요즘의 GPU 같은 제어 흐름의 제어가 가능하게 되었다. 무제한 중첩도 가능해지고 있다. Intel은 IDF에서 다음과 같이 설명했다.

 "OpenCL과 DirectX 11 등 연이어 병렬 컴퓨팅 모델이 나타나기 시작했다. 여기서 분명한 것은 그래픽스는 픽셀을 처리뿐만 아니라, 일반 스칼라 코드와 같이 분기가 많은 코드 처리도 늘어날 것으로 가정해야 한다는 것이다. 따라서 SIMD 유닛에서 매우 효율적으로 분기를 처리 할 필요가 있다. 분기 소프트웨어 오버 헤드가 생기지 않도록 해야한다. "

 "또한 하드웨어를 프로그램 하는 방법을 우리는 은유적인 프로그래밍 모델을 취할 필요가 있다. 소프트웨어의 관점에서 말하면, 누가 소프트웨어를 쓰는 경우에도 스칼라 프로그램으로 다룰수 있게 하는 것이 바람직하다. 싱글 스칼라 코드를 쓰면 그것이 벡터로 스케일되어 시스템 안의 벡터를 고려하지 않아도 된다. 하드웨어가 여러 스칼라 프로그램을 병렬 하드웨어에 매핑하는 것이다. "

 "그 경우, 프로그램하는 측은 어떤 분기도 효율적으로 핸들되는 것을​ 확신 할 수 있지 않으면 안된다. 코드의 관점에서 부담없이 분기를 다룰 수 있도록 하는 것이 중요하다 . 프레디 케이션이 있으면, 진짜, 스칼라로 프로그램하여 모두를 병렬로 실행하는 것이 가능하게 된다. "

 "Sandy Bridge에서는 분기에서 if 문 도입 및 Do / While에서 무한 중첩을 처리 할 수 ​​있다. 또한 그 때 명령어 세트 오버 헤드가 전혀없다. Sandy Bridge에서는 (분기) 관리 비트 군이 있기 때문에 모두 하드웨어에서 제어된다. 쉐이더는 계속 자유도가 높아지고 있다. "

 이와 같이, Sandy Bridge GPU 코어에서는 컨트롤 흐름 제어와 그에 따른 프로그래밍 모델의 변화가 실현되고 있다. 이것은 Intel이 Larrabee (라라비)의 벡터 유닛에서 행하려고 했던 것에 어느정도 가깝다. 아래는 Larrabee의 프리디케이션 슬라이드이다.

 

 

 

 

 

 

Larrabee의 벡터 유닛에서 시도하고 있는 실행 방법

 

 

분산 / 수집 및 배리어 동기화 구현


 "분산 (scatter) / 수집 (gather) '도 범용 컴퓨팅에서 중요한 기능 중 하나다. GPU 메모리에 특정 데이터 배열에 저장된 데이터를 처리할 전문 연산 유닛과 레지스터도 그에 맞게 구성하고 있었다. 그러나 범용 컴퓨팅에서는 다양한 유형의 데이터를 다루기 때문에 반드시 메모리의 데이터 배열에 따라 처리를 행하는 것은 아니다.

 따라서 메모리에서 레지스터로 데이터를 로드 할 때 메모리 (또는 캐시)에 분산되어 있는 데이터를 수집 집결 하드웨어 처리가 중요하다. 저장할 때는 그 반대로 데이터를 분산하는 분산이 중요하게 된다.

 보통의 구현의 경우, 분산 / 수집도 프리디케이션과 마찬가지로 마스크 레지스터를 참조하여 로드 또는 스토어 주소를 선택한다. Sandy Bridge 그래픽 코어도 비슷한 방식을 취하고 있는 것으로 추정된다. 또한, Sandy Bridge는 데이터 타입의 변환과 데이터 셔플 (벡터 레지스터의 데이터 요소를 교체) 등의 기능도 갖추고 있다. 이런 점은 사라진 Larrabee 아키텍처와 모두 공통된다.

 병렬 머신은, 스레드 간의 동기화가 문제가 된다. 그래픽스 태스크의 경우 스레드간에 의존성이 없는 (픽셀 간의 종속성은 ROP 처리하는) 때문에 동기화가 필요 없다. 그러나 범용 컴퓨팅에서는 그렇지 않다.

 동기에 대해 GPU에서 일반적인 기법은 병렬로 실행되는 스레드가 일정한 배리어에 도달하면 거기서 처리를 중지하고 동기를 취하는 배리어 방식이다. 관련된 모든 스레드가 배리어에 도달 할 때까지 기다리게 두고 배리어에 맞춘 다음 다시 각 스레드를 시작한다. 배리어 사이에 일정한 입도의 처리가 있다면 유효한 방식이다.

 Sandy Bridge의 그래픽스 코어는 이러한 배리어 동기화 기능을 갖추고 있다. 비슷한 기능은 NVIDIA 등의 GPU도 갖추고 있어 Intel 코어도 동일하게 스레드 동기화 할 수 있도록 허용되었다. 또한 IDF 에서는 Intel은 전후의 스레드 사이의 데이터 의존성을 해결하기 위해 의존성을 처리하는 스코어 보드를 설치 가능하다 설명하고 있다. 여기의 자세한 내용은 아직 알려져 있지 않다.

 


메모리와 LL 캐시에 대해 아토믹 오퍼레이션


 아토믹 오퍼레이션도 요즘의 GPU가 모두 구현하고 있는 기능 중 하나다. 메모리에서 데이터를 읽어 연산에 쓰려면 그 일련의 과정 중 메모리의 데이터를 다른 스레드가 고쳐 쓰거나 하지 않도록 잠근다. 일관성을 유지하기 위한 구조로, Sandy Bridge 그래픽 코어의 경우 LL (라스트 레벨) 캐시와 메모리에 대해 아토믹 오퍼레이션을 하고 있다.

 Intel은 이러한 그래픽 코어 프로세서의 확장을 "Native Strengths Enhanced"라고 부르고있다. Sandy Bridge 그래픽은 고정 기능 유닛을 충실히 해 오프로드한 것에 관심이 가기 마련이지만, 실제로는 프로세서 명령이나 기능의 확충 가치도 매우 크다. 범용 컴퓨팅뿐만 아니라 그래픽 용 셰이더 프로그램도 복잡도를 증가하는 경향이 있기 때문에 컨트롤 플로의 제어 등은 가치를 가진다.

 Sandy Bridge 그래픽 코어는 이전 기사에서 설명했듯이 고정 기능 하드웨어를 강화한 후, 프로세서의 기능을 강화하고 있다. 따라서 프로세서인 EU (Execution Unit)의 개수는 변하지 않고 처리량이 향상되고 있다고 말한다.

 "Sandy Bridge는 12 개의 쉐이더 유닛을 갖추고 있다 .3 년전 8 유닛이었다​​. 그러나 쉐이더 유닛 단위로 비교하지 말라 .Sandy Bridge 쉐이더 유닛은 완전히 다른 종(Animal)이다. 우리는 쉐이더 유닛 수당 2 배의 처리량을 실현하고 있다 .12 유닛이 한때 24 유닛 상당의 처리량을 발휘한다. 초월 함수와 같은 일부 경우에는 그 이상의 처리량이 된다 "고 Thomas Piazza 씨 (Intel Fellow, Director, Graphics Architecture)는 말한다.

 물론 성능은 사례별 벤치 마크에서는 Intel이 주장 할만한 성능 범위에 도달 여부는 다르다. 그러나 구조를 보면, 범용 컴퓨팅 내용은 전혀 별개가 되어있을 것이다.

 

Sandy Bridge의 다이 레이아웃

 

 

CISC적인 접근 방식의 명령을 추가


 이러한 범용성과 유연성을 위한 프로세서의 향상된 기능 이외에, Sandy Bridge는 네이티브 명령 세트를 그래픽 API에 접근 그래픽 알고리즘에 맞춘다는 확장도 행하고 있다. 재미있는 것은, 이것이 CISC (Complex Instruction Set Computer) 명령어 세트적인 더 복잡한 명령을 만드는 접근법인 것이다.

 Intel에 의하면 원래 Intel 그래픽 코어의 네이티브 명령은 RISC적인 명령 세트 아키텍처에서 시작했다고 한다. 또한 RISC 계열 프로세서에서 볼 수 있는 곱셈과 덧셈의 2 명령어를 1 명령어에 융합시킨 적화산 명령도 가지고 있었다. 이것은 다른 GPU도 거의 같다.

 그러나 Intel에 따르면, 그래픽에서는 반드시 RISC적인 명령 세트가 적합하다고 말하기는 어렵다는 것. "특정한 경우에 사용되는 방정식은 (RISC 적인) ISA를 넘은 것이 좋은 경우도 있다"(Thomas Piazza 씨).

 따라서 Sandy Bridge에서는 그래픽스 코어의 신 네이티브 명령에 이전보다 CISC적인 접근을 획득,보다 복잡한 명령을 늘리고 있다고 한다. 우선, Sandy Bridge 그래픽 코어의 새로운 네이티브 명령은 그래픽 API 측의 CISC 적인 명령에 거의 1 대 1로 대응한다. 명령 단계 수를 줄이고, 프로그램 크기를 작게하고 명령 당 성능 효율성을 높이기 때문으로 보인다.

 그리고 새로운 명령어는 매우 그래픽에 특화된 것이 포함 된다고 한다. 그래픽에서 많이 사용되는 특정 방정식에 맞기 때문이다. "예를 들어, 3D 그래픽에서는 2 개의 곱셈과 2 개의 덧셈의 결합이 등장하는 경우가 많다. 보통이라면 이 알고리즘의 실행은 (적화산) 2 배의 명령 수가 필요하게 된다. 그러나 Sandy Bridge는 이 모든 것을 하나의 명령으로 정리한 지침을 마련했다 "(Piazza 씨)고 한다.

 이 명령의 효용도 같은 명령 단계 수를 절반으로 줄여 명령 효율을 높일 것이라고 추정된다. 무엇보다 실제로는 그래픽 코어 내부에서는 1 명령을 내부 명령 발행 유닛이 여러 작업으로 분해해 개별 실행 유닛에 발행하고 있다고 한다. Intel CPU가 x86 CISC 명령을 uOP (Micro-Operation)로 분해하는 것과 같은 것을 Sandy Bridge 그래픽 코어도 행하고있는 것으로 추측된다.

 따라서 같은 메소드를 사용하여 미래의 Intel 그래픽 코어에서 배정밀도 연산 부동 소수점 (FP)를 지원하는 것도 비교적 용이하게 할 수 있다고 한다. "이 (2 개의 곱셈과 2 개의 가산의 1명령화)는 배정밀도 연산도 매우 깨끗히 구현할 수 있는 것을 의미하고 있다 .1 명령 (배정밀도) 적화산 4명령으로 분해해 특정 실행 유닛에 할당 1주기 (처리량)에서 실행하는 등 방법이 가능하기 때문이다. 배정밀도를 구현하는 시간도 그만큼 많은 게이트를 추가 할 필요는 없을 것 "(Piazza 씨 ).

 AMD GPU도 4개의 단정밀도 적화산 사용해 1개의 배정밀도 적화산을 적은 트랜지스터의 추가로 수행하고 있다. 비슷한 방법으로 배정밀도 연산 지원이 가까운 장래에 Intel 그래픽 코어도 가능할 것으로 추정된다. Sandy Bridge 그래픽 코어의 범용 컴퓨팅 기능에서 부족한 요소는 배정밀도 연산이므로, Intel은 다음에 거기를 강화해 갈 것이다.

 

 

Sandy Bridge의 강화

 

 

Sandy Bridge의 개요

 

2010년 12월 14일 기사 입니다.

 

[분석정보] 인텔 GDC에서 라라비 명령 세트의 개요를 공개

 

 

[분석정보] 인텔 Eden 씨에게 듣는 Sandy Bridge의 모습

 

 

[분석정보] IDF 2010 왜 Sandy Bridge는 성능이 높은가?

 

 

[아키텍처] 트릭을 거듭한 Sandy Bridge 마이크로 아키텍처

 

 

[분석정보] Ivy Bridge의 강화 포인트는 GPU 아키텍처의 개혁

 

 

[Research @ Intel 2011] 인텔 HD Graphics로 오픈CL 시현 및 저전력 회로 설계

 

 

[분석정보] 5W 이하의 저전력 프로세서의 개발로 향하는 Intel

 

[분석정보] x86을 고속화하는 조커기술 명령변환 구조

 

 

[벤치리뷰] 샌디브릿지 프리뷰