본문 바로가기

분류 전체보기215

파이프라이닝 pipelining(2) - hazard Pipelining and ISA DesignRISC-V는 파이프라이닝에 유리한 ISA인데, 모든 명령어들이 32bit 길이이므로 한 사이클 내에 fetch 및 decode하기가 용이하다. 파이프라이닝(1)의 빨래 예시에서 확인할 수 있듯, 파이프라이닝 기법을 사용하면 명령어 처리 시간을 줄이지 않고 같은 시간 안에 더 많은 데이터를 처리할 수 있다. 하지만 빨래 예시와는 다르게 매 clock cycle마다 명령어를 처리할 수 없는 경우가 존재한다. 양말 한 켤레를 실수로 빨래 더미 A와 B에 나누어 넣었을 때, A에서 짝을 맞춰 양말을 개고 넣기 위해서는 아래 그림과 같이 B 더미의 건조 과정이 끝날 때까지 한 사이클만큼의 공백이 생긴다.이때 명령어를 처리하지 않고 대기하도록 하는 것을 bubble이라.. 2024. 11. 20.
스레드 만들기 자바 스레드를 만들기 위해서 개발자가 해야 하는 작업은 아래와 같다.스레드 코드 작성JVM에세 스레드를 생성하고 스레드 코드를 실행할 것을 요청스레드 코드를 작성하기 위해서 Thread 클래스를 이용하거나 Runnable 인터페이스를 사용할 수 있다.Thread 클래스를 상속받아 스레드 만들기 ※ Thread 생성자  ※ Thread 주요 메소드void run()스레드 코드, 반드시 Overriding하여 스레드 코드 작성void start()JVM에게 스레드 실행 시작 요청void interrupt()스레드 강제 종료static void yield()다른 스레드에게 실행을 양보, 이때 JVM은 다른 스레드를 선택하여 스케줄링void join()스레드 종료까지 대기long getId()스레드의 ID 값 .. 2024. 11. 19.
자바의 멀티스레딩 멀티스레드와 JVM- 자바에는 프로세스가 존재하지 않고 스레드 개념만 존재- JVM은 멀티스레딩만 지원- 자바 스레드(java thread): JVM에 의해 스케줄되는 실행 단위 코드 블록자바 응용프로그램의 실행 과정1. 사용자가 자바 응용프로그램을 실행2. JVM이 먼저 실행3. JVM이 자바 응용프로그램을 로딩하여 실행4. 자바 응용프로그램 종료5. JVM도 함께 종료- 하나의 JVM은 하나의 자바 응용프로그램만 실행(* 이때 응용프로그램이란 main() 함수를 의미한다)- 한 컴퓨터에서 n개의 자바 응용프로그램이 실행될 때 n개의 JVM이 실행, 각각의 자바 응용프로그램은 별개의 메모리 영역에서 독립적으로 실행- 2개 이상의 자바 응용프로그램을 실행하려면 위와 같이 실행되어야 함- n개의 자바 응용.. 2024. 11. 19.
멀티태스킹 멀티태스킹 프로그램- 큰 규모의 응용 프로그램은 여러 작업(task)을 동시에 실행하는 경우 多- 응용프로그램의 여러 task가 동시에 진행되도록 하는 멀티태스킹 기법 사용스레드(thread): OS 혹은 JVM(Java Virtual Machine)에서 task 실행의 단위- thread of control- 프로그램 코드를 실행하는 하나의 실 혹은 제어의 개념- task마다 하나의 스레드가 생성되며, 하나의 스레드로 하나의 task만 처리 可- 스레드들은 상호 독립적- OS나 JVM에 의해 관리됨멀티태스킹과 멀티스레딩 멀티프로세싱(multi-processing)- 하나의 응용 프로그램을 여러 개의 프로세스(process)로 구성, 각 프로세스가 하나의 task를 처리하도록 하는 기법- 각 프로세스는 .. 2024. 11. 19.
백준 2343: 기타 레슨(python) 문제풀이 이진 탐색을 사용해 풀이하는 문제다. 파이썬의 bisect 라이브러리를 사용해 별도의 구현 없이 풀이할 수 있다. 이때 주의해야 하는 것은 블루레이 녹화 시 강의의 순서가 바뀌어서는 안 된다는 점인데, 초기 입력값을 정렬할 수 없으므로 이진 탐색을 수행하기 위해서는 배열이 먼저 정렬되어야 한다는 조건을 만족할 수 없다. 이진 탐색 문제로 분류되는 것을 보면 어떤 식으로든 정렬된 배열을 다루어야 할 것이므로, 관점을 바꾸어 입력된 배열이 아닌 입력값의 부분합 배열 sum[]을 이진 탐색에 사용할 수 있다. sum[i] = arr[0:i]인 sum은 항상 오름차순 정렬된 배열이므로 이진 탐색이 가능하다.문제를 풀이할 때 부분합 배열 sum[]을 직접 생성해 사용하지는 않지만, 전반적인 아이디어는 이.. 2024. 11. 18.
이진 탐색 이진 탐색(binary search): 정렬된 배열에서 탐색 범위를 절반으로 줄여 가며 목표 값을 탐색 정렬된 배열 arr에 대하여 탐색할 범위의 양 끝 인덱스를 각각 low와 high라 하고, 이 둘의 중앙값인 \(mid=(low+high)/2\)를 설정하여 찾고자 하는 값 value와 mid를 비교한다. value=mid이면 목표 값을 발견했으므로 탐색을 종료하고, valuemid라면 low를 mid로 갱신해 mid의 오른쪽 sub-array에 대해 탐색을 진행한다. 이진 탐색 알고리즘N개의 입력에 대하여 탐색 범위가 N → N/2 → N/4 → N/8 ... 1으로 줄어드므로 \(O(logN)\)의 시간복잡도를 가진다. 이진 탐색 구현 - 순환int binary_search_recur(int key.. 2024. 11. 18.