본문 바로가기

분류 전체보기68

[Parallel Computing] (9) Parallelism Parallelism을 수행할 수는 종류는 크게 Intruction 기반인 ILP(Instruction Level Parallelism), 실행하는 Task 기반인 Task Parallelism, 데이터를 기반으로 수행하는 Data Parallelism으로 나눌 수 있다. Task Parallelism 부터 살펴보면 Task Parallelism은 하나의 큰 테스크를 작은 테스크로 나눈 다면, 각 테스크를 병렬적으로 수행하여, 성능을 향상 시키는 방법이다. 그런데, 하나의 테스크를 동시에 수행할 수 있는 작은 테스크들로 나누는 것이 쉽지 않다. 그 이유는 각 동작들이 Dependences를 가지고 있기 때문이다. 예를 들어 'A' Task는 'B' Task가 완료되어야만 수행할 수 있는 경우, 'A'와 .. 2024. 4. 20.
[Parallel Computing] (8) Loop Carried Dependence 앞 글에서 Dependences의 종류에 대해서 살펴보았다. 이때, 실제 True dependence(WAR)를 제외하고 Anti dependence(RAW), Output dependence(WAW)은 False dependence로 실제 연산의 실행 순서와 관련되어 있는 것이 아니라 메모리 위치의 재사용에 의해 발생한다. 이는 Register Renaming으로 제거 가능한다. Loop-Independent/Carried dependence는 Loop-Independent는 loop와 관계없이 발생하는 dependence이며, Loop-Carried는 loop의 iteration에 따라 진행되는 흐름에서 발생하는 dependence이다. 아래 그림 처럼 몇 개의 Loop를 나열해 보면 더 쉽게 알 수.. 2024. 4. 19.
[Parallel Computing] (7) Dependences and Pipelining VLSI 기술 발전으로 이전 보다 하나의 칩안에 넣을 수 있는 로직들이 더 많아졌다. 이 점을 활용하여 싱글 코어의 성능을 높이기 위하여 주요한 두 가지 기술을 도입하였다. 하나는 Instruction pipeline 이며, 또 다른 하나는 On-chip cache이다. Instruction Pipeline은 여러 Instruction을 동시에 수행하는 방법이다. 이를 통해서 instruction 처리량을 향상 시킬 수 있다. 아래 그림과 같이 예를 들어 옷을 세탁하는 과정을 3가지로 이뤄지고, 세탁해야할 옷 더미 A, B, C, D 4개가 존재한다. 왼쪽은 옷더미 A,B,C,D를 순차적으로 처리하는 방법이고, 오른쪽은 세탁하는 과정에서 필요한 자원(세탁기, 건조기, 옷 개기)이 있으면 이전 옷 더미의 .. 2024. 4. 19.
[Parallel Computing] (6) Processes and Threads 프로그램 언어는 컴퓨터 프로그램을 작성하는 형식 언어(Formal Language)로 추상화 정도에 따라 High/Low-Level로 나뉠 수 있다. 일반적으로 High-Level Programming language는 Python, Java, C, C++ 같은 언어가 있으며, Low-Level Programming Language는 Assembly language가 있다. Assembly language는 Machine Instruction을 심볼로 표현한다. (모든 Machine Instruction에 대응되는 심볼이 존재하지 않을 수도 있다.) Assembly language는 Assembler를 통해서 컴퓨터 Machine code instructions으로 변환될 수 있다. 컴파일러(Compil.. 2024. 4. 17.