전체 글

개발은 좋은데 뭘로 개발할까
CS/HCI 윈도우즈프로그래밍

[OpenGL] 13. Transformation (1) - 변환의 기본 개념

Trnasformation 객체의 위치를 옮기거나 모습을 변형하는 것 (이동, 회전, 크기 변경) 변환을 할 때는 행렬을 사용하는 것이 효율적이다. OpenGL 에서 사용할 때는 Shader 의 input vertex 를 변환하는 것으로 적용한다. 다음이 OpenGL 에서 사용하는 변환의 큰 과정이다. 대문자 V 는 vertex 정점을 의미하고, M 은 matrix 행렬을 의미한다. V clip 이라는 정점을 얻기 위해 V local 이라는 정점에 model 행렬, view 행렬, projection 행렬 순으로 변환을 적용한다는 의미이다. 이를 OpenGL 방식 코드로 보면 이렇게 된다. 입력 정점으로 V local 이 들어오면, 여기에 model 행렬을 곱해 변환하고, view 행렬을 곱해 변환하고,..

CS/컴퓨터 구조

[컴퓨터 구조] 8. Computer Performance

컴퓨터 성능의 측정 지표 1. Response Time ( Execution time, Latency) 특정한 작업을 시작해서 끝낼 때까지 걸린 시간을 측정한다. 개개인의 유저가 중요하게 생각하는 지표이며, 임베디드 컴퓨터와 개인용 컴퓨터는 response time 을 중요하게 생각한다. 2. Throughput 정해진 시간동안 처리하는 일의 양을 측정한다. 데이터센터나 슈퍼컴퓨터 관리자들이 중요하게 생각하며, '서버' 는 스루풋을 중요하게 여긴다. 컴퓨터 머신의 종류와 사용처에 따라 중요하게 생각하는 지표가 다르다. (쓰루풋을 단순히 response time 의 역수로 생각할 수는 없다.) Example 한번 다음과 같은 과정을 거쳐 빨래를 한다고 해보자. 세탁기는 30분, 건조기는 40분, 빨래를 개..

CS/컴퓨터 구조

[컴퓨터 구조] 7. MIPS 명령어 총 정리

산술 명령어 (Arithemtic Instructions) R - Format add, sub add rd, rs, rt => rd = rs + rt sub rd, rs, rt => rd = rs - rt mult $r, $s => r * s, 곱셈의 경우, 연산 결과는 따로 어딘가에 저장됨 mfhi $d => set hi to $d 연산 결과의 상위 32bit를 $d 레지스터에 이동 mflo $d => set lo to $d 연산 결과의 하위 32bit를 $d 레지스터에 이동 div I - Format addi / addiu addi rt, rs, imm => rt = rs + imm (rd 가 없으니 rt 를 대신 목적지로 사용한다. addiu 는imm 값을 zero extend 한다.) 논리 명령어..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 11. Application Layer (4) : HTTP/2

HTTP/2 지난 글에서 HTTP/1 과 HTTP/1.1 에 대해서 정리했었다. 간단히 말해서 HTTP/1 은 base HTML 에 대해서도 TCP Connection을 만들고, 이 HTML 을 구성하는데 필요한 referenced object 들에 대해서도 매번 TCP connection 을 만들어서 데이터를 가져오는 방식이었다. 각 오브젝트 하나를 가져오는데 2RTT 의 시간이 필요했다. HTTP/1.1 은 이를 약간 개선해서, 한번 TCP Connection 을 만들면 이 연결로 base HTML 과 referenced object 까지 한번에 가져와서 오브젝트를 가져오는 시간을 거의 반으로 줄이는 개선된 프로토콜이었다. HTTP/2 는 여기에서 한 단계 더 발전한 프로토콜이다. HTTP/2 의 목..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 10. Application Layer (3) : Web Cache

Web Cache (web proxy / proxy server) 웹 브라우저의 역할은 웹 서버로부터 웹 오브젝을 가져오는 것이다. 그런데 만약 서버가 클라이언트로부터 멀리 떨어져 있거나, 대역폭이 넓지 않아서 오브젝을 가져오는데 시간이 오래 걸린다면, 서버까지 가지 않고도 데이터를 얻어올 수 있는 웹 캐시 기법을 사용할 수 있다. 웹 캐시 기법은 클라이언트가 자주 요청할 법한 오브젝을 클라이언트 가까이에 두는 기법이다. 그래서 만약 사용자가 로컬 웹 캐시에 먼저 접근하도록 설정하면, 오브젝을 가져올 때 서버에 바로 요청을 보내는 것이 아니라, 웹 캐시에 데이터를 요청해서 받아온다. 만약 웹 캐시에 오브젝이 없다면 그때 서버에 오브젝을 요청해서 오브젝을 가져온 뒤, 캐시가 그 오브젝의 카피를 따로 저장해..

CS/프로그래밍언어론

[프로그래밍언어론] 4. Semantics

Static Semantics & Attribute Grammar프로그래밍 언어의 큰 2가지 축은 Syntax 와 Semantics다.syntax(문법)은 지금 들어온 코드의 문법이 맞다 틀리다만 판단할 수 있다.하지만 이 문법만 가지고는 문장의 의미를 알 수 없다. 코드를 예로 든다면, 먼저 변수를 선언하고나서 값을 할당해야하는데, 선언하지도 않은 변수에 값을 할당하는 것은 문법적으로는 옳을 수 있어도 문맥상, 의미상으로는 올바르지 않은 코드이다. Static Semantics 는 컴파일하는 순간에 알 수 있으며, 프로그램  실행 중 변하지 않는 시멘틱스 정보다.Attribute Grammars (AG) 는 static semantics 정보를 최대한 알아내고자 등장했다. AG는 CF..

Window/MFC

[MFC] Windows Programming 개념

윈도우 OS 에서 돌아가는 모든 어플리케이션은 '이벤트' 와 '메시지' 에 기반해서 실행된다. 예를 들어 왼쪽 마우스 버튼을 클릭하면, 윈도우는 왼쪽 마우스 버튼이 클릭되었다는 메세지를 어플리케이션에 보낸다. 그러면 어플리케이션은 이 메세지를 정해진 루틴대로 처리하는 방식이다. 그래서 윈도우 프로그래밍은 메세지를 만들고 핸들링하는 루틴 로직을 짜는 것이라고 말할 수 있다. 그래서 하드웨어를 조작하거나, 임의로 메세지를 만들면 만들어진 메세지는 message queue에 들어간다. 메세지 큐에 들어온 메세지는 어플리케이션에 있는 메세지 루프를 통해 하나씩 꺼내 일치하는 window procedure가 호출되고, 우리가 작성한 window procedure 로직에 의해 메시지를 처리해서 어플리케이션 화면에 ..

CS/컴퓨터 구조

[컴퓨터 구조] 6. MIPS Branch Instructions

Load Constant MIPS에서 메모리에 있는 상수를 레지스터로 읽어올 때 2가지 방법이 있다. 첫번째는 메모리에 32bit 상수를 저장한 뒤, lw 명령어로 읽어오는 방법이다. 두번째는 lui, ori 2개의 instruction을 사용하여 읽어오는 방식이다. lui 명령어는 load upper immediate 의 줄임말로, immediate 필드에 있는 16bit 상수를 레지스터의 상위 16bit에 저장하는 명령어이다. 그리고 나머지 하위 16bit 의 상수는 ori 명령어로 bit combine 하여 가져온다. 위 이미지와 같이 1234 를 상위 16bit에 쓰고, 5678을 하위 16bit에 쓰도록 해서 원하는 32bit 크기의 상수를 레지스터에 저장할 수 있다. Pseudo Instruc..

CS/컴퓨터 구조

[컴퓨터 구조] 5. MIPS Data Transfer Instructions (2)

Zero Register 0번 레지스터는 항상 값을 0으로 유지하는 레지스터이다. 이 레지스터에 값을 쓰려고 할 수 있지만, 그 결과는 언제나 0이다. 이 레지스터는 다른 레지스터에 값을 옮기는 move 명령어를 구현할 때 0과 or 연산을 취해서 다른 레지스터에 값을 쓰는 식으로 move 명령어를 구현하는 용도로 사용된다. 또는 상수값을 레지스터에 쓰고자 할 때, 0과 더하기를 해서 원하는 상수값을 레지스터에 쓰는 용도로 쓸 수도 있다. 메모리에 접근하는 상황 우리의 컴퓨터는 stored program 방식을 사용하고 있다. 즉, 프로그램의 명령어와 데이터가 오프칩 메모리에 저장되어 있고, CPU는 명령어와 데이터를 메모리로부터 읽어와 연산하는 방식이다. CPU가 메모리에 접근하는 상황은 크게 2가지이..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 12. Shader (8) - 여러 Texture 생성하기

Sampler GLSL 에서 텍스쳐 객체를 저장하기 위한 내장 데이터 타입 (일종의 컨테이너) 이다. 텍스쳐 타입에 따라 sampler1D, sampler2D, sampler3D 등으로 분류되며, uniform 변수로 선언한다. 기본적으로 디폴트값이 정해져 있어서, 텍스쳐를 하나만 바인딩하는 경우에는 직접 유니폼 변수에 값을 등록하지 않아도 바로 사용할 수 있다. 텍스쳐를 유니폼 변수에 직접 등록하기 텍스쳐를 유니폼 변수에서 사용할 때는 텍스쳐의 위치에 해당하는 정수값을 넘겨주게 된다. 이러한 텍스쳐의 위치를 texture unit 이라고 한다. 이 텍스쳐 유닛의 기본값은 0이다. (그래서 하나를 바인딩할 때는 바로 가져다 사용할 수 있는 것) 텍스쳐 유닛을 사용하는 이유는 사용자가 셰이더로 하여금 1개..

에버듀
Blog. 에버듀