- chapter1 의 목표에서 제일 중요한 부분 = performance
- 그 외에는 컴퓨터의 type, 멀티 코어를 써야 하는 이유에 대해 배울 예정. 퍼포먼스를 비교할 수 있고 왜 멀티 콬어를 써야 하는지 설명할 수 있으면 된다.
- 벤치마크 = 서로 다른 두 컴퓨터의 performance 를 비교한는 일. 예를 들어 카트라이더를 하는 게 목적인 사람은 게이밍 pc 를 사는 것이 맥북을 사는 것보다 performance 측면에서 더 좋음
- 컴퓨터의 클래스들(타입들) → PC, Server Computer, Super Computer, Embedded Computer 가 있음. pc 와 서버를 딱 자를 순 없음. pc 를 네트워크에 물리면 서버 컴퓨터가 됨.. 근데 보편적으로 pc 는 pc로 쓰니까.. 서버 컴퓨터는 네트워크에 물려 있는 컴퓨터임. 수퍼 컴퓨터는 고 성능의 서버 컴퓨터로 주로 기상청 같은 곳에서 많이 씀. 128bit 를 사용하기도 하는 등 굉장히 높은 accuracy 를 자랑함. 임베디드 컴퓨터는 iot device 들 생각하면 됨. 애플 워치나 스마트폰, 티비 등등
- 용량 이름은 외워둘 수 있도록 하자. → ? 이진수의 term 은 왜 존재하는 것인지..?

- 여기서 performance 가 frequency 에 비례하지 않는다는 것이 어떤 의미인지..?

- 컴퓨터 성능을 최적화 하는 방법. → cpu 칩이 찍힌 그 순간, 컴퓨터의 max 성능은 고정되어 잇음. 그 상황에서 최적화를 얼마나 잘 하느냐에 따라 performance 를 높일 수 있음.
-
- 그 중 가장 중요한 건, 알고리즘. O(n) 을 줄이는 것이 가장 중요함. 2) 컴파일러의 경우 예를 들어 같은 코드여도 파이썬은 인터프리트 언어라 느리고 씨는 상대적으로 빠름. 컴파일할 때 인스트럭션을 어떤 순서로 하느냐에 따라 이런 컴파일 속도에 차이가 나는데 이 순서를 정하는 것이 컴파일러임. 그러니까 컴파일러가 어떤 순서로 인스트럭션을 처리하느냐에 따라 성능 달라질 수 있음. 3) 하드 디스크에 있는 메모리를 어떻게 하면 cpu 로 더 빨리 가져올 수 있을지 4) OS 가 어떻게 동작하는지
- 퍼포먼스를 올리기 위한 8개의 방법들이 있음. 1) 추상화. 다른 개발자가 쉽게 사용할 수 있게끔, printf 등의 함수를 만들어 stdio.h 파일에 넣어놓으면 다른 개발자는 그 함수의 원리를 몰라도 그것을 사용해서 코드를 만들 수 잇음. abstraction 의 개념이 그런 것임. 컴구에서는 블록이 함수 역할을 한다고 보면 되는데 input 에 대해 특정 ouput 이 나오는데 작동 원리는 몰라도 되고 그냥 그 박스를 이용해서 어떻게 인스트럭션을 움직이느냐가 중요함. 2) 실행 시간의 90% 를 차지하는 것이 있다면 그것의 성능을 개선하는 것이 효율적이다. 3) Parallelism 은 멀티 코어를 이야기 하는 것임. cpu 의 개수를 늘릴 수록 빠른 작업이 가능. 4) pipelining 은 자동차 공장의 공정을 생각해 보면, 효율적인 분업화로 인해 처음 자동차가 만드는데는 시간이 걸려도 이후로는 일정한 시간 간격으로 자동차가 계속 운반됨. 그런 효율성을 통해 성능을 높일 수 있음. 5) Prediction 은 자주 쓰는 앱 같은 것들을 메모리에 미리 올려두면 효율성이 증가됨. 6) Hierarchy of memories 는 cpu 는 굉장히 빠르게 일하는데 하드디스크에서 데이터를 가져오는 시간이 많이 걸림. 즉 faster 한 메모리일 수록 cpu 근처에 있어야 하고 자주 쓰는 데이터는 cpu 근처 메모리에 있어야 함. 참고로 cpu 는 정말 빠르고 하드디스크는 물리적 한계로 느림. 원판이 돌아가야 하므로. 7) Dependability = failure r가 있을 때 recovery 할 수 있는 대안이 있는지. 동일한 연산하는 시스템이 2개 3개 있는 경우. 중요한 연산의 경우 이렇게 해야 함. 8) 무어의 법칙 → 트랜지스터의 크기가 작아져서 한 cpu 에 들어가는 개수가 늘어날수록 성능이 좋아짐.
- 프로그램은, 하드웨어와 하드웨어를 조종하는 시스템 소프트웨어(운영체제같은) 그리고 os 위에서 작동하는 애플리케이션 소프트웨어로 이루어져 있음.
- 하이 레벨 랭기지에서 바이너리 즉 기계어로 갈 수록 양이 매우 많아짐. 그리고 어셈블리어 한 줄이 32비트 기계어 한 줄에 해당됨.
- 컴퓨터의 구성 요소로 input output 디바이스로는 유저 인터페이스 디바이스(디스플레이, 키보드, 마우스 등의), 저장 디바이스(하드 디스크, cd, dvd, flash 같은..), 네트워크 어댑터가 있음.
- 기계어에 어떤 context 를 주느냐에 따라 의미하는 게 달라진다 했는데 display 의 경우 컬러 값을 주면 됨. 그래서 24비트로 블랙에서 화이트까지 rgb 이용해서 거의 모든 컬러 표현 가능하고 더 선명하게 하려면 32 비트로도 표현 가능. 참고로 아무리 계산 잘 해도 물리적인 픽셀 개수가 모자라면 선명도 기대만큼 안나옴
- cpu 는 데이터가 흐르는 통로인 datapath 와 몇 개의 탱크에 어떤 탱크에 물을 넣을지를 결정하는 control 부분과 탱크 자체 즉 저장 공간을 뜻하는 cache memory 로 이루어져 있다. 즉 세 가지를 생각하면 됨.