본문 바로가기

전체 글

(231)
[CP] Stack Management 2023학년도 2학기 충남대학교 이민선 교수님의 컴파일러개론 수업 정리자료입니다. 프로그램의 여러가지 메모리 중 Stack에 대해 살펴보자. 📁 Memory Organization (Stack) Stack과 Heap은 런타임에 크기가 변한다. Stack은 아래쪽으로 증가하고, Heap은 위로 증가한다. 이때 Stack과 heap 위치가 바뀔 수 있다. Code, Static Data : 컴파일러에 의해 크기가 결정된다. 📁 Run-Time Stack Run-Time Stack이란 Call-Stack이라고도 불리며 함수 하나를 호출할때마다 생성되는 Frame 혹은 Activation record이 구성하는 Stack을 말한다. 이때 스택에 쌓이는 한칸을 Activation record라고 부른다. Acti..
[CP] Storage Management 우리가 사용하는 storage는 크게 두가지가 있다. 1. Register 2. Memory register는 접근이 빠르고 프로그래머에는 보이지 않는다. 간접접근이 불가능하다. 그 말은 즉 주소를 딸 수 없다. 메모리는 상대적으로 느리지만 간접접근이 가능하다. 이런 특성을 고려하여 HIR에서 LIR로 변환하는 과정에 변수를 레지스터로 할 것인지 메모리로 할 것인지를 많이 결정한다. 결정하는 방법은 두가지가 있다. 1. Standard approach 글로벌 변수나 static은 메모리에 둔다. 로컬 변수 중 struct나 array 등 주소를 사용하여 메모리 연산이 가능한 경우 메모리에 둔다. int x처럼 scalar들 중 '&' 오퍼레이터로 접근하는 경우는 메모리, 다른 경우는 virtual reg..
[CP] 3-addr Code Translation 규칙 * 여러가지 중간코드 중 3-addr Code로 바꾸는 걸 보자. HIR code가 C코드 혹은 상위언어코드 혹은 AST 등으로 생각할 수 있고, 이걸 LIR 즉 3-addr 코드같은걸로 바꿀땐 nested 구조때문에 필연적으로 한 줄의 HIR 코드가 여러줄의 LIR 코드로 바뀐다. 이렇게 여러줄로 바뀔때 중간중간 임시변수를 정의하고 가져다 쓰는 형태로 바뀐다. 이때 여러줄로 바뀔 때 규칙이 있음.컴파일러가 하는 일. 그 방법에 대해 알아보자. 빨간글씨가 notation. 연산. 속에 들어가는 e는 하이레벨코드가 하나이상 섞여있는 코드.이게 [[ ]]를 만나면 LIR expression이 나온다. t = [[e]]에서 e가 어떤 표현식. 마지막 결과값을 t에 저장하자. t가 임시변수. t = [[v]]에..
[CP] Stack Machine Code, Tree Code 2023학년도 2학기 충남대학교 조은선 교수님의 컴파일러개론 수업 정리자료입니다. 📁 가상 기계 코드 (Bytecode, MSIL) * 컴파일러는 전반부와 후반부로 나뉨. 전반부가 끝나면 중간코드가 나오고, 중간코드가 후반부를 거쳐서 타겟 머신 코드로 바뀐다. 전반부는 주로 하이레벨 언어에만 관련이 있고, 후반부는 주로 머신코드와 관계가 되어있다. 그래서 IR을 잘 정의해야함. 이렇게 잘 나눠놓고 후반부를 interpreter로 만드는 경우가 있다. 이렇게 interpreter로 만들면 그거 자체가 가짜 기계가 되고, 중간코드는 인터프리터 위에서 실행되는 구조. 이런 구조에서 사용되는 머신이 스택머신인 경우가 많고, IR이 스택머신 위에서 돌아가는 스택머신인 경우가 많음. 왜 후반부를 거쳐서 머신코드까지..
[CP] 3-Addr Code 2023학년도 2학기 충남대학교 조은선 교수님의 컴파일러개론 수업 정리자료입니다. 📁 N-tuple, 3-주소 코드(Quadruple) N-tuple은 보통 quadruple(4-tuple)을 많이 사용하는데, quadruple은 피연산자 두개와 결과값을 위해 memory address가 3개 필요하다. 때문에 이를 3-address code(3-주소 코드)라고도 부른다. 3-addr코드는 OP에 단 하나의 연산자가 와야한다는 점과, 기계어가 가지는 피연산자 및 주소의 개수가 3개 미만이라는 점에서 C코드와 비슷하다. 때문에 -e나 b+c와 같은 코드도 3-addr code로 표현이 가능하다. 하지만 C언어와 같은 하이레벨 코드는 a = (b+c) * (-e)처럼 한번에 연산자가 많이 나올 수 있어서, ..
[ML] Ensemble Method 2023학년도 2학기 충남대학교 양희철 교수님의 기계학습 수업 정리자료입니다. 📁 Multiple Models 하나의 문제를 해결하기 위해서 꼭 하나의 모델을 사용하는 것이 아니라, 여러가지 모델을 함께 사용할 수 있다. 이렇게 모델을 여러개 만드는 방법은 두 가지가 있다. 1. training data 랜덤 추출 데이터셋에서 training data를 랜덤으로 추출하여 개별의 모델을 학습시키는 방식이다. 어떤 데이터가 training data로 선택되느냐에 따라 다른 모델이 생성되므로 이런 면에서 deterministic하지 않고 stochastic한 알고리즘의 형태를 띈다. 2. feature 랜덤 추출 data 내부의 feature들을 랜덤으로 추출해서 모델을 생성하는 방식도 있다. 예를 들어 데이..
[CN] Client-side 동적 웹페이지 배포해보기 // http_server/dir/statics/myscript.js const myInterval = setInterval(myTimer, 1000); function myTimer() { const date = new Date(); document.getElementById('timer').innerHTML = '현재 시간: ' + date.toLocaleTimeString() + ' Stop time '; } function myTimerStop() { clearInterval(myInterval); } index.html 총 방문자: {{ COUNTER }} # http_server/http_server.py import os import http import http.server import s..
[ML] wji의 편미분. 업데이트 해야하는 웨이트들이 보통 파라미터의 수로 얘기함. 모든 파라미터에 대해 저런 연산을 다 거치는거임. 그래서 연산량이 엄청 많겠지만 모델의 표현력이 올라가고 overfitting문제가 생김. 모델의 구조 자체에서 overfitting을 막을 수 있는 등의 기법이 많이 나오고 있음. 러닝레이트에 따라 수렴하는 속도나 수렴 뭐쩌고가 정해질수 잇음. 적절한 러닝레이트는 웨이트의 초기값에서 적절히 도달하지만 너무크면 계속 발산하는 형태. 너무 작으면 학습속도가 엄청 더딤. 그래서 학습 속도에 따라 러닝레이트를 키우거나 줄여도 됨. 이런 로스펑션이 있는데, 초기값 위치에 따라 local optimal이 무엇이냐에 따라 global을 못찾을수도. 근데 이건 그래디언트 디센트의 한계. 근데 ..