내 목적이 이렇다고 상상해보자
CPU의 속도를 빠르게 만들어보고싶다.
힌트가 2가지 주어진다
1. 컴퓨터 부품들은 클럭신호에 맞춰 일사불란하게 움직인다
2. CPU는 명령어 사이클이라는 정해진 흐름에 맞춰 명령어들을 실행한다.
지금의 답:
최신 사양으로 맞춘다?
메모리를 늘린 고사양 컴퓨터를 산다?
CPU 제어장치, ALU, 레지스터가 시스템 버스를 통해 메모리정보를 더 효율적으로 가져오고 명령어를 처리할 수 있도록 레지스터가 여유있는 것을 산다?
클럭속도?
클럭이 뭔지 몰랐다.. 클럭은 컴퓨터에 모든 부품을 일사불란하게 움직일 수 있게하는 시간단위이다.
그럼 클럭이 빠르게 반복되면 컴퓨터에 있는 모든 부품들도 빠르게 움직이게 되는 것일까?
다그런 것 아니지만 대체적으로 YES라고 말한다. 클럭속도는 CPU의 속도단위로 간주된다고 한다.
클럭속도 : 헤르츠(Hz)단위로 측정
헤르츠 (Hz) : 1초에 클럭이 반복되는 횟수
클럭이 1초에 100번 반복되면 ?
100Hz이다
어마어마하게 많이 반복된다는 것을 알 수 있다. '
클럭속도를 빠르게 하면 할 수록 컴퓨터가 빨라질까?
아니다. 너무 과하게 빠르면 cpu가 과열될 위험이 있다.
그럼 처음에 한질문으로 되돌아가보자 클럭속도를 늘리는 방법외에 cpu의 처리속도를 늘리려면 어떻게 해야할까?
코어
위 사진을 보면 core가 6개고 thread가 16개이다.
core를 알려면 cpu를 알아야하는데, cpu는 지금까지 알기론
명령어나 데이터를 가져와서 실행하는 것이었다.
코어를 알기위해선 현대적인 관점으로 cpu를 바라봐야한다.
정통적으로 명령어를 실행하는 부품은 하나밖에 존재하지 않았다.
하지만 오늘날 cpu에는 '명령어를 실행하는 부품'이 여러개 존재한다.
명령어를 실행하는 부품을 코어라는 용어로 사용한다.
그럼 궁금해진다 지금까지 배운 cpu라는 것이하는 역할을 코어가 동일하게 수행할 수 있다는 것인가? 그럼 실질적으로 컴퓨터는 뇌가 여러개일 수 있다는 것인가?
맞았다! 오늘날에는 다음과같은 역할을 하는 부품이 여러개 있을 수 있다고 한다.
그 각각의 부품을 코어라고 부르게 되었다. 이렇게 코어를 여러개 가지고있는 CPU를 멀티코어라고 한다. 멀티코어 프로세서란 여러개의 CPU를 포함하고 있는 컴퓨터라고 해석할 수 있다.
코어수가 100개 1000개로 늘어나면 연산속도가 비현실적으로 빨라질까?
꼭 그렇지만은 않다.
여러개에 코어를 가지고있는 것도 중요하지만 얼마나 각각에 코어들에 명령어를 잘 분배하는지가 더 중요하다
Thread
'실행 흐름단위'-인터넷 백과사전
IT는 분리해서 생각해야한다. 하드웨어적인 스레드와 소프트웨어적인 스레드로
하드웨어 스레드 : 하나의 코어가 동시에 처리하는 명령어의 단위이다.
각각의 코어가 2개씩의 명령어를 수행한다고 생각해보자 그렇게되면 코어는 2개지만 한번에 4개의 명령어를 수행한다.
이것을 2코어 4스레드 CPU하고한다.
이렇게 하나의 코어가 여러개의 스레드를 실행하는 것을 멀티 스레드 프로세서라고한다.
그럼 위 인텔에 사진을 보면, 8개의 코어 16개의 쓰레드라고 나와있다.
그것은 8개의 코어가 각각 2개씩의 명령어를 수행할 수 있다는 것을 의미한다.
하드웨어 쓰레드를 여러개 가지고 있는 멀티스레드 프로세서를 설계한다고 생각해보자,
여기서 가장 큰 핵심은 "레지스터"이다
하나의 명령어를 실행하기 위해 꼭 필요한 레지스터들을 편의상 레지스터 세트라고 표기
이렇게 레지스터 세트가 2개로 나뉘면 하나의 코어가 여러명령어들을 동시에 처리할 수 있는데
예를 들어서 하나의 코어가 프로그램 카운터를 2개가지고 있다고 생각해보자, 메모리에서 읽어들일 주소(다음으로 인출할 주소)다음으로 인출할 명령어의 주소를 프로그램 카운터에 저장한다. 근데 프로그램 카운터가 2개 있으면 다음으로 실행할 명령어의 주소를 2개 지정할 수 있게된다.
스텍 포인터가 2개있다고 가정해보자. 스텍포인터는 스텍의 꼭대기를 가리키게 된다. 스텍 포인터가 2개있으면 2개의 스텍 꼭대기를 가리킬 수 있게된다.
(레지스터)가 중요하다 라는 것만 알고 넘어가자
메모리안에있는 프로그램은 CPU가 몇코어 몇스레드인지 알 수없다. 그저 명령어를 몇개씩 가져가는 구나 작업흐름이 몇개이구나 라는 것을 알 수있다.(메모리 입장)
하드웨어 스레드는 : 논리프로세서라고도 부른다. 메모리입장에선 몇개의 프로세서인지 알 수 없고 하드웨어 입장에서만 알 수 있음.
소프트웨어적인 스레드(궁금했던)
소프트웨어 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위
멀티스레드는 하나의 프로그램에서 동시에 두개에 영역이 실행되는 것
EX)
위 3개를 하나씩 수행하는 것이 아니라 동시에 수행하는 것을 멀티스레드라고 한다.
하나의 프로그램에서 독립적으로 실행되는 단위를 3개를 만들어서 동시에 실행하면 트리플 스레드가 되는 것이다.
운영체제 파트에서 (멀티스레드)에 대해서 배울 것임.
소프트웨어 스레드를 여러개만들면 하나의 프로그램에서 소프트웨어를 실행하는 단위가 여러개 만들어져서 하나의 프로그램을 동시에 여러군데를 수행할 수 있다고만 이해하면 됨
하드웨어 쓰레드가 하나라도 소프트웨어 쓰레드는 여러개를 만들 수 있다.
CPU는 내부적으로 프로그램을 실행할 때 엄청나게 빠르게 번갈아가며 실행을 함 이게 마치 동시에 사용되는 것처럼 사용자눈에 보이게 만듬 '
https://www.youtube.com/watch?v=VO0RQAA7KYc&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=14