반도체의 기본 개념을 정리하는데 도움이 되는 책이다.

 

우리가 아는 CPU, D램, 낸드, GPU 등의 반도체 칩은 전부 모스팻(MOSFET)을 기반으로 한다.

 

D램은 사용자로부터 명령과 주소를 받는 부분, 주소를 해독하는 부분,

데이터 저장소와 읽어온 데이터를 잠시 보관해두는 래치 등으로 비교적 간단하게 구성된다.

 

현대의 CPU들은 다층의 캐시 메모리와 디코더, ROB, 대기소, 연산 포트, 연산기 등

다른 기능을 하는 조그마한 하드웨어들로 연결되어 있다...

당연하지만 이런 복잡한 설계는 사람이 손으로 직접 하기가어렵다.

수십억 개가 넘는 트랜지스터를 하나씩 손으로 배치하는 것은 불가능에 가까우며, 검증도 곤란하다.

따라서 칩의 설계를 도와주는 EDA(Electronic Design Automation)툴,

해당 설계를 특정 제조기술에 맞춰주는 PDK(Process Design Kit)툴 등이 필요하다.

 

가장 아래쪽 웨이퍼와 가까운 쪽에는 반도체 소자(흔히 PMOS, NMOS로 불림)들이 위치하고 있으며,

이들이 가장 미세하게 제조되어 있음을 알 수 있다.

이러한 부분을 제조하는 과정을 FEOL(Front End of the Line)이라 부른다.

그 위로는 금속 배선층이 자리하고 있으며, 이들이 각 소자를 연결하는 역할을 한다.

사이사이 절연 물질이 채워져 있고, 필요에 따라서 소자와 직접 접촉하거나 다른 금속들과 연결되는 것을 알수 있다.

이러한 과정을 BEOL(Back End of the Line) 이라 부른다....

한편 BEOL에서 위층으로 갈수록 미세함이 떨어지고 배선도 굵어지는 것을 볼 수 있는데,

이러한 이유 때문에 첨단 공정에서도 구세대 장비를 계속 이용할 수 있다.

 

컴퓨터는 크게 세 가지 구성 요소를 가지고 있다.

중앙에서 연산을 처리하는 CPU와 수행되어야 할 코드 및 연산 결과를 저장하는 메모리 그리고 HDD, SSD 등의 보조기억장치다. 이 중 보조 기억 장치는 D램의 가격과 휘발성 한계라는 독특한 위치에서 태어났다...

연산 결과를 받아 기록하는 고성능 메모리였던 D램과 S램은 전력이 끊길 경우 데이터가 손실되는 특징이 있었을 뿐이다.

 

플래시 메모리는 전압펌프를 가동한 뒤 절연 공간에 전하를 집어넣을 때까지 수십~수천 마이크로초로 D램보다 천 배 이상 긴 시간을 필요로 했다. 대신, 전하가 절연 공간에 갇혀있는 방식이므로 전자로 움직이는 소자임에도 불구하고 전원을 차단하더라도 데이터가 그대로 보존되는 독특한 특징이 있었다.

전원이 나가도 데이터가 유지되는 특성(비휘발성)은 보조기억장치로 사용하기에는 매우 훌륭한 특징이다.

하지만 플래시 메모리는 사용을 매우 어렵게하는 독특한 특성이 있었는데, 바로 덮어쓰기가 불가능하다는 것이다.

플래시 메모리를 사용할 때 데이터를 썼던 영역에 다시 데이터를 쓰기 위해서는 지우기 작업을 한번 해야했다...

또한 플래시 메모리는 데어터를 지우는 단위와 쓰고 읽는 단위가 달랐다.

플래시의 데이터 삭제 단위는 블록이라고 하는데, 보통 그 최소 사이즈가 데이터 쓰기/읽기 단위의 수백~수천 배에 달하는 엄청난 크기였다. 데이터가 번쩍 터지듯이 없어지는 이런 특성 대문에 플래시란 이름이 붙은 것이다...

일반적으로 플레시 제조사는 특별한 목적으로 사용되는 블록 0번은 불량이 없을 것과 침 내 불량 블록이 몇 개 이하일 것이라는 정도만 보장하여 판매한다. 플래시 메모리 구매자는 직접 플래시를 관리하는 프로그램을 만들어서 해당 정보를 기억하고, 자신의 프로그램이 해당 영역에 접근하지 않도록 직접 관리하는 번거로움을 감내해야만 한다...

그러므로 플래시 메모리는 대부분 컨트롤러와 결함되어 운영되며, 컨트롤러 안의 조그마한 소프트웨어를 탑재하여 이러한 문제를 해결한다... 한편 이 메모리는 노어와 낸드라는 두 가지 다른 형태를 가지고 있었다.

노어 플래시의 경우는 한 번에 접근할 수 있는 크기가 D램과 비슷한 수 바이트 정도로 작았던 반면,

낸드는 반드시 한 번에 수 킬로바이트씩 접근해야 하는 단점이 있었다.

 

C언어를 수행하기 위해서는 컴파일이라는 과정을 거쳐 CPU가 알아듣는 언어인 기게어로 바꿔줘야만 한다

 

프로그램이 주변기기에 접근하여 사용하기 위해서는 접근시키는 드라아버라는 작은 소프트웨어가필요하다.

 

시장에는 물리 연산 전용카드가 등장했다.대규모 단순 수치 계산을 위해 VGA를 사용하려는 회사가 늘어나기 시작했으며, 그 상황을 본 엔비디아가 CUDA라고 불리는 VGA 기반 프로그래밍 라이브러리를 제공하기 시작했다. 이로 인해 수많은 프로그래머가 VGA에 익숙해지기 시작했고, 또다른 생태계가 자라날 조짐이 생겨났다.

 

대규모 단순 병렬 연산에 대한 거대한 수요가 생겨나게 되었다.메모리는 각종 학습 자료를 빠르게 공급하는 고속도로와 대형 트럭과 같은 역할이었고, 이렇게 들어온 대규모 데이터를 빠르게 처리하는 부품 역시 수요가 높아지게 된다. 데이터가 들어오는 속도가 빠르더라도, 처리 속도가 느리다면 큰 의미가 없기 때문이다.이로 인해 팹리스 중 하나인 엔비디아와 같은 GPU 제조사들에게도 큰 기회가 열렸다...아이러니하게도 현대 AI는 소수의 유능한 코어를 통해서가 아닌, 다수의 무식한 연산을 통해 작동하는 형태로 발전했다.기계학습은 인공 신경망을 프로그래머가 원하는 방향으로 전환시키는데, 여기에는 분기 연산보다는 단순한 숫자열의 곱과 합 등의 연산이 더욱 중요한 역할을 했다.

 

CUDA는 마치 개발자들에게 자신이 CPU 위에서 C언어 등에서 개발하는 듯한 익숙한 느낌으로 GPU 기반의 프로그래밍을 할 수 있게 해주었다.

 

현재 머신 러닝에서 많이 쓰이는 프로그램인 텐서플로가 원래는 엔비디아의 GPU가 아니라 자체 TPU를 내부에서 사용하기 위한 프레임워크롤 만들어졌다는 사실은 이러한 계획이 아주 오래전부터 있어 왔음을 시사한다

 

실제로 구글은 TPU를 만들고 나서 이 칩의 성능과 전력 소모량, 아키텍처까지 공개했다.

뿐만 아니라 이 칩에 사용할 사용자 라이브러리인 텐서플로를 오픈소스로 전환했고, 전 세계 개발자들이 자신의 알고리즘을 테스트해볼 수 있도록 실제 구글이 사용했던 학습 데이터 세트도 공개하고 있다.

고성능 라이브러리, 편한 사용자 인터페이스, CPU, GPU, TPU 등 어떤 하드웨어를 기준으로 개발하건 간에 코드를 재작성할 필요가 거의 없는 수준의 재사용성을 제공하고 있다.

자신이 만든 AI 알고리즘이 GPU에 맞는지, CPU에 맞는지 확인하고 싶다면 하드웨어만 바꾼 채 자신의 기존 텐서플로를 쓰면 된다.

+ Recent posts