2023/04 5

[컴퓨터 구조] 제 5장. 메모리 계층 사용

Principle of Locality 프로그램들은 그들이 최근에 사용한 data와 instructions과 똑같거나 근처의 주소들을 사용하는 경향이 있습니다. Temporal locality item을 썼다면, 짧은 시간 안에 다시 참조될 경향이 있다는 것입니다. e.g.) 반복문 안에 있는 instructions Spatial locality item을 썼다면, 가까운 주소지를 읽을 확률이 높다는 뜻입니다. (순차적) → 다른 item을 참조 배열, 순차적인 instruction 접근 Principle of Locality: Example 예를 한 번 봅시다. 위의 코드가 있을때 sum변수가 Temporal Locality a 배열이 Spatial locality가 되는 것입니다. Taking Adv..

컴퓨터구조 2023.04.17

[컴퓨터 구조]제 4장. Pipeline(2)

Pipelined Datapath RISC-V has a five - stage pipeline (IF, ID, EX, MEM, and WB) Pipelining을 Datapath로 나타내면 위 그림과 같습니다. Pipeline Registers Pipeline에서는 각 stage 사이에 레지스터를 필요로 합니다! → 이전 cycle에서 만들어진 정보를 가지고 있어야 하기 때문이죠. 이를 Pipeline Register이라고 합니다. 이 레지스터들은 들어오는 모든 data들을 저장할 수 있을 만큼 충분히 커야 합니다! 예를 들어, IF와 ID 사이에 있는 레지스터를 IF/ID Register이라고 합니다. 만약 32-bit architecture라면, 해당 레지스터는 64bit(32-bit instruc..

컴퓨터구조 2023.04.09

[컴퓨터 구조]제 4장. Pipeline

Overview of Pipelining Pipelining은 실행 시에 여러 명령들이 중첩되는 구현 기술입니다. 현재 pipelining기술은 보편적으로 사용되고 있습니다. 예를 들어,non-pipelined Version에서 세탁물을 예시로 든다면 이렇게 되지만 Pipelined Version에선 이런 식으로 시간이 훨씬 줄어든 것을 볼 수 있습니다. Pipelining에선 stages라고 불리는 모든 단계들이 동시에 작동합니다. 그래서 위의 Non-pipelined Version에선 총 16 times이 걸렸고, 아래의 pipeline에선 총 7 times이 걸렸습니다. → 따라서 16/7= 약 2.3배가 빨라졌고 이러한 빨래물들의 양이 무한하다면 4n/(n+3) = 약 4배 가량 빨라집니다. Pi..

컴퓨터구조 2023.04.08

[컴퓨터 구조]제 2장. 명령어(Instruction) : 컴퓨터의 언어(3)

Procedure calls procedures는 프로그래머가 한 번에 작업의 한 부분만 집중하게 해 줍니다. procedure는 엄연하게 함수와는 다르지만 여기선 같다고 생각해 주시면 될 것 같습니다. 위의 c언어 코드를 아래로 나타낼 수 있습니다. 추가 예시) caller : procedure을 호출합니다. callee : procedure입니다. caller는 callee에게 argument(실인자)를 줍니다. callee는 caller에게 결괏값을 return 해줍니다. 즉 추가 예시에서 f1 procedure는 caller이자 callee인 거죠. Procedure Execution 프로그램은 procedure의 실행에서 6가지 스텝을 따라야 합니다. procedure가 접근할 수 있는 장소에 ..

컴퓨터구조 2023.04.08

[컴퓨터 구조]제 2장. 명령어(Instruction) : 컴퓨터의 언어 (2)

Registers vs Memory 레지스터는 메모리에 비해 access 속도가 더 빠르다. Risc-V에서 메모리에 있는 데이터는 arithmetic instructions에 바로 접근하지 못합니다. → 메모리 데이터는 실행을 위해 loads와 stores가 필요합니다. 즉 더 많은 instruction이 실행되어야 하죠. 메모리는 실행을 위해 BUS를 통해야 한다. 컴파일러는 가능한한 레지스터를 통하여 변수를 처리하여야 한다. 즉 덜 자주사용 되는 변수는 memory로 spill 해야 하며, 이 과정을 Spilling Register이라고 합니다. → 그렇기에 Register Optimization은 중요합니다. 즉 덜 자주사용 되는 변수는 memory로 spill 해야 하며, 이 과정을 Spilli..

컴퓨터구조 2023.04.08