전체 글

전체 글

    [Spring] DTO와 Entity 간의 변환

    Spring을 쓴다면 MVC 구조를 사용한다는 것을 전제로 깔고 갈 것이다. 따라서 Controller, Service, Repositoy, DB 순으로 flow가 이동하며, 이 과정에서 entity라는 객체와 DTO라는 객체를 사용한다. 정의를 먼저 살펴보자면, entity는 DB의 row 하나와 매핑되는 객체인 반면, DTO는 Data Transfer Object, 데이터를 옮기는 데 사용하는 객체이다. DTO의 필요성 DTO의 필요성에 대해서는 말할 필요도 없다. 만약 DTO가 없다고 가정해 보자. 그러면 entity를 사용자에게 노출시켜야 하는데, entity는 DB의 모든 column에 대한 정보를 가지고 있기 때문에 이를 사용자에게 노출시키는 것은 좋지 않다. 또한 entity에 내용이 부족해..

    [이종병렬컴퓨팅] Accelerators for Deep Learning

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 deep learning을 위한 가속의 motivation, domain-specific accelerator의 기본, efficiency metric 그리고 4가지 case study(Google TPU, GraphCore, DianNao series, Reconfigurable accerlerator)를 살펴본다. heterogeneity의 Motivation single core CPU의 경우 moore의 법칙/dennard의 scaling이 거의 끝이 났을 정도로 발전이 끝에 다다랐다. 때문에 performance와 watt를 향상시키기 위해 single core CPU를 넘어, mul..

    [이종병렬컴퓨팅] Heterogeneous Parallel Computer를 위한 기술 스택

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 이종 시스템을 위한 고수준 프로그래밍을 가능하게 하는 software stack에 대해 설명한다. compiler-based, library-based, framework-based로 나눠 설명하고, OpenCL에 대한 compile/runtime 지원을 살펴본다. Compiler란? compiler는 source code를 기계어로 번역하는 일을 한다. source code는 high level abstraction, low level detail을 숨긴다. 떄문에 알고리즘에 대한 이해가 쉽고, fine-grained performance tuning이 제한된다. 기계어는 코드를 짜고 유지보..

    [이종병렬컴퓨팅] OpenMP

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 OpenMP 프로그래밍 모델의 기본 개념과 pragma, 간단한 예제들을 살펴본다. OpenMP OpenMP API는 pragma(컴파일러 지시문), library routine, 환경변수 등을 제공한다. 이를 통해 multithread parallel fortran이나 C/C++ 프로그램을 쓸 수 있다. programmability와 portability를 위한 high-level parallel structure를 제공한다. 때문에 low-level thread를 조작하는 것보다 parallel program을 쓰고 유지하는 것이 더 쉽다. SMP 관행을 표준화하며, vectorizatio..

    [이종병렬컴퓨팅] Parallel Patterns : Sparse Computation

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 memory bandwidth를 절감가힉 위한 parallel sparse computation에서 input data를 압축하는 방법을 살펴본다. 이를 통해 memory의 utilization을 높일 수 있고, on-chip memory로 전송되는 data 크기를 줄일 수 있다. 또한 clamping으로 variation 제한, sorting, transposition 등으로 불규칙한 데이터를 규칙적으로 만드는 방법을 살핀다. Sparse Matrix 자연 상태의 많은 system들은 sparse하다. 보통 matrix의 80% 이상이 0이면 sparse matrix라고 한다. Sparse ..

    [이종병렬컴퓨팅] Parallel Patterns : Scan

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 parallel scan (prefix sum)과 koggle-stone algorithm(work-inefficient)와 brent-kung(work-efficient) algorithm을 살펴본다. Scan Inclusive Scan 어떤 binary associative operator ⊕와 array [x$_0$, x$_1$, ... , x$_{n-1}$]에 대해, [x$_0$, x$_0$ ⊕ x$_1$, ... , (x$_0$ ⊕ x$_1$ ⊕ ... ⊕ x$_{n-1}$]을 리턴하는 것이 inclusive scan이다. scan은 radix sort, quick sort, 등등 다..

    [이종병렬컴퓨팅] Parallel Patterns : Reduction

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 parallel reduction pattern을 살펴본다. parallel reduction pattern은 제일 많이 사용되는 패턴 중 하나이다. 추가로, control divergence와 thread utilization 등의 작업 효율성, shared memory bank conflict 등의 resource 효율성을 살펴본다. Reduction Reduction은 input value를 하나의 값으로 요약하는 연산이다. 예를 들어 max(), min(), sum() 등등이 있다. 기본적으로 associative(결합), commutative(교환)여야 하며, 잘 정의된 identit..

    [이종병렬컴퓨팅] Parallel Patterns : Histogram

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 다음과 같은 내용들을 살펴본다. parallel한 histogram 계산 패턴 privatization Histogram histogram은 큰 data set에서 특징과 패턴을 추출하는 방법으로, 기본적으로는 dataset의 각 bin 요소에 대해 count를 증가하는 방법이다. 제일 기본적인 병렬 알고리즘은 아래와 같다. input을 section으로 나누기 각 thread는 하나의 section을 담당한다. 각 thread는 section에서 순회한다. 각 letter에 대해 bin counter를 증가시킨다. 효율적인 memory 접근을 위한 partitioning 방법 section을..

    [RAFT] RAFT consensus algorithm specification

    중간고사가 끝난 이후부터는 RAFT 알고리즘을 maude를 사용해 formal modeling을 진행할 것입니다. 그에 앞서 어떠한 specification을 모델링할지 결정해야 합니다. 따라서, 이 글에서는 RAFT consensus algorithm에 대해 간단히 소개하고 modeling하고자 하는 specification을 작성하고자 합니다. RAFT consensus algorithm RAFT consensus algorithm은 모든 node가 동일한 상태를 유지하며, tolerance를 보장하기 위해 고안된 알고리즘이다. 때문에 일부 node에 문제가 생겨도 전체 system이 잘 동작해야만 한다. 구성 모든 node는 아래 3가지 상태 중 한 가지를 가진다. cluster란 여러 subsys..

    Spring 면접대비 질문

    Spring 더보기 정의 뭐 지원하는지 더보기 DI AOP bean Bean 더보기 정의 더보기 spring에서 plain old java object - 그냥 객체 - 를 bean이라고 한다. IoC Container가 관리 및 생성한다. @Component를 사용한 class들만 bean으로 정의된다. 이 bean들은 기본적으로 singleton이다. IoC Container가 DI해주기도 한다. IoC 더보기 정의 더보기 제어 역전 - 프로그램 제어권이 programmer가 아니라 framework인 spring에 있는 것. 개발자는 framework의 형식에 맞춰 개발하게 된다. AOP 더보기 정의 더보기 aspect oriented programming 공통 관심사를 분리해 모듈화하는 것. 인증..

    Node.js 면접대비 질문

    Hoisting 더보기 변수가 제일 위로 끌어올려지는 것. 올려지는 것은 선언만 올려진다. Closure 더보기 주변 state와 함께 묶인 함수의 조합. 반환된 내부함수가 자신이 선언되었을 scope를 기억해, 외부 scope에서 호출되어도 내부 scope에 접근할 수 있는 함수. - 자신이 생성될 때의 scope를 기억하고 활용하는 함수. Promise 더보기 javascript는 비동기하기 때문에 callback을 해결하기 위해 promise를 사용한다. Async / Await 더보기 await는 promise에서 then을 쓰는 것과 동일하다. 즉.. promise의 값이 나올 때까지 await한다는 것. let a = await func();을 통해 async func()의 promise 결과..

    [이종병렬컴퓨팅] Parallel Patterns : Convolution

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 다음과 같은 내용을 다룬다. convolution과 tiled convolution : 1D/2D convolution과 tiled convolution (input tiling, output tiling) 2D convolution kernel을 작성하는 방법 : boundary condition 처리 tiled parallel convolution 알고리즘의 cost와 장점 Convolution 인접한 input data element의 weighted sum 연산. 이 때 weighted sum 연산에 사용하는 weight를 input mask array 또는 convolution ker..

    [이종병렬컴퓨팅] Performance Considerations

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 GPU resource의 제약과, 이들이 성능에 미치는 영향을 알아본다. 최적화 목표 memory coalescing shared memory bank 충돌 점유율 thread granularity 최적화 목표 Performance 고려 사항 parallel한 코드와 hardware resource의 제약, 이 두가지를 관리하는 것이 고성능의 핵심이다. 그러나 먼저, 어디서 제일 많은 시간이 걸리는지 측정해야 한다. Amdahl의 법칙을 생각해야 한다. coarse grained한 부분부터 측정하고, 이후에 fine grained한 부분을 측정하면 된다. 다음으로 main resource의 병..

    [이종병렬컴퓨팅] Thread Execution Efficiency

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 다음과 같은 내용들을 살핀다. SIMD hardware에서 GPU thread가 실행되는 방식 : warp partitioning, control divergence control divergence가 성능에 미치는 영향을 분석하는 방법 : boundary condition checking GPU thread execution을 겹치는 방법 : CUDA stream GPU의 synchronization primitive 동작 : warp synchronization, atomics SIMD hardware에서 GPU thread가 실행되는 방식 Scheduling Thread Blocks ha..

    [이종병렬컴퓨팅] Memory와 Data Locality - Tiled Multiplication & Unified Memory

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 다음과 같은 내용들을 살핀다. CUDA memory를 효율적으로 사용하는 방법 memory access 효율이 performance에 미치는 영향 다양한 memory의 수명 tiled parallel algorithm matrix multiplication - tiled multiplication kernel unified memory Introduction Matrix Multiplication __global__ void MatrixMulKernel(float* M, float* N, float* P, int Width) { // Calculate the row index of the P ..

    [이종병렬컴퓨팅] CUDA Basics

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 CUDA programming language를 사용하는 방법을 알아본다. CUDA CUDA는 NVIDIA GPU 전용 software이다. 기본적으로는 C/C++이며 여기에 몇몇 library를 추가해서 쓸 수 있다. CUDA kernel을 사용하고 실행하는 방법 GPU memory를 관리하는 방법 communication과 synchronization을 관리하는 방법 Host와 Device host memory : CPU의 memory device memory : GPU의 memory heterogeneous computing은 serialize한 부분과 parallel한 부분이 나뉜다. ..

    [이종병렬컴퓨팅] GPU architectures - NVIDIA

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 다음과 같은 내용들을 살핀다. GPU architecture의 예시 - NVIDIA NVIDIA GPU Architecture 용어 정리 NVIDIA AMD 뜻 kernel kernel GPU의 multiple thread에 의해 동작하는 함수. CPU와 parallel하게 동작할 수 있다. thread block work group 다른 data에 대해 같은 kernel을 실행하는 thread의 그룹. 단일 SM/CU에서 warp의 그룹으로 실행된다. 내부의 thread끼리는 communicate할 수 있는데 이는 hardward에 의해 지원된다. thread work item / threa..

    [이종병렬컴퓨팅] GPU architectures - SIMT와 SIMD

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 다음과 같은 내용들을 살핀다. GPU의 실행 모델인 SIMT와 SIMD Heterogeneous Computing 순서가 있는 instruction은 CPU에, parallel하게 돌릴 수 있는 instruction은 GPU에 할당해서 돌리는 것이 heterogeneous computing이다. GPU Architecture의 개요 CPU vs GPU CPU는 하나의 thread에서 발생하는 latency를 최소화하는 데 목적이 있으며, 때문에 cache가 매우 크다. 따라서 일반적으로 core의 개수가 적으며, 여러 종류의 instruction을 수행할 수 있는 general한 목적이다. G..

    [이종병렬컴퓨팅] Parallel Computing Basics

    이 글은 포스텍 성효진 교수님의 이종병렬컴퓨팅(CSED490C) 강의를 기반으로 재구성한 것입니다. 이 글에서는 다음과 같은 내용을 살핀다. parallel computing의 기본적인 개념 parallelism의 종류 parallel architecture 분류 parallel program을 어떻게 작성하고 어떤 기준으로 평가하는지 Parallelism의 종류 크게 3가지의 parallelism이 있다. ILP, Instruction Level Parallelism instruction들끼리 independent하다. hardware는 instruction window size 내내에서 implicit하게 찾을 수 있다. complier들은 window 내에 있는 명령어들이 independent할 수..

    [Maude] Token Ring 검증

    이 글에서는 Designing Reliables Distributes Systems, 225p에 있는 Token Ring을 maude를 사용해 formal modeling하고 원하는 검증을 진행합니다. 원 프로젝트는 RAFT consensus algorithm을 모델링하는 것이지만, 그 전에 손풀기 느낌으로 좀 더 쉬운 token ring을 모델링합니다. Token Ring In the “token ring” mutual exclusion algorithm, the nodes logically form a “ring” structure, as shown in Figure 13.1 where a node only knows the next node in this ring. The algorithm work..