System Programming 14

[system programming] Debugging

본 게시글은서울대학교 데이터사이언스대학원 성효진 교수님의데이터사이언스 응용을 위한 컴퓨팅 시스템 강의를학습을 목적으로 재구성하였습니다이번 수업시간에서는 디버깅에 대해서 다룬다시스템 프로그래밍보다는 약간 소프트웨어 엔지니어링 적인 주제인데쉽다고 여길 수도 있기 때문에디버깅할 때 그냥 이렇게 하면 좋구나~하는 정보를 얻는 느낌으로약간 가볍게 들어도 좋다고 한다 디버깅에 대해 알아보자 우선 기본적인 디버깅의 정의에 대해 배우고만약 scientific한 debugging에 대해 배우고 싶다면마지막에 소개된 책을 읽으라고 하셨다이 scientific debugging이란 과학적으로무언가를 검증하는 가설을 세우고 가설을 검증하는과학적인 방식으로 디버깅을 하는 것인데좀 더 체계적인 디버깅 방법이라고 한다 tools..

[system programming] parallel programming

본 게시글은서울대학교 데이터사이언스대학원 성효진 교수님의데이터사이언스 응용을 위한 컴퓨팅 시스템 강의를학습을 목적으로 재구성하였습니다저번시간에 이어서 남은 병렬 프로그래밍 부분을마무리 해보려고 한다 병렬 실행은 잘못 수행하면 더 많은 오버헤드가 발생해서수행 시간이 더 오래 걸릴 수가 있다이러한 부분은 실제로 연구가 많이 진행되고 있는 부분이다 위 ppt에서 T0이 병렬 실행을 해서 생길 수밖에 없는 오버헤드 값인데load imbalance, communication, excess work가 원인이 된다 mapping은 static mapping과 dynamic mapping으로 구분 가능하다 task queue에 있는 데이터를 스케줄 하는 시점에어디에 mapping할지 이런 것들을 동적으로 결정할 수가 ..

[system programming] program optimization & parallel programming

본 게시글은서울대학교 데이터사이언스대학원 성효진 교수님의데이터사이언스 응용을 위한 컴퓨팅 시스템 강의를학습을 목적으로 재구성하였습니다 저번 시간에 이어서compile optimization에 대해서 계속 해보려고한다 타일링도 굉장히 중요한 최적화 기법 중에 하나이다기본적으로 배열을 순차적으로 처음부터 끝까지nesting을 하는 것이 일반적인데타일링은 처음부터 끝까지 도는게 아니고tile이라고 하는 작은 iteration으로 쪼갠다음에하나하나 차근차근 또 도는 방식이다loop을 나누는 개념이라고 생각하면 편하다 타일링의 에씨이다B는 block size인데 타일의 크기이다이러한 타일링을 하는 가장 큰 이유는 바로cache locality 때문이다 만약 내가 코드를 병렬로 실행한다고 하면내가 타일링을 했..

[system programming] program optimization (compiler와 최적화 기법)

본 게시글은서울대학교 데이터사이언스대학원 성효진 교수님의데이터사이언스 응용을 위한 컴퓨팅 시스템 강의를학습을 목적으로 재구성하였습니다이번 시간에 정리할 내용은프로그램 최적화에 관련된 내용이다 컴파일 언어에서는 컴파일러가 우리가 작성한 코드를자체적으로 최적화를 해주는 역할을 한다그렇다면 컴파일러는 어떤 방법으로 최적화를 진행할까?또한 컴파일러 이외에우리가 코드 레벨에서 코드를 작성할 때어떻게하면 최적화된 코드를 작성할 수 있을까?이 프로그램 최적화는 이와 관련된 내용이다 이런 컴파일러의 최적화 과정을 이해해야우리가 어떻게 프로그램을 짜야하는지 알 수 있다고 한다 이번 시간에 배울 목차이다 우리가 보통 알고리즘을 공부할 때는asymptotic complexity라고 해서흔히 빅오 표기법으로 시간 복잡도를 ..

[system programming] Parallel Architectures (ILP, DLP, TLP)

본 게시글은서울대학교 데이터사이언스대학원 성효진 교수님의데이터사이언스 응용을 위한 컴퓨팅 시스템 강의를학습을 목적으로 재구성하였습니다이번 시간에 배운 주된 내용은병렬 처리에 관한 내용이다 하지만 그 전에 원래 os에서exception을 어떻게 처리하는지가 나오는데사실 이전 시간에 다 배웠던 내용이라간단히만 설명하고 넘어가셨다exception handling에 대해서 잠깐만 살펴보자  우리 컴퓨터가 프로세스를 실행하는 도중에exception이 발생하면 이를 어떻게 처리할까? 실제로 각 exception ID가 있고이를 이용해서 kernel안에 있는 exception table에 들어간다그럼 예상하지 않았던 exception branch로 이동하게되고control flow hazard를 발생시킨다  에러 상..

[system programming] out of order execution & operating system(os)

본 게시글은서울대학교 데이터사이언스대학원 성효진 교수님의데이터사이언스 응용을 위한 컴퓨팅 시스템 강의를학습을 목적으로 재구성하였습니다 이번 시간에는 저번 시간에 이어out of order execution 부분을마무리 짓고 다음 파트인운영체제(os) 부분으로 넘어가보려고한다 하드웨어가 ooo exectution시에 코드의 순서를 정하는dynamic scheduling에 대해서 알아보자이건 전적으로 하드웨어가 담당하는 부분이다컴파일 타임이 아닌 실행 중에코드 실행 순서를 결정하기 때문에dynamic이라는 이름이 붙었다 우선 branch prediction과 speculation을 통해실행될 코드들을 예측하고이를 instruction window라고 하는 곳에 저장해둔다 그런 다음 false dependen..

[system programming] CPU 아키텍처 2편 (CPU architecture: pipelining hazards - stall, bypass, speculation)

본 게시글은서울대학교 데이터사이언스대학원 성효진 교수님의데이터사이언스 응용을 위한 시스템 컴퓨팅 강의를학습을 목적으로 재구성하였습니다지난 시간에는 CPU 아키텍처를 배우면서각 step별 pipelining을 배웠고이런 pipelining 과정에서 각 단계마다 이쁘게 딱딱 맞아떨어지면 좋지만실제로는 예외 상황들이 자주 발생해서각 pipeline step간에 병목이 발생한다이러한 병목을 hazard라고 하고이러한 hazard는 주로 data 혹은 control dependency에 의해 발생한다따라서 hazard를 해결하기 위해 크게 3가지 방법이 있다고 했는데1. stall2. bypass3. speculation이라고 했다 그 중 stall은 가장 단순한 방법으로dependency가 해결될 때 까지 기다..

[system programming] CPU 아키텍처 1편 (CPU architecture: pipelining, hazards)

본 게시글은서울대학교 데이터사이언스대학원 성효진 교수님의데이터사이언스 응용을 위한 컴퓨팅 시스템 강의를학습을 목적으로 재구성하였습니다우리가 이미 앞에서Program Representation을 배우면서다 들어봤을 내용이라고 하셨다 이전에는 프로그램의 표현을 배우기 위한 배경지식으로CPU 아키텍처에 대해서 배웠다면이번 시간에는 정말 본격적인 CPU 아키텍처에 관한 내용이라고생각하면 좋을 것 같다교수님 말씀도 너무 빠르고 진도도 너무 빨라서따라가는게 약간 벅차다 ㅠ 암튼 이번 수업 내용 정리 시작 ㅠ 컴퓨터란 무엇인가?단순히 우리가 사용하고있는 데스크탑이나 노트북 말고정말로 컴퓨터란 무엇인가? 흔히들 컴퓨터를 계산하는 기계라고 하지만그렇다면 계산기는 컴퓨터인가?보통 계산기를 컴퓨터라고 하지는 않는다 이..

[system programming] Linux 운영체제 Exception Control Flow

본 게시글은서울대학교 데이터사이언스대학원 정형수 교수님의 데이터사이언스 응용을 위한 시스템 프로그래밍 강의를학습을 목적으로 재구성하였습니다  이번 시간에 배울 내용은linux 운영체제 내에서의 exception control flow에 대한 내용이다 이번 수업의 내용은 굉장히 중요한 내용인데이 내용을 이해를 하지 못하면이 시스템 프로그래밍이라는 수업 자체를따라가기가 매우 힘들어 진다고 한다 그래서 교수님께서 이번 수업은 강의 녹화본을 올릴테니이해가 안가면 갈때까지 영상을 보며 이해하라고 하셨다.. 지금까지는 단순히 assembly code와user program 내에서 어떻게 메모리와 register가 이동하고어떤 과정을 거치는지를 알아봤다면오늘 배우는 내용은 지금까지 배우는 내용에서더 확장된 내용이다 ..

[system programming] Program의 표현과 실행 2편 (Basic of Assembly Code)

본 게시글은서울대학교 데이터사이언스대학원 정형수 교수님의 데이터사이언스 응용을 위한 시스템 프로그래밍 강의를학습을 목적으로 재구성하였습니다 저번 시간에는 data movement의assembly의 general form을 배웠었다잠깐만 되짚어보자면 S는 스케일이라 주소값에 곱하는 값이고D는 Displacement라 주소값에 더하는 값이다 지난시간에 배웠던 leaq 연산자leaq는 주소값에 접근하는 것이 아닌단순히 주소값끼리만 연산하는 연산자였다그래서 더하기, 곱셈과도 같은 일반 연산에도많이 사용된다 주소값 연산의 예시이다위에서 봤던 leaq의 규칙과 동일하다괄호 앞에 오는 값은 D라 더하기괄호 안에 오는 값은 S라 %rcx에 곱하기를 해준다 이제 다른 Arithmetic Operation을 알아보자..