안녕하세요~


이번글에서는 CPU를 생산하고 있는 양대 산맥인 AMD와 Intel에 대해서 설명드릴까합니다.

그리고 최근 삼성과 관련된 기사들을 살펴보면서 CPU가 어떤 방향성으로 발전해나갈지도 살펴보도록 할게요!




<1.집적기술, Clock 성능을 높이다>


앞서 CPU의 clock속도가 CPU의 성능을 평가하는 중요지표가 될 수 있다고 말씀드렸죠?

그렇다면 CPU의 clock속도는 어떻게 높일 수 있을까요?


CPU의 Clock 속도를 증가시키려면 core수를 증가시켜야해요. 하지만 core수를 늘리면 발열문제가 생기겠죠? 


하지만 반도체 공정을 향상시키면 위와같은 문제를 해결할 수 있어요. 반도체 공정을 향상 시킨다는 이야기는 집적기술이 향상된다는 것이고, 집적기술이 향상되면 발열이 줄어든다고해요 (이 부분은 트랜지스터와 관련된 내용이라고 하는데 자세히 알아보진 않을게요 ㅎㅎ).


아무튼 줄어든 발열만큼 core수를 증가시킬 수 있으니 clock 속도를 증가 시킬 수 있어요! 즉, 하나의 CPU에 얼마나 작은 nano 단위로 core들을 집적시킬 수 있느냐가 굉장히 중요한 이슈가 될 수 있어요.


<사진1>


<사진2>





<2.AMD와 Intel의 계획>


CPU를 제조하는 양대산맥은 AMD와 Intel이라 할 수 있어요. 


Intel은 2015년까지 10nm 의 집적기술을 이용하여 CPU의 성능을 높인다고 했어요. 


<사진3>


하지만 5년이 더 딜레이 된 후 10nm 집적기술을 이용한 CPU를 출시하게 됩니다. 2020년에 10nm 집적공정 기술을 적용하여 intel CPU를 만들어 냈고 추후 7nm 공정을 이용한 CPU 모델인 Ice Lake를 출시하겠다고 발표했어요 (모델에 대한 자세한 설명은 다음에 하도록 할게요!).


<사진4>




하지만 AMD CPU인 라이젠은 이미 7nm에 대한 직접공정기술을 마무리했고 상품을 출시했다고합니다.


<사진5>


그렇다면 7nm 공정인 AMD 라이젠을 사용하면 되는건가요???

답부터 말씀드리면 "아니에요!"





<3. 집적기술 이외에 중요한 요소들>


CPU의 성능을 평가할 때 집적기술 외에 또 다른 중요한 요소가 무엇이 있을까요?


1) CPU 아키텍처


아래그림은 Intel의 i5 8400 모델과 AMD의 R5 1600x 모델 모두 14nm 집적공정기술로 만들어진 CPU이지만 아래 성능(ex:FPS (Frame Per Second))에서 인텔의 i5 8400 CPU가 더 뛰어나다는걸 알 수 있어요.


<사진6>



아래는 인텔과 AMD의 CPU 아키텍처 구조에요. AMD는 core수를 늘리기에는 용이하지만 core와 memory간의 물리적인 latency가 증가하기 때문에 성능에 문제가 일어난다고 합니다.


<사진7>



지금처럼 봤들이 CPU의 성능을 판단하기 위해서는 굉장히 많은 요소들을 따져봐야 하는데요. 좀 더 자세한 내용을 알기 원하시는분은 아래 영상을 참고해주세요!









<4.인텔과 AMD의 결정적인 차이; 반도체 공장>


인텔과 AMD의 가장 큰 차이점은 자체 반도체 공장의 존재 여부입니다. 


인텔은 CPU를 설계하고 이것을 만들어낼 공장이 있지만, AMD는 CPU를 설계만 할 뿐 설계된 도면을 바탕으로 CPU를 생산하는 회사는 TSMC라는 대만회사에요.


그럼 지금부터 설명할 내용들을 이해하기 위해서 몇 가지 용어들을 설명해보도록 할게요!


1)비메모리 반도체

- 우리나라에선 삼성이 메모리 시장을 독점하고 있기 때문에 "반도체=메모리"라는 인식이 강합니다. 반도체에는 CPU 같은 제품도 있는데 우리나라에선 CPU를 제작하는것이 생소하다 보니 메모리 이외의 CPU같은 제품들은 비메모리로 분류하고 있어요


2)시스템 반도체

- 삼성전자 내부에서는 CPU관련 제품을 언급할 때 비메모리 반도체라는 용어보다는 시스템 반도체라는 용어로 사용하고 있어요. 


3)시스템 LSI(Large Scale Integration-대용량 집적회로)

- 시스템 LSI는 하나의 작은 칩에 수만개의 회로가 몰려 있다는 뜻인데 시스템 반도체라는 개념이 시스템 LSI를 포괄하고 있다고 생각하시면 됩니다.


4) Logic-Chip

- 논리적인 연산을 수행하는 반도체란 뜻이기 때문에 보통 CPU 관련 제품을 의미해요. 해외에서는 시스템 반도체라는 용어를 쓰진 않고 전부 Logic-Chip이라는 용어를 사용한다고 합니다. 실제 블룸버그와 같은 외신들이 자주 사용한다고 해요. 


5)팹리스(Fabless: 공장이 없다는 뜻)

- AMD는 반도체 설계만 하고 있고 제조는 하지 않는다고 말씀드렸어요. 이렇게 반도체 제조공장이 없는 회사를 팹리스라고 부른답니다. 생산시설에 대한 투자대신 설계에 집중하는것이죠. 사실 애플도 팹리스로 분류된답니다.


6)파운드리(Foundry)

- 팹리스 회사의 설계도면을 바탕으로 관련제품을 생산하는 회사를 말합니다. 위에서 언급했듯이 AMD는 TSMC에 CPU 생산을 맡기기 때문에 TSMC를 파운드리 회사라고 합니다. (삼성이 이 분야에 도전장을 냈죠!)




<6.삼성 파운드리>


삼성은 TSMC가 독점하고 있는 파운드리 시장에 도전장을 냈습니다.

과연 삼성은 어떤 기술이 있기에 이러한 도전장을 냈을까요?

혹시 EUV라고 들어보셨나요? 2019년 일본이 수출규제로 제시했던 품목중에 포토레지스트가 EUV를 만드는데 중요한 요소라고 설명했던 뉴스를 보실 수 있으실거에요.




EUV란 반도체 집적공정기술으로 이해하시면 될 것 같아요. 앞서 10nm, 7nm 단위로 반도체를 집적시켜 만들 수 있다고 말씀드렸죠? 그런데 EUV 기술을 이용하면 7nm보다 더 작은 단위로 반도체를 집적시킬 수 있다고해요. 이러한 공정기술이 있다면 AMD, Intel 같은 회사가 계속해서 TSMC 회사만 이용할 순 없을거에요 (물론 현재는 두 회사 모두 EUV 기술이 있지만 2018년만해도 EUV기술은 삼성만이 갖고 있던 유일한 기술이었답니다)



 



인텔은 자체적으로 반도체 공장을 갖고 있음에도 불구하고 AMD에 비해 지속적으로 반도체공정에서 밀리는듯 한 모습을 보였는데요. 그랬기 때문일까요? 2019.11월 인텔은 회사창립 후 최초로 삼성에 CPU를 위탁생산을 맡기게 됩니다. 


TSMC에 CPU 위탁을 맡겼던 AMD는 어떤 움직임을 보일까요? 2019.12월 AMD 수석 부사장인 Ruth Coter는 삼성에게 CPU 공정 생성 위탁을 맡길 계획은 없냐는 질문에 "시간이 지남에 따라 삼성, TSMC 등의 조합을 생각해 볼 순 있지만 아직까진 TSMC와 GF(또 다른 파운드리회사)로만 충분히 요구를 충족시키고 있습니다"라고 아리송하게 답변을 내놓았습니다.


과연 삼성은 TSMC를 제칠 수 있을까요?


그런데, "단순히 CPU 하나만 갖고 삼성이 저렇게 무모하게 뛰어 들었을까?" 라는 의문이 들게될거에요. 그래서 다음 글에서 삼성이 지금 왜 CPU관련 시스템 반도체 파운드리 분야에 목숨을 걸고 있는지 좀 더 설명해보도록 할게요!









[글 래퍼런스]

http://news.kmib.co.kr/article/view.asp?arcid=0924083749&code=11151400

https://www.youtube.com/watch?v=vjVvhlp90SE


[사진 래퍼런스]

사진1

https://kr.123rf.com/photo_88213172_%EC%A4%80%EB%B9%84%EB%90%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9C%EC%99%80-%EC%B5%9C%EC%8B%A0-cpu%EB%A5%BC-%EA%B0%96%EC%B6%98-%EC%8B%A4%EB%A6%AC%EC%BD%98-%EC%9B%A8%EC%9D%B4%ED%8D%BC-%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9C%EC%9D%98-%EC%95%9E%EB%A9%B4%EA%B3%BC-%EB%92%B7%EB%A9%B4-%ED%98%84%EC%8B%A4%EC%A0%81%EC%9D%B8-%EB%B2%A1%ED%84%B0-%EC%9D%BC%EB%9F%AC%EC%8A%A4%ED%8A%B8-%EB%A0%88%EC%9D%B4-%EC%85%98-.html

사진2

https://www.youtube.com/watch?v=vjVvhlp90SE

사진3

https://dvdprime.com/g2/bbs/board.php?bo_table=pc_players&wr_id=122667

사진4

https://www.csitquestions.com/blog/intel-ice-lake-server-roadmap-delayed-struggles-to-make-appearance

사진5

https://eteris.tistory.com/1740

사진6,7

https://www.youtube.com/watch?v=vjVvhlp90SE&t=1s

안녕하세요~


이번글은 Multi-Core, Thread, Context switching이라는 개념을 설명을 드리고 CPU 스펙을 평가하기 위한 기본 이론지식을 마무리하도록 할거에요~






<1.Clock>


CPU는 메모리에서 명령어를 처리하는 역할을 한다고 했죠? 그렇다면 CPU가 명령어를 처리하는 속도는 어디서 기인할까요?


바로... Clock 입니다!


Clock이라는 건 초당 0,1이 얼마나 반복될 수 있는지를 보여주는 CPU의 성능지표에요. 즉, Clock이 빠를 수록 더 많은 0,1을 처리할 수 있게되기 때문에 더 빠르게 명령어들을 처리할 수 있게 되는거죠. 예를들어, 1Hz라고 한다면 1초당 0과1이 한 번 반복하는것이고, 1MHz라고 한다면 초당 0,1이 백만번 반복하게 되는거에요.


<사진1>



그래서 2004년까지는 CPU의 성능을 높이기 위해 Clock 속도를 높였는데요. Clock 속도를 높이자 CPU의 발열문제가 발생하기 시작했어요. 그래서 이때부터 Single core가 아닌 core를 두 개로 늘리는 전략을 구성하기 시작한것이죠. 생각해보면 process들이 서로 종속되지 않은 경우가 많기 때문에 하나의 core에서만 동작할 이유는 없었던거죠.


Core의 수가 더 많이지면 서로간의 발열문제가 더 심해질 수 있어서 single core에서 1.8Hz를 사용했다면 dual core에서는 각각 1.3Hz 정도로 낮춰서 사용하게 됩니다.



제가 사용하고 있는 "Intel Core i5-9600K processor"를 인터넷에 검색해보니 6개의 core를 사용하고 있다고 되어있네요. "윈도우키->작업 관리자->CPU->성능 탭"을 보니 정확히 6개의 코어가 작동되는걸 볼 수 있어요.


그런데 core밑에 thread라고 되어 있는데, thread는 무엇일까요?

바로 알아보도록 할게요!









<2. Thread>


Single Core에서 Dual Core로 기술이 발전하면서 CPU의 성능은 좀 더 좋아지기 시작했어요. 

CPU 설계자들은 더 좋은 CPU를 개발하려고 하다 문뜩 "하나의 Core에서 하나의 process만 동작하는데 이 process를 병렬로 구현시키면 어떨까?"라는 생각을 하게 됐어요.


Code를 작성해서 program을 만들때,  각각의 코드들이 고유의 영역을 갖는다는 사실 기억하시죠? (기억이 안나신다면 --> 링크)


<사진2>



<사진3>



Stack 영역 같은 경우는 해당 함수가 실행되고 나면 바로 메모리에서 소멸되기 때문에 굳이 process 내의 모든 요소들이 stack을 공유할 필요는 없어요. 예를들어, 지역함수가 실행된다고 해서 다른 code, data, heap에 있는 요소들이 stack의 정보를 필요로 하는건 아니니까요. 하지만 반대로 Code, Data, Heap 같은 영역의 데이터들은 stack이 공유해야 할 필요가 있어요. 단순한 예를들면, 지역함수가 실행되도 전역함수를 사용할 수 있기 때문이죠.


그래서 사람들은 process에서 code, data, heap 영역은 공유자원으로 하고 stack 같은 건 따로 병렬적으로 처리해도 되겠다라고 판단한거에요. 그래서 이러한 stack을 처리하기위해 thread라는 개념이 탄생하게 된거죠.


<사진4>


각각의 Thread는 process의 code, data, heap영역을 공유하고 stack을 별도로 처리하게 됩니다. 그렇다면 Thread도 자신들의 자료구조가 있겠죠? (Process의 PCB처럼요!)


우리는 Thread의 자료구조를 TCB(Thread Control Block)이라고 부른답니다. 대부분의 PCB와 비슷하지만 아무래도 process의 일부 영역을 공유하고 있기 때문에 TCP는 PCB보다 더 단순하답니다 (굳이 TCB에 중복되는(공유하고있는) PCB 정보를 추가해줄 필요는 없잖아요?)


<사진5>



일반적으로 하나의 core에 하나의 thread를 두고 있지만, 하나의 core에 두 개의 thread를 동작시키게 하면 위에서 언급한것 처럼 stack을 병렬로 처리할 수 있기 때문에 CPU의 속도가 더 빠르다고 느껴질거에요. 이렇게 하나의 core에 두 개의 thread를 두는 기술을 Hyper Threading이라고 한답니다 (2002년도에 hyper threading 기술이 나온걸 보면 Single core -> Thread -> Dual Core 순서로 발전된거 같아요).



<사진6>




<사진7>



Core와 Thread는 다음과 같이 구분할 수 도 있어요.

Core: CPU 안에서 물리적 연산을 담당하는 곳

Thread: 운영체제(OS)에서 인식하고 작동하는 작업 단위


그렇기 때문에 간혹 "작업 관리자"를 보면 single core를 사용하고 있음에도 CPU를 2개로 인식하는 경우가 있는데 이게 운영체제가 2개의 thread를 2개의 core로 착각하고 있기 때문이에요.


<사진8>



Hyper threading 기술은 인텔에서 붙인 이름이고 AMD는 위와 같은 기술을 SMT라고 부른답니다~








지금까지 살펴본 개념을 봐도 CPU의 스펙을 살펴볼때 어렵지않게 보실 수 있으실거에요. 

그럼 다음시간부터는 CPU 제조사들에 대해 알아보고 해당 모델들을 살펴보도록 할게요~








[글 래퍼런스]

https://www.youtube.com/watch?v=_dhLLWJNhwY


[사진 래퍼런스]

사진1

https://documentation.help/NI-TClk-Synchronization/niTClk_overview.html

사진2

https://sfixer.tistory.com/entry/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%ADcode-data-stack-heap

사진3

https://aerocode.net/199

사진4

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

사진5

https://www.geeksforgeeks.org/thread-control-block-in-operating-system/

사진6

https://www.youtube.com/watch?v=BYvuF3ziPHc&t=4s

사진7

https://www.youtube.com/watch?v=_dhLLWJNhwY

사진8

https://www.youtube.com/watch?v=_dhLLWJNhwY&t=2s



안녕하세요~


CPU를 보시면 x86, x64 아키텍처라는 걸 본적있으시죠? 

폴더갖은 곳에서도 x86, x64 폴더가 따로 존재하는것도 본적있으실거에요!


이번 시간에는 x86, x64가 어떤 개념인지 알아보기 위해 Core에 대해서 알아본 후, CPU, Memory, OS(Operating System)이 서로 어떤 연관을 갖고 있는지 알아보도록 할거에요.




<1.Core란?>


CPU는 기본적으로 메모리의 명령어를 읽고 해당 변수들을 register file에 저장시킨 후, ALU(산술연산장치)를 이용해 계산을 진행하게 됩니다. 그래서 CPU에서 핵심역할을 하는 요소가 보통 register file, ALU 부분이기 때문에 이들을 묶어 core라고 하게 되는거죠.


<사진1>



<사진2>


이 core가 한 번에 32bit 용량에 해당하는 명령어를 처리할 수 있으면 32bit CPU라고 하고, 64bit 용량에 해당하는 명령어를 처리할 수 있으면 64bit CPU라고 합니다. 64bit 명령어를 처리하려면 Core가 좀 더 커야 겠죠? ㅎㅎ


또한 core의 개수에 따라 quad core, dual core 로 나뉠 수 있는데 단순히 quad core가 core개수가 더 많으니까 quad core로 사야겠다가 아니라, 해당 core가 32bit 명령어를 처리할 수 있는 체계를 갖추었는지, 64bit 명령어를 처리할 수 있는 체계를 갖추었는지에 따라 구매 기준이 달라진다는점 알아두시면 좋아요!


<사진3. 실제 CPU는 아니지만 개념을 이해하는데 적절한 그림이라 이용했습니다.>







<2.CPU 명령어 체계 그리고 Memory와의 관계>


앞서 언급한 32bit 명령어 체계, 64bit 명령어 체계라는건 구체적으로 무엇을 의미하느걸까요?


명령어 체계는 크게 실행 코드(op(eration) code)와 피연산자(operand) 부분으로 구성됩니다. 만약 "1+2"를 수행하라는 명령어는 ADD라는 opcode와 R1=1, R=2 라는 operand로 구성되어 있을거에요.


<사진4>


위에서는 8bit 단위가 4개로 구성된 명령어 체계이니 32bit 명령어 체계라고 할 수 있겠죠?

만약 64bit 명령어 체계라면 훨씬 더 복잡한 명령어들을 처리할 수 있을거에요.


메모리 챕터를 보신 분들은 아시겠지만 (못 보셨다면 --> 링크)


명령어들은 메모리에 cell 단위(8bit=1byte)로 저장되는데, 이때 32bit 명령어(8bit=1Byte=1 cell X 4)를 처리한다는 뜻은 한 번에 4개의 cell을 참조할 수 있다는 뜻이에요.


CPU는 자신들이 참조하는 메모리의 주소를 관리하는 레지스터(EIP, ESP)를 갖고 있어요. 32bit CPU는 32bit 명령어 체계를 처리해야하기 때문에 해당 레지스터는 32bit의 크기를 갖고 있답니다. 레지스터가 32bit 크기를 갖고 있으면 4G(2^32) 만큼의 메모리 주소에 접근 할 수있게되요 (하나의 bit에는 0,1의 경우의 수가 있으니 32bit라고 한다면 2^32의 경우의 수를 나타낼 수 있겠죠? 즉, 2^32(=4,294,967,296)가지의 경우의 수를 다를 수 있고 각각의 경우의 수를 메모리 주소라고 한다면 32bit CPU는 4G(=2^32=4,294,967,296)의 메모리 주소를 커버할 수 있게 된답니다. 다른 말로하면 32bit CPU는 4GB 이상의 메모리를 사용하지는것이 무의미하다는 이야기이죠! 왜냐하면 CPU는 2^32=4GB 정도의 주소체계만 관리할 수 있으니까요!


<사진5>







<3. CPU x86, x64 아키텍처 그리고 운영체제와의 관계>


3-1) x86

앞서 CPU가 32bit 명령어 체계를 처리할 수 있으면 32bit CPU가 된다고 말씀드렸죠?

1990년대 Intel과 AMD가 32bit 명령어 체계를 처리할 수 있는 CPU를 설계했는데, 이때 인텔에서 32bit 명령어 체계(=8080 명령어세트)를 처리할 수 있도록 설계된 CPU를 x86 아키텍처라고 명명하게 되었어요. 


3-2) x64

x64는 1999년에 발표된 x86 기반의 64bit 명령어 체계를 처리할 수 있는 CPU 아키텍처에요. x86을 기반으로 했기 때문에 x86 확장판이라고도 불리며 'x86-64' 아키텍처라고도 불리고 있답니다. x64와 같은 개념으로 사용되는 용어로는 'AMD64', 'x86-64', 'EM64T', 'Intel64' 가 있답니다.



3-3)CPU와 운영체제의 관계


64bit CPU는 말 그대로 CPU 하드웨어 성능을 의미합니다. 그런데 만약 운영체제가 32bit만 지원가능 하다면 어떻게 될까요? CPU가 64bit 명령어 체계를 처리할 수 있으니 운영체제에서 운반해주는 32bit 명령어도 충분히 처리할 수 있을거에요 (64bit 명령어 체계에서 32bit만 사용하고 나머지를 0으로 처리하면 되니까요). 하지만 이런경우 32bit CPU를 쓰는것과 64bit CPU를 쓰는것에 큰 차이는 없을거에요.


반대로 CPU가 32bit인데 운영체제가 64bit라면 메모리에서 CPU로 명령어를 넘겨줄때 64bit 단위로 넘겨주므로 CPU 해석을 하지 못할거에요.


<사진6>




<사진7>











[사진 래퍼런스]

사진1

https://slideplayer.com/slide/7483714/

사진2

https://www.guru99.com/32-bit-vs-64-bit-operating-systems.html

사진3

http://www.itworld.co.kr/t/62079/%C3%AF%C2%BF%C2%BD%C3%88%C2%B5%C3%AF%C2%BF%C2%BD%C3%AF%C2%BF%C2%BD%C3%AF%C2%BF%C2%BD%C3%AF%C2%BF%C2%BD%C3%8C%C2%B5%C3%83%C2%A5/89627?page=0,1

사진4

https://kwonsye.github.io/computer%20science/2019/04/14/ca-4.html

사진5

https://www.cs.virginia.edu/~evans/cs216/guides/x86.html

사진6

https://eine.tistory.com/entry/64%EB%B9%84%ED%8A%B8-32%EB%B9%84%ED%8A%B8-CPU%EC%99%80-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC


'컴퓨터 하드웨어 > CPU(Central Processing Unit)' 카테고리의 다른 글

6.인텔 CPU 브랜드명 구분하기  (0) 2020.06.30
5.AI chip 그리고 퀄컴  (0) 2020.06.29
4.AMD, Intel 그리고 삼성  (0) 2020.06.29
3.Multi-Core와 Thread  (1) 2020.06.29
1.Process와 CPU scheduling  (0) 2020.06.28

안녕하세요~

이번장에서는 memory이 어떻게 구성되어 있고 용량은 어떻게 계산하는지 등에 대해서 알려드리려고 해요!





해당 chapter(컴퓨터 하드웨어) 첫 번째 글(링크)에서 배웠듯이 CPU가 어떤 명령어를 처리하려면 memory에 있는 명령어들을 불러들어야해요. 만약 CPU 성능이 굉장히 좋은데 memory용량이 제한적이라면 메모리에 로드된 process의 수가 적기 때문에 cpu가 놀고 있을 확률이 클거에요. 그렇다면 우리는 memory 용량을 어떻게 계산해야할까요?



<1. Cell>

메모리를 구성하는 기본단위를 cell이라고 불러요. Cell은 기본적으로 8bit단위로 구성되어 있고 이러한 cell들이 모여 하나의 physical memory라고 불러요.


<사진1>




우리가 64MB 메모리를 사용한다라고 하면 64MB는 어떻게 계산되는걸까요?

Cell 하나가 8bit로 구성 되어 있으니, 1Byte 단위로 계산 할 수 있을거에요. 1Byte가 1MB 용량이 되려면 2^20 byte가 되어야 해요. 2^20 byte가 되어야 한다는건 2^20개의 cell이 필요하다는 뜻이겠죠? 그래서 64MB라고 한다면 64x2^20 개의 cell이 필요하다는거에요.

 


<사진2>




<2. 16GB VS 8GB>


우리가 흔히 memory를 구매할 때, 16GB를 이용할지 8GB 2개를 이용할지 고민을 하게 되는데요.

일단 흔히 우리가 memory로써 구매하는 삼성의 DDR RAM의 구조부터 살펴보고, 어떻게 구성하는게 좋은건지 알아보도록 할게요.


2-1) RAM

우리가 흔히 메모리라고 하면 RAM이라고들 해요.

예전에 테이프 같은 것들은 데이터를 순차적으로 읽어야 했어요. 그래서 특정 노래를 들으려면 되감기나 빨리감기 같은것을 해야했죠. 이렇게 순차적으로 메모리에 접근하는 방식을 SAM(Sequential Access Memory)라고 해요.



<사진3>



하지만 이와 반대로 순차적으로 점근하는 것이 아닌 랜덤하게 특정 위치에 접근하여 특정 노래를 들을 수 있다면, 이러한 방식으로 메모리에 접근할 수 있다면 우리는 이것을 RAM(Random Access Memory)라고 해요. 흔히 CPU가 메모리에 특정 process를 실행시킬때 순차적으로 접근하는건 아니기 때문에 메모리를 RAM이라고 칭한답니다.



<사진4>



메모리(memory)는 RAM 이외에도 주기억장치(ROM or RAM), DRAM (Dynamic RAM) 등의 용어들과 혼합해서 사용한다는 점 알아두세요!



2-2) 16GB VS 8GB


하나의 physical 메모리가 차지하는 용량에 따라 전체 메모리 용량이 달라질거에요. 예를들어 "5-1"같은 경우는 전체 RAM 용량이 4G이고, physical memory 개수는 8개이기 때문에 하나의 physical memory는 0.5G라고 할 수 있어요.


<사진5-1. 4G RAM>



Physical memory의 크기가 좀 더 커지면 더 많은 용량을 담을 수 있겠죠? 아니면 physical memory의 크기가 커지지 않더라도 집적기술의 발달로 더 많은 cell을 하나의 physical memory에 집어넣을 수 있으면 모메모리 용량이 커질거에요. 아래 "5-2"같은 경우는 하나의 physical memory에 1G 용량이 들어있다고 보면 되겠네요.

<사진5-2. 8G RAM>



그렇다면 우리가 16GB 메모리를 구성한다고 했을 때, 16GB를 하나로 구성하는 방식과 8GB를 두 개로 구성하는 방식이 있겠죠? 어떤 방식이 더 좋을까요? (아래 영상을 참고하시면 더 자세히 이해하실 수 있어요!)



결론부터 대체적으로 8GB 메모리를 두 개로 구성하는게 더 좋은 경우가 많아요. 위의 영상을 보셨다는 전제하에 말씀 드리면 하나의 memory가 8개의 physical memory로 구성되었다고 했을 때, 16GB인 memory에서는 하나의 physical memory가 2GB 처리능력을 갖고 있을것이고, 8GB memory에서는 1GB의 처리능력을 갖고 있을거에요. 그럼 상황을 예를들어 어떤 방식으로 16GB 메모리를 구성하는게 좋은지 말씀드려볼게요.


상황1. 한번에 9GB 용량을 처리해야 할 경우

16GB는 16GB 만큼 처리할 수 있는 용량이 있으니 각각 physical memory에 2GB, 2GB, 2GB, 1GB 씩 할당시켜 주면 처리가 가능해요. 마찬가지로 8GB 2개로 구성된 구조에서는 각각 physical memory에 1GB, 1GB, 1GB, 1GB, 1GB, 1GB, 1GB, 1GB, 1GB 으로 할당시켜 줄 수 있어요. 8GB 2개로 나뉘어질 경우 process간 통신을 할 때는 물리적 거리로 인해 시간이 조금 느려질 수는 있지만 사람이 느끼기 힘든정도라고 하니 '상황1'에서는 어떤 방식으로 16GB 메모리를 구성하던지 큰 문제가 생기지 않을거 같아요.


상황2. Physical memory에 1GB 정도되는 작업량이 9개가 병렬로 오는경우.

이런 경우에는 16GB 메모리를 사용하게되면 하나의 physical memory에서 2GB를 처리할 수 있음에도 불구하고 1GB씩 밖에 작업이 진행되지 않기 때문에 결국 남은 1GB를 낭비하게되요. 더군다나 8개에 1GB씩 모두 할당시켰기 때문에 남은 1GB(=9GB-8GB)는 좀 더 나중에 처리가 된답니다. 하지만 8GB 2개로 구성된다고 했을때 결국 한 번에 메모리에 할당할 수 있으니 좀 더 빠르게 작업이 진행되겠죠?




그렇다면 제 메모리는 어떻게 구성되어 있는지 확인해 볼까요?

"윈도우키->작업 관리자->성능 탭->메모리" 순서로 보시면 24GB라고 표시과 되어있어요. 저는 실제로 16GB 메모리 하나와 8GB 메모리 하나를 이용해 24GB 메모리로 구성했답니다.





<3. CPU가 느끼는 체감속도>

CPU는 메인 메모리에 접근하는 시간과 L2 Cahce, SSD 같은 메모리에 접근하는 시간은 얼마나 차이가 날까요? (실제로 CPU가 Cahce, SSD같은 곳에는 접근하는 것이 아니고 SSD의 데이터가 메인 메모리에 업로드되고 업로드된 데이터를 CPU가 접근하는 것을 CPU가 SSD 데이터에 접근하는걸로 표현했어요)




  




지금까지 메모리에 대해서 알아봤어요!

다음 시간에는 SSD에 대해서 알아보도록 할게요~






[글 래퍼런스]

https://www.youtube.com/watch?v=Vj2rNQFvdDw


[사진 래퍼런스]

사진1

https://www.vectorstock.com/royalty-free-vector/real-random-access-memory-or-ram-computer-vector-27187049

https://hackerspace.tistory.com/entry/%EB%A9%94%EB%AA%A8%EB%A6%AC

사진2

https://www.slideserve.com/pandora-gilmore/6339255

사진3

http://item.gmarket.co.kr/Item?goodscode=969169514

사진4

https://slidesplayer.org/slide/14685169/

사진5-1

https://www.amazon.com/ROYEMAI-PC3-8500-240-pin-Upgrade-Desktop/dp/B081DK81LN

사진5-2

https://www.amazon.com/Rasalas-12800U-Unbuffered-Desktop-Memory/dp/B07N5XKYH5





안녕하세요~


이번시간에는 CPU의 스펙중 가장 큰 부분을 차지하는 코어와 스레드라는 개념에 대해서 알아보도록 할게요!


이번 시간은 다른 시간과는 다르게 C언어의 지식이 어느정도 있어야 이해가 가능해요ㅜㅜ

(그런데 조금 읽어보니 필요없을수도 있는것 같아요 ㅎㅎ)




<1.Program>


컴퓨터의 CPU는 메모리에서 명령어를 읽어드린다는 사실 기억하시죠? 또한 내가 어떤 프로그램을 수행시키려면 해당 프로그램이 Disk(SSD,HDD)에서 메모리에 업로드가 돼야한다는 사실도 기억하실거에요!


(기억이 안나시면 이 챕터를 참고해주세요! --> 링크)



그렇다면 프로그램이라는건 어떻게 구성되서 CPU에서 차례대로 진행되는 걸까요?


프로그램은 프로그래밍 언어로 구성되어 있어요. 아래 사진에서 C언어로 구성된 프로그램이 만들어 졌다고 가정해볼게요. C언어로 만들어진 프로그밍 언어들은 각각 역할에 따라 고유의 영역으로 나뉠 수 있어요. 


<사진1>


Code영역: for, while, if 와 같은 조건문이나 상수값 같은 경우는 코드가 실행되는 중간에 변경이 불가능해요. 그래서 컴파일(Compile) 과정에서 아예 기계어로 변경시켜 읽기전용(Read-Only)으로 만들어 놓은 곳이라고 보시면 될거에요. 예를들어, hex, bin 파일이 code영역에 해당되는 곳이라고 보면 되겠네요!


Data영역: 데이터 영역은 전역(global), 정적(static) 변수, array, 구조체(structure)가 저장되는 곳이에요. 지금 나열한 요소들의 특징은 프로그램이 종료되기 전까지 없어지지 않고 메모리 영역을 차지하고 있는다는 점이에요. 하지만 해당 값들은 변경이 될 수 있기 때문에 컴파일(Compile)과정에서 기계어로 번역되지는 못하고, 메모리에 크기만 결정되게 됩니다.


BSS영역: Data영역과 대부분 유사하나 BSS영역은 초기화되지 않은 전역, 정적 변수, array, 구조체가 저장되는 곳이라고 해요. 



<사진2>



Heap영역: 프로그램을 구성하다보면 의도적으로 프로그램이 동적으로 메모리를 할당받아야 하는 경우가 있어요. 그렇기 때문에 프로그램이 실행하는 중간에 크기가 결정이 됩니다. C언어에서는 malloc(), calloc() 과 같은 함수가 이러한 역할을 하게되는데, 이때 이러한 역할을 하는 요소들을 모아놓은 곳이 heap이에요.


Stack영역: C언어에서 흔히 사용되는 지역변수, 매개변수, 리턴 값 등이 이곳에 해당됩니다. 이곳은 해당 코드가 실행되고 종료되면 바로 사용했던 메모리를 반납합니다. 그래서 이 역시 또한 프로그램이 실행하는 중간에 크기가 계속해서 바뀌게 되는거죠. 


Heap과 Stack 영역은 실행 중간에 크기가 바뀌기 때문에 중간에 해당하는 영역을 일정공간 비워두게 됩니다. 그런데 프로그램 코드를 잘 못 작성하게 되면 서로의 영역을 침범하는 경우가 발생하는데요. Heap 영역이 너무 많이 생겨 Stack 영역을 침범하는 경우는 heap overflow라고 하고, 그 반대는 stack overflow라고 합니다.


<사진3>



이렇게 하나의 프로그램이 완성이되면 하나의 단위로써 Disk에 저장되게 됩니다.






<2.Process>


프로그램을 만들어 Disk(SSD, HDD)에 저장시켰으면 실행시켜봐야겠죠?

우리가 프로그램을 실행시키면 운영체제가 Disk에서 해당 프로그램을 메인메모리에 올려주게 됩니다.


그럼 프로그램이 (CPU가) 실행 가능한 형태로 변경이되는데요. 이때 메모리에 올라가 실행준비가된 프로그램을 process라고 부릅니다. 실제로 process의 정의는 "process is program in execution"이라고 합니다. 



<사진4>



Disk에 있던 program이 메모리에 올라와 process가 되었다는건, 다시말해 program이 CPU가 이해할 수 있는 구조인 process로 변경되었다는것을 의미하겠죠? 그렇다면 CPU가 이해할 수 있는 process의 구조란 무엇을 의미하는걸까요? 답부터 말씀드리면 PCB가 CPU가 이해할 수 있는 process의 (자료)구조라고 할 수 있어요!




<3.PCB(Process Control Block)>


좀 더 구체적으로 CPU가 이해하기 위해서 process는 어떤 구성요소를 갖고 있어야 할까요? 즉, PCB는 어떻게 구성되어야 하는걸까요?


1)PID (Process ID)

- 프로세스의 고유한 번호에요. 당연히 각각의 프로그램의 고유ID가 있어야 서로 고유의 (메모리)영역을 침범하지 않겠죠? 그리고 프로그램간의 통신을 하는 경우도 발생할 수 있으니 서로 누구인지 인식할 수 있는 ID가 있어야 하기 때문에 PID라는 개념이 생겨났어요.


2)State

- Process의 현재상태를 의미해요. 이 부분은 바로 뒤에 CPU Scheduling 부분에서 설명하도록 할게요.



<사진5>


3)Pointer

- process가 위치하고 있는 메모리 주소 정보에요. 각각의 프로세스는 고유의 영역을 갖고 있다고 말씀드렸는데 해당 영역의 위치정보를 갖고 있어야 하기 때문에 Pointer라는 것이 존재해요.


<사진6>



4)Priority

- 이 부분도 CPU scheduling에서 자세히 설명하도록 할게요.


5) Program counter

- 하나의 process 내에서 다음에 실행될 명령어 주소 값을 가지고 있어요


6)I/O information

- Process가 할당 받은 I/O 자원들에 대한 정보에요. 이 부분도 아마 CPU scheduling을 보시면 더 명확히 이해하실 수 있으실 거에요.


7) Accounting information

- CPU를 사용한 시간 정보입니다.



앞서 '2)State, 4)Priority, 6)I/O information 에서 CPU scheduling에 대해서 언급한 바 있었는데요. 간단하게 CPU scheduling이 무엇인지 알아보도록 할게요!






<4.CPU Scheduling>


우리가 컴퓨터에서 작업을 할 때, 대부분 하나 이상의 프로그램들을 실행시키게됩니다. 이때 프로그램들이 메모리에 업로드되어 각각 고유의 process들이 되는데요. 그렇다면 CPU는 아래 그림처럼 process1 작업이 다 끝날때까지 다른 process에는 접근을 안할까요??  만약 Process1을 실행시키다가 굳이 CPU가 하지 않아도 될 작업들이 진행될 때, cpu가 다른 process의 일을 처리하고 다시 process1으로 접근하면 더 효율적이지 않을까요?


<사진7>


위와 같은 질문을 통해 나온 개념이 CPU scheduling이라는 개념이에요. 우리는 운영체제라는 시스템이 CPU가 놀지 않도록 process의 상태에 따라 cpu를 scheduling하도록 설계했답니다. 즉, 수 많은 process가 하나의 CPU를 점유하려고 달려들때 운영체제가 CPU를 문제 없이 점유 하도록 process들을 scheduling(관리) 해준다는 개념인거죠!



<사진8. CPU scheduling>



하나의 예를들어볼까요?


특정 process는 CPU에 의해 실행이 되다가 프린트 또는 다른 입출력 장치를 이용할 경우 다른 process에게 CPU를 양보하게 됩니다. 생각해보면 '워드 2장을 프린트로 출력'하는 행위는 CPU가 하는게 아니라 프린터가 하는거에요. 그래서 CPU가 워드 2장에 대한 내용만 프린터에 전달해주면 CPU의 역할을 끝나게 됩니다. 그런데 CPU가 프린터가 끝날때 까지 기다려야 하나요? 아니죠! 그래서 프린터와 같이 CPU와는 별개의 작업이 진행될 때는 해당 process가 잠시 대기 상태('2)State')가 됩니다.

그런데 만약 프린터작업이 끝났을 경우에는 어떻게 할까요? 만약 워드 프로그램에서 프린터 작업이 마무리 되면 알아서 프로그램이 종료가 되나요? 아니죠! 프린트 작업이 마무리 되려면 CPU가 해당 '워드 프로그램에게 프린터 작업 종료해!'라고 말해야해요. 안그러면 다른 문서를 프린트하려고 하면 '현재 계속 프린트가 작동되고 있습니다'라는 메시지를 전달할거에요...


그래서 프린트 작업이 끝나면 대기가 되었던 process를 다시 CPU가 점유해야해요. 그런데 다른 process들도 있는데 어떻게 CPU를 다시 점유할 수 있을까요? 이러한 문제 때문에 I/O 같은 작업으로 인해 CPU를 양보해주는 process들은 이 작업이 끝나면 가장 먼저 CPU를 점유할 수 있도록 해줍니다. 즉, CPU를 선점할 수 있는 우선권('4)priority')를 제일 높게 설정해주는거죠!




그렇다면 실제로 우리 컴퓨터에서는 얼마나 많은 process가 동작하는지 볼까요?


"윈도우키 -> 작업 관리자 -> 성능 탭" 순서로 보시면 CPU의 process가 얼마나 많이 실행되는지 볼 수 있을거에요.  



이번 시간에는 Process와 CPU scheduling에 대해서 알아봤어요.

Process의 개념과 PCB라는 개념을 이해하고 있어야 core와 thread에 대한 개념을 좀 더 명확히 이해할 수 있기 때문에 다뤄봤습니다.

다음 시간에는 CPU, Memory, 운영체제간의 관계를 좀 더 디테일하게 알아보고 32bit, 64bit가 뭘 의미하는 것이고 CPU에서 x86이라는건 뭘 나타내는것인지 알아보도록 할게요!





[글 래퍼런스]

https://jungwoon.github.io/android/2019/07/16/Process-Thread/



[사진 래퍼런스]

사진1

https://sfixer.tistory.com/entry/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%ADcode-data-stack-heap

사진2,3

https://aerocode.net/199

사진4

https://copycode.tistory.com/39

사진5

https://jungwoon.github.io/android/2019/07/16/Process-Thread/

사진6

https://docsplayer.org/117139474-Microsoft-powerpoint-o8-pptx.html

사진7

https://slidesplayer.org/slide/14685169/

사진8

https://itdexter.tistory.com/390


안녕하세요~



이번 시간에는 컴퓨터가 기본적으로 어떤 순서에 의해 동작하는지 알아보도록 할거에요~

보통 이러한 개념은 컴퓨터학과에서 컴퓨터 구조(Computer Architecture)와 운영체제(Operating System; OS)라는 과목에서 배울 수 있는데, 

이곳에서는 너무 자세하게 말씀드리진 않고 간단하게만 설명해 보도록 할게요!






<1.기본구성요소>


컴퓨터는 기본적으로 CPU, Main Memory, I/O(Input/Output) device로 구성됩니다. 


<사진1>



CPU가 main memory에서 명령어를 읽어들어와 특정 task을 수행하게 됩니다. 보통 task라는 것은 계산을 한다던지 다른 I/O device 장치들에 특정 명령을 하게 되는 방식인거죠. 예를들어, 우리가 프린트(Output device)를 실행시키는 것도 CPU가 memory(기억장치)에서 '프린트를 작동시켜라' 라는 명령어를 읽어들이고 프린트에다가 명령하는 원리에요. 그렇기 때문에 CPU를 컴퓨터의 뇌라고 부른답니다.



<사진2>





<2. 컴퓨터가 켜질 때>


컴퓨터가 켜질때 어떤 일이 일어날까요?

컴퓨터가 켜지면 컴퓨터에 있는 하드웨드들을 깨워줘야 하지 않을까요?

이렇게 컴퓨터가 켜지면 하드웨어가 깨우는 모습을 "컴퓨터를 초기화" 시킨다라고 합니다.


그런데 다짜고짜 컴퓨터를 켜주면 저절로 초기화 시켜줄까요? 컴퓨터가 지능을 갖고 있지 않은 이상 어떤 하드웨어들을 초기화 시키라고 명령을 내려주어야 할거에요. 이렇게 컴퓨터를 초기화 시키기 위해서는 초기화 시키기 위한 명령들을 모아둔 프로그램이 있어야하는데 이러한 역할을 하는 프로그램을 Boot Loader라고 해요.


컴퓨터가 켜지게 되면 CPU는 제일 먼저 Boot loader를 읽어드리도록 설정이 되어있어요. CPU가 곧바로 읽어들여야 하기 때문에 Boot loader는 처음부터 main memory에 상주해 있어요. Boot loader를 잘 못 건드리면 컴퓨터가 실행이 되지 않기 때문에 아무나 건드리지 못하게 memory 안에서도 ROM(Read Only Memory)라는 영역에 할당되어 있습니다.


CPU가 boot loader를 읽어드리면 컴퓨터 내부의 각종 초기화 작업을 진행하게 되요. 부팅화면을 본적이 있으시죠? 이 부팅화면이 보일때는 '컴퓨터가 내부적으로 초기화 작업을 하고 있구나'라고 생각하시면 돼요. 


<사진3>




<사진4>



Boot Loader는 컴퓨터 내부를 초기화 시키는 일 외에도 다른 중요한 작업을 합니다. 다른 중요한 작업은 바로 '운영체제를 메모리에 업로드'하는거에요.


Boot loader와 달리 OS는 처음부터 memory에 올라가 있지 않아요. 누군가가 메모리에 load를 해줘야 하는 프로그램인셈이죠. 생각해보세요 Dual 부팅 하시는 분들보면 윈도우 운영체제를 실행시킬지 리눅스 운영체제를 실행시킬지 정하잖아요? 만약 OS가 RAM에 있으면 Dual 부팅을 하지도 못할거에요 (Dual 부팅은 흔히 한 컴퓨터에서 두 개의 운영체제를 선택해서 쓰려는 개념으로 이해하시면 되요).


그래서 초기에는 Disk(HDD, SSD)에 OS 프로그램이 있다가 Boot loader에 의해 OS(window or Linux)가 메모리에 올라가게 됩니다.




메모리에 올라간 OS 프로그램을 CPU가 읽어들이면서 OS를 초기 세팅하게 됩니다.


<사진5. Window 7 부팅중...>




이러한 작업이 완료되면 우리가 사용할 수 있는 컴퓨터 바탕화면이 나오게 된답니다~








지금까지 컴퓨터가 켜지면 어떻게 동작하는지 알아봤어요.


기본적인 원칙은 아래와 같이 정리할 수 있어요.


1. 컴퓨터가 어떤 작업을 하기 위해서는 메모리에 있는 명령어를 읽어들여야 한다.

2. 메모리 용량은 제한적이다. 그렇기 때문에 우리가 실행시키는 프로그램들은 Disk(SSD, HDD)에 있다가 실행을 시키면 그때서야 메모리에 올라온다.

3. 프로그램이 메모리에 올라오게 되면 그때서야 CPU가 해당 프로그램의 명령어를 읽어들여 작동시킨다.


아직 까지는 추상적으로 이해되시나요?


그럼 앞으로 "CPU->RAM->GPU" 순서대로 대로 알아보면서 CPU, RAM, GPU의 스펙에 명시된 용어들을 이해하도록 할거에요. 예를 들어, CPU에서 말하는 코어와 스레드라는 개념이 무엇인지, 딥러닝을 구축할 때 이러한 스펙이 어느정도가 되어야 하는지에 대해서 알아보도록 할거에요.


이 글을 다 읽으셨을 땐, 전문가까지는 아니더라도 "나도 딥러닝을 돌릴 수 있는 서버스펙 정도는 혼자서 구축할 수 있어~"라고 말할 수 있었으면 좋겠어요 ㅎㅎ (물론 돈만있다면 ㅜㅜㅜ)



[사진 래퍼런스]

사진1

https://www.doc.ic.ac.uk/~eedwards/compsys/memory/index.html

사진2

http://lily.mmu.ac.kr/lecture/18ca/ca_01.pdf

사진3

https://slidesplayer.org/slide/14685169/

사진4

https://smartindigital.tistory.com/entry/%EB%B6%80%ED%8C%85-%EC%A4%91-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%9D%98-%EB%A9%88%EC%B6%A4-%ED%98%84%EC%83%81

사진5

https://www.youtube.com/watch?v=jrNhQLXmJGM


'컴퓨터 하드웨어' 카테고리의 다른 글

0.글을 쓴 배경  (0) 2020.06.28



안녕하세요~


이번글에서는 GPU의 탄생배경에 대해서 설명해보려고 합니다!




<1.GUI의 등장>


우리가 현재 사용하고 있는 window 같은 경우에는 아이콘들이 있고 이를 통해 필요한 프로그램을 실행시키죠? 이렇게 Graphic으로 쉽게 사용자(User)가 컴퓨터를 사용할 수 있게 해주는 방식(Interface)을 GUI(Graphic User Interface)라고 해요. 그렇다면 과거에는 어떻게 컴퓨터를 이용했을까요?



<사진1>





초창기 컴퓨터는 단순히 MS-DOS 창을 이용했다고해요. 위에서는 프로그램을 실행하기 위해서 아이콘을 더블클릭하기만 하면 됐지만, 과거에는 컴퓨터 명령어를 입력해서 프로그램을 실행시켰다고합니다 (리눅스를 사용하시는 분들이면 이해하기가 더 쉬우실 거에요 ㅎ). 



<사진2>



그런데 컴퓨터 회사들은 더 많은 사람들에게 컴퓨터를 판매하기 위해 좀 더 이용하기 쉽게 컴퓨터를 발전시키는데 주력을 했습니다. 그래서 마우스나 GUI와 같은 기능들을 고안하기 시작했던거죠!


<사진3. 최초의 마우스>



초창기 컴퓨터에는 GPU가 없었기 때문에 GUI 환경을 구성하기 위해서는 CPU가 열심히 일해야했어요.

예를들어, 해상도가 320X200인 모니터에서 게임을 한다고 가정했을 때, 화면이 바뀔 때마다 64000(=320x200)개의 pixel 정보를 CPU가 처리해줘야 했습니다.



<사진4>



이렇게 작업양이 많아지다보니 CPU 속도도 줄어 들게 되어 많은 문제를 야기하게 되었죠 ㅜㅜ

이전에 작성한 CPU scheduling(링크)을 보면 CPU가 시간이 많이 걸릴거 같은 task들은 다른 입력장치에게 미루거나 중요하지 않은 task들은 우선순위(priority)를 뒤로 미루는 것을 볼 수 있었죠?


그래서 사람들은 모니터에 화면을 단순히 출력시키는 일을 굳이 CPU가 책임질 필요는 없다고 생각하게 됐어요. 모니터를 출력하는 방식을 가만히 생각해보면 pixel 하나하나를 순차적으로 출력 시키지 않아도 화면 전체를 동시에 뿌려주는게 가능하겠죠? 


예를들어, 하나의 바탕화면에서 pixel 순서를 거꾸로 보여주거나, 바탕화면을 구성하고 있는 pixel들의 순서를 랜덤하게 뿌려줘도 결국 화면에 나타나는 배경화면은 같을거에요. 즉, 화면을 출력하는데 첫 번째 pixel부터 마지막 pixel까지 순차적으로 뿌려줄 필요는 없다는 이야기가 되는데 이를 다른 말로 하면 화면을 출력해주는 task를 할 때는 병렬(parallel)로 수행해도 큰 문제가 안된다는 이야기에요!




<사진5>


아래 영상을 보시면 순차적으로 작동하는 CPU와 병렬적으로 사용하는 GPU에 대한 직관적인 이해를 얻을 수 있을거에요!










<2. 기존 GPU의 역할 - 게임시장>



역시 GPU를 이야기 할때 게임시장을 빼놓을 순 없겠죠? 

사실 GPU는 1970년에도 있었다고 해요. 그런데 GPU가 많은 사람들의 주목을 받기 시작한건 1993년 intel이 최초로 pentium(펜티엄)이라는 브랜드로 CPU를 출시하기 시작하면서 부터에요.




1995년 윈도우 95의 출시와 맞물려 컴퓨터가 대중화되기 시작했어요. 당연히 컴퓨터가 대중화되다 보니 많은 사람들이 게임도 즐겨하게 되었고 이는 GPU를 개발하려고 하는 회사들에게는 엄청난 기회였어요.




1993년 스탠포드 전기공학 석사인 대만인 청년이 NVIDIA를 설립했지만, GPU 시장을 주름잡았던 기업은 3dfx라는 곳이에요. 1996년 3dfx라는 미국의 그래픽 회사는 3D 기술에 모든 연구를 집중하였고 Voodoo라는 그래픽 카드를 출시게 됩니다.



<사진6. Voodoo>




1980~1990년대 굉장히 단순한 게임만으로 재미를 느꼈던 사람들은 Voodoo의 등장으로 인해 생겨난 최초의 3d shooting 게임을 체험하면서 신세계를 경험하게 됩니다. (저도 초등학교때 삼촌집에서 Quake만 8시간 했던 기억이 나네요 ㅎㅎㅎ) 


[1980-1990 게임]



 [1996 최초의 3D shooting 게임, Quake]




이후 바람의나라(1996), 리니지(1998), 스타크래프트(1998) 등의 게임들이 흥행하면서 GPU와 게임시장은 서로 상생하며 발전해나가기 시작했습니다.





3dfx는 자신들이 GPU 시장을 주도했기 때문에 자신들의 GPU를 표준안으로 제시하기 시작했어요. 그래서 다른 GPU 회사들이 3dfx가 만들어 놓은 GPU의 골격이되는 래퍼런스(표준) (GPU)카드를 만들고 다른 회사들이 이를 이용하여 조금씩 수정해 출시하도록 하는 비지니스 환경이 구축되었죠.


그런데 다른 회사에서 래퍼런스 카드를 이용하고 더 큰 이윤을 남기는것을 본 3dfx는 자신들이 모든것을 도맡아 하려고 했고, 큰 이윤을 남기기위해 독점을 하기 시작합니다. 그러자 Voodoo 그래픽 카드 값이 치솟았고 소비자들은 Voodoo를 더 이상 구매하지 않으므로써 3dfx의 몰락이 시작 됐습니다.


     

<사진7>





<3. NVIDIA의 등장>


2002년 3dfx가 사업전략 실패로 파산하게 되자, NVIDIA(1993년 설립)는 3dfx의 모든 기술력을 사들이게 시작합니다. 


NVIDIA는 1999년 최초의 NVIDIA Geforce GPU 모델인 Geforce 256을 출시했지만, 3dfx 3D 기술력과 NVIDIA 래퍼런스 카드를 융합한 Geforce 4 시리즈를 출시하면서 세계시장의 주목을 받기 시작합니다.



<사진8. NVIDIA Geforce 4 시리즈>



2004년 Dual core의 등장과 함께 GPU 기술도 향상되고 있었어요. 하지만 GPU의 기술 발전에 있어서 '전력량 소모'는 해결해야할 큰 이슈였죠.


(2005년 중반에는 GPU의 hardware 성능 향상 뿐만아니라 GPU를 최대한 잘 활용할 수 있도록 해주는 software에 기술 투자도 주목을 받기 시작합니다. 이때부터 DirectX, OpenCL, CUDA와 같은 software program이 등장하기 시작했습니다.)


한때 AMD에서 출시한 GPU 라데온이 전력량 소모가 적은 GPU를 출시하면서 NVIDIA의 시장점유율을 앞서긴 했지만 2006년 NVIDIA가 Geforce 8800 GTX를 출시하면서부터 NVIDIA의 독주가 시작됩니다. 




<사진9>




<사진10.NVIDIA GPU 출시 모델명>





(아래 영상을 참고하시면

더 쉽게 빠르게 GPU 역사가 이해가 되실거에요!)






지금까지 GPU 역사에 대해서 간략하게 알아보았어요!


그럼 다음 시간부터 본격적으로 NVIDIA에서 출시하는 GPU 제품에 대해서 알아보도록 할게요!







[글 래퍼런스]

https://www.youtube.com/watch?v=tsB97IAejbk&feature=youtu.be


[사진 래퍼런스]

사진1

https://www.tutorialspoint.com/windows10/windows10_gui_basics.htm

사진2

http://itchitchats.blogspot.com/2011/11/first-pc-ibm-compatible-computer.html

사진3

https://time.com/3831359/computer-mouse-history/

사진4,7

https://www.youtube.com/watch?v=tsB97IAejbk&feature=youtu.be

사진5

https://www.nvidia.com/ko-kr/high-performance-computing/

사진6

https://en.wikipedia.org/wiki/File:KL_Diamond_Monster3D_Voodoo_1.jpg

사진8

https://www.techpowerup.com/gpu-specs/geforce4-ti-4400.c180

사진9

https://wccftech.com/nvidia-amd-discrete-gpu-market-share-report-q3-2017/



안녕하세요~


딥러닝을 공부하다 보면 이론에 대한 지식이 어느정도 쌓인경우 이를 코드로 구현시키는 과정이 필요해요.


그런데 문제는 딥러닝을 하기 위해서 컴퓨터를 어떻게 구성해야 될지 모르시는 분들이 많다는 점이에요. 딥러닝 서버를 구축하기 위해서는 CPU를 뭘 사야하고, GPU는 어느정도 급이 되어야 하고, RAM, SSD 등 정말 어디서부터 살펴봐야할지 모를정도에요.


그렇다고 컴퓨터 전공지식을 모두 들을 시간도 없는데 말이에요...



그래서 저도 공부해볼겸 딥러닝 서버를 구축하기 위한 배경지식을 정리해서 공유하면 참 좋겠다는 생각을 하게 됐어요.



컴퓨터가 어떻게 동작하는지에 대한 기본적인 원리를 기반으로 CPU, GPU, Memory에 대한 기본개념들을 배우고 나면 나중에 딥러닝을 실제로 구현하시는데 더 많은 도움이 될거라 생각해요.


추가적으로 딥러닝을 하시다보면 GPU, CPU, Memory 에러가 상당히 많이 발생하는데 이러한 문제를 해결하기 위한 단서를 제공해줄 수 있는 그런 Chapter가 됐으면 좋겠어요!



그럼 지금부터 글을 작성해보도록 하겠습니다! 

'컴퓨터 하드웨어' 카테고리의 다른 글

1.컴퓨터 동작 원리 (운영체제)  (4) 2020.06.28

+ Recent posts