Encoding이란 말 그대로 정보를 특정 패턴과 mapping을 하는 과정이다. 이전 포스트에서도 이야기했다시피 정보는 거기에 포함된 불확실성을 줄이는데 의미가 있는 것이고, 이렇게 encoding과정을 거치게 되면 그런 목적을 어느정도 달성할 수 있다. 말이 조금 어려운 것일수도 있는데, 실제로 우리가 어떤 정보에 대한 규칙을 정의하고, 여기에 해당하는 정보가 들어왔을 때 그대로 해석하는 것으로 이해하면 좋을거 같다. 예를 들어서 사전에 A는 00, B는 01, C는 10, D는 11이라는 2bit information의 규칙이 정의되어 있다고 가정을 하자. 만약 ABBA라는 정보를 얻고 싶으면 어떤 입력이 들어와야 할까? 당연히 00 01 01 00 이라는 8bit information으로 전달하면..
이전 포스트에서 다뤘던 것처럼 Information을 전달하는데 있어서는 그만큼 적절한 정보량으로도 전달하는게 중요하다. 이게 잘못되면 원하는 정보를 정확히 전달할 수 없을 수도 있고, 혹은 너무 비효율적으로 전달할 수도 있는 것이다. 이런 걸 수치적으로 평가하는 척도를 Entropy라고 한다. 보통 Entropy라는 말자체는 이런 컴퓨터 용어보다는 화학쪽에서 엔트로피의 법칙이라고 하면서 많이 들어봤던거 같은데.. 아무튼 사전적인 정의는 다음과 같다. 간단히 요약하자면 주어진 정보의 평균량 정도가 되겠다. 지난번에 제시한 예시처럼 카드뽑기를 하는 경우에는 물론 카드 하나만 뽑는 케이스도 있겠지만, 혹은 여러개를 뽑는 조건도 있을 것이고, 그 하나하나를 뽑는 조건이 다 다를 수도 있다. 이 모든 것을 전에..
정보를 얻는다의 의미는 무엇일까?해석이야 다양하게 할 수 있겠지만 일반적으로는 각각의 가능성을 가진 사실 중에서 사용자에게 유용한 것을 뽑는 것이 정보를 얻는 것이다. 이 말은 즉, 아주 확정적인 사실(P=1)로부터 정보를 얻을 수도 있고, 혹은 사실이 아닌 것(P=0)으로부터 불확실한 정보를 얻어올 수 있다. 물론 이 경우는 정보라고 하기는 그럴 수도 있겠지만... 사전적으로 정보는 다음과 같이 정의되어 있다. 결과적으로는 어느정도의 불확실성을 해소하기 위해서 주고 받는 데이터를 의미한다. 예를 들어서 트럼프가 있다고 가정을 했는데 여기서 하나 뽑은 카드에 대한 Data로, " 그 카드는 하트모양을 띈다" 라는 것을 받았으면 어떨까? 그 카드는 하트 1일수도 있고, 하트 K일수도 있다. 이렇게 총 나열..
※ Herlihy , shavit 책을 그냥 혼자보기 쉽게 요약한 내용이라서 잘못된 내용이 담겨 있을 수 있다.분산시스템에서 초점을 맞추고 있는 형태는 MIMD(Multiple Instruction Multiple Data)의 구조다. [1]MIMD의 형태로는 위와 같이 Bus를 sharing하는 형태를 보일 수도 있고, 혹은 오른쪽처럼 Mesh 형태로 core와 memory가 분산되어 있는 형태를 취할 수도 있다. 이중에서 Shared Bus 형태는 당연하겠지만 contention이 발생한다. thread가 memory로부터 데이터를 읽어올때는 항상 한개의 thread만이 bus를 점유하기 때문에 이에 따른 memory쪽이나 thread간의 communication 에 대한 contention이 발생할..
요즘 학교에서 배우고 있는 분산시스템 수업에서 과제가 나왔는데 내용도 정리할 겸해서 올려본다.우리가 운영체제를 다룰때 앞장에서 Mutual Exclusion을 배운다. Mutual Exclusion을 사용하는 이유는 공유하는 Memory에 대해서 thread들이 접근할 때 각 thread가 사용하는 데이터에 대해서 확실하게 보장하기 위해서다. 이런 상황을 가정해보자만약 A0가 Write를 해주는 thread고 B0가 Read를 해주는 thread라고 가정을 해보자. 지금 보면 A0와 B0가 overlap되고 있는 것을 확인할 수 있다. 참고로 미리 알고 있어야 할건 A0 thread가 실행된다고 해서 write가 바로 이뤄지는 것이 아니라는 점이다. 마찬가지로 B0도 수행 시점이 b0가 되는게 아니라는 ..
컴퓨터 구조 수업을 듣다보면 갑자기 실생활에선 잘 들어보지도 못한 MIPS Architecture를 배우다가 끝난다. 물론 요즘 나오는 Patterson 책은 ARM 버전으로 나오기 때문에 ARM 만 열심히 배우다가 학기가 끝나지 않을까 생각한다. 그런데 문득 우리가 대부분 쓰고 있는 Intel이나 AMD에서 나오는 x86 CPU는 언제 배우나 싶은 사람도 있을 듯하다. 이렇게 생활상에서 많이 접하는 CPU구조를 배우려면 고급 컴퓨터 구조 수업을 수강해야 조금더 접할 수 있지 않을까 생각한다. 뭐 아무튼 몇 개의 포스트들을 통해서 가장 기본적인 구조인 SuperScalar 구조에 대해서 조금 다뤄보려고 한다. 컴퓨터 구조시간에 가장 중요하게 다뤄지는 주제중에 하나가 바로 Hazard에 관한 내용이 아닐까..
우리가 알고있는 Cache의 구조는 다음과 같다. 다들 알겠지만 프로세서와 Memory사이의 데이터는 항상 Cache를 거치게 되어 있다. 물론 이건 Architecture에 따라 다른 내용이긴 하다. 내가 연구실에서 다루고 있는 Single-chip Cloud Computer 에 포함되어 있는 Processor는 프로세서와 Memory사이의 데이터 이동시 Cache를 거치지 않는 경우도 있다. 하여간 프로세서가 Memory에서 주소를 넘겨주면 Main memory는 그 주소에 있는 데이터를 반환해준다. 여기서 Cache는 그 데이터가 지나가서 저장되는 역할을 한다. 비유를 하자면 데이터를 먹물이라고 비유할 때 Cache에 묻으면 그 색이 남는다. 물론 시간이 지나면 그 색이 희미해지는 식으로 이해하면 ..
Cache를 왜 쓸까? 그 질문에 대한 답이 아마 이 포스트에 담길 듯 하다. 그래 왜 쓸까? 그걸 알려면 일단 CPU와 Memory간의 관계를 알아야 될거 같다. 이런 CPU와 Memory와 같이 데이터가 내부적으로 이동하는 구조에서 성능을 좌우하는 요소는 물론 여러가지가 있겠지만 일단 가장 핵심적인 요인으로 다뤄지는 것이 바로 Latency가 될것이다. Latency란 그냥 있는 그대로 표현하면 데이터가 저장되어 있는 영역에 한번 접근하는데 걸리는 시간을 의미한다. 사실 어차피 Memory에 저장되어 있는 Instruction을 CPU가 읽어야 비로소 정상적인 Operation이 가능할텐데 통념상 그런 instruction을 읽고 처리하는 시간보다 Memory로부터 그 instruction을 읽어오는..
CA 강의 보다가 Cache에 대한 내용들이 많이 나와서 몇 포스트를 통해서 정리를 해보고자 한다. 흔히 Memory는 I/O작업에 대해서 Disk보다 엄청 빠르다고 알고 있지만 CPU 입장에서는 Memory에 직접적으로 Access해서 가져오는 Data에 대해서도 Overhead를 느낀다. 그래서 register라는 것을 Memory보다는 가깝게 CPU에 놓고 쓴다. 물론 DRAM 으로 구성된 Memory에 비하면 집적하는데 비용이 많이 들기 때문에 실질적으로 큰 양이 들어가지 않는다. 잠깐 구조를 보자. 자 이게 가장 원시적인 Register 집합, 즉 Register File이다. 논리회로를 들은 사람들은 아마 구성 소자들이 눈에 익을 것이다. 잘 보면 AND 게이트와 MUX DeMUX 등으로 구성..
다시 컴퓨터구조 책을 펼치고 공부하고 있다. 그런데 공부하면 배우는 내용이 꼭 컴퓨터 구조에 국한된 내용이 아니라는 것을 깨닫곤 한다. 예를 들어 이전 포스트에서 주구장창 다뤘던 hazard문제도 Architecture 관점에서 고려해야 되는 측면도 있으며, 한편으로는 컴파일러 관점에서 고려해줘야 할 점도 있다. 이런저런 생각을 하다가 혼자서 공부해본 내용을 조금 요약해보고자 한다. 컴퓨터내에서 instruction은 단순히 명령어만을 지칭하는 것이 아니라, 컴퓨터의 성능을 판단하는 지표로 사용된다. 쉽게 말해서 컴퓨터가 정해진 시간에 얼마나 instruction을 처리하냐를 생각하면 좋을 거 같다. 당연히 성능이 좋은 컴퓨터는 단시간에 많은 instruction을 처리할 수 있을 것이다. 이런 개념을 ..
잠깐 헷갈리고 있던 개념이 있어서 이자리에서 정리해보려고 한다. 과연 Single Cycle Implementation과 Multi Cycle Implementation 그리고 이전에 다뤘던 pipelined Implementation 의 차이는 무엇일까 하는 것이었다. 그 의문을 갖게 된 계기는 다음과 같다. 위의 이미지는 Pipeline Implementation의 DataPath이다. 그런데 잘 보면 알다시피 기본 베이스가 Single Cycle Implementation의 Architecture에다 중간중간에 Stage Register가 삽입된 형태를 띄고 있다. 내가 헷갈렸던 것은 Pipeline 자체도 Multi-cycle Implementation을 기반으로 나온 개념인데 왜 기본 구조는 S..
지난 포스트 두개를 통해서 간단한 Single Cycle Implementation을 정리했다. 그런데 정리하다보면서 느낀 건 1cycle상에서 처리하다보니, 특정 instruction 에서는 그 처리 시간이 늦어지는 경우도 있다는 것이다. 가령 lw(load word)와 같은 명령어는 같은 instruction을 수행하는데 있어서 MIPS Architecture에 구현된 대부분의 모듈에 Access한다. 당연히 해당 target 주소를 읽어오기 위해서 Register로부터 Read를 해와야 하며, Memory 에 저장되어 있는 값을 읽어오기 위해 Memory Read도 일어날 것이다. 또한 Target Address를 연산하기 위해서 ALU Operating도 있을 것이고, 구한 값을 다시 Regist..
지난 포스트에서 Arithmetic Instruction이 주어졌을때 data의 flow가 어떻게 흐르는지를 알아보았다. 그런데 중간에 잠깐 언급했던 내용중에는 opcode에 따라서 수행되는 data flow가 천차만별이라는 것이다. 지난번 연산중에 Memory를 다루지 않았는데 이번 포스트에서는 그 Memory를 Access하는 Instruction이 수행됬을 때의 Data flow를 정리해보고자 한다.우선 그때도 말했다시피 Memory Access에 사용되는 Instruction format은 Immediate-type format(I-type)이다.instruction내에는 register에 들어갈 값도 포함되지만 정수를 표현할 수 있는 immediate area도 존재한다. 이 값이 instruc..
Q. For the single cycle Implementation에서 add instruction 이 실행될 때 data의 흐름 / ALU operation / register, memory enable의 값을 표현하시요. 우선 Add instruction을 수행하는 과정의 첫번째는 instruction내에 어떤 값들이 포함되어 있는지를 확인해봐야 한다. instruction에 포함되어 있는 명령어는 크게 4가지로 나눌수 있는데 그중 add,sub 같은 arithmetic 관련 명령어이 포함되어 있는 instruction은 Register type Format (R-type format)의 형태를 지닌다. 첫번째 상위 6bit은 opcode라고 하고 사전에 정의된 command를 분별하는 역할을 한다..
이전 포스트 들 중에서 Pipeline에 대해서 다뤘던 적이 있다.Pipeline 자체가 그 Never Waste Time이라는 말처럼 각 stage가 노는 여유가 없이 계속 돌리게 함으로써, 전체적으로 instruction의 처리 시간을 줄이는 효과를 가져온다고 언급했었다. 하지만 분명 pipeline을 수행하다 보니 stage간의 순서를 반드시 지켜줘야 하는 경우가 있으며, 이를 지키지 않았을 경우에는 원하는 답을 얻지 못하는 경우가 발생하기도 한다. 그런데 발생할 수 있는 hazard 중에 control hazard 라는 것을 다뤘었고, 이 문제 자체는 branch와 jmp 같은 memory 주소를 뛰어 넘는 instruction 수행시 자주 발생한다. 분명 pipeline의 효과를 수행하기 위해서..
- Total
- Today
- Yesterday
- RL
- End-To-End
- windows 8
- 딥러닝
- 파이썬
- processing
- DepthStream
- PowerPoint
- ColorStream
- 강화학습
- bias
- TensorFlow Lite
- ai
- dynamic programming
- Offline RL
- reward
- Kinect for windows
- SketchFlow
- Policy Gradient
- Gan
- Kinect SDK
- Off-policy
- Variance
- Kinect
- Windows Phone 7
- arduino
- Distribution
- 한빛미디어
- Pipeline
- Expression Blend 4
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |