SMALL

분류 전체보기 99

유니티 드로우콜

Draw Call - CPU가 GPU에게 연산 명령을 던져주는 것을 의미 - CPU와 GPU 는 병렬 관계로 처리하며, CPU가 GPU에게 명령을 던져줌으로 GPU가 랜더링과 같은 처리를 시작함 - CPU는 명령은 던져주고 나서 다시 자기 일을 처리하기 시작 - 만약 또 다시 CPU가 GPU에게 명령을 던져주려 할 때 GPU가 이전 처리가 완료되지 않았다면, CPU는 처리를 기다리게 됨 - CPU와 GPU는 서로 다른 프로세스 유닛이기에 통신 비용이 발생 - 랜더링하기 전에 CPU에서 수많은 정보를 설정해줘야 함 ex) Vertex Buffer, Alpha Blending, Use Z-Buffer, Trasnform, Texture, Shader, Change States, Draw 등 Command B..

선택 알고리즘

선택 알고리즘이란? - n개의 원소가 불규칙하게 저장된 배열에서 i 번째 작은 원소(또는 큰원소)를 찾는 문제를 해결하기 위한 알고리즘 - 정렬과 비슷하다고 할 수 있음 - 두 가지 알고리즘 ㄴ 평균적으로 선형시간이 소요되는 알고리즘 ㄴ 최악의 경우에 선형시간이 소요되는 알고리즘 평균 선형시간 선택 알고리즘 - 퀵 정렬처럼 분할한 후 자기호출 방법을 이용하여 평균적으로 선형시간에 i번째 작은 원소를 찾는 것 - 배열 A에서 i 번째 원소 찾기 1) 원소가 하나뿐인 경우, 그 하나를 리턴 2) 원소가 다수인 경우, 먼저 파티션을 통해 중간값이 몇 번째인지 확인 3) 중간값이 i와 같을 경우, A[파티션을 통해 얻은 중간] 값을 리턴 4) 중간값이 i 보다 클 경우, 오른쪽 그룹으로 범위를 좁혀 재귀적으로 ..

다차원검색트리(KD-트리, KDB-트리, R-트리)

KD-트리 1) 이진검색트리를 확장 · k(k≥2)의 필드로 이루어진 키 사용 · 각 레벨에서 필드를 번갈아가며 검색에 사용 - 한 레벨에서는 하나의 필드만 사용 - 총 k개의 필드를 사용하는 검색이라면, k개의 레벨을 내려가면 검색에 사용하는 필드가 일치 - 기준 노드의 값과 비교 노드의 값으로 노드의 위치를 결정 - A의 x값을 기준으로 B는 왼쪽, C는 오른쪽에 위치 - B의 y값을 기준으로 D는 왼쪽, E는 오른쪽에 위치 - C의 y값을 기준으로 F는 오른쪽에 위치(크거나 같을 경우라면) - D의 x값을 기준으로 G는 왼쪽에 위치 2) KD-트리 검색 - 임의의 키가 입력되면, 각 필드를 차례대로 사용해서 트리를 검색 3) KD-트리 삽입 - 검색하듯이 트리를 따라 내려가다 리프 노드를 만나면 거..

객체지향의 5원칙 SOLID

디자인 패턴이란 객체에 대한 설계의 패턴을 말한다. - 객체의 기능 정의 - 객체의 관계를 규정(설계) 객체에 데이터를 요구하지 말고 작업을 요청하라. - 작자 미상 '토비의 스프링' 이라는 책에서 언급된 말로서 객체 지향은 데이터를 감추고 객체의 기능을 사용해야 한다는 것을 뜻한다. 객체지향의 5가지 원칙(SOLID) - SRP(Single Responsibility Principle) : 단일 책임 원칙 · 하나의 클래스는 하나의 책임만 가져야 한다. 다르게 말하면 하나의 클래스에 많은 기능 또는 목적을 집약시키는 것은 피해야 한다. · 많은 기능을 가진 클래스는 유지보수가 어렵다. S/W는 변화에 대응해야 하기에 유지보수는 불가피하다(유지보수는 숙명이다). · 따라서 설계 시 반드시 성능보다 유지보..

OOP 2022.06.23

13-2. 유저 모드 동기화

크리티컬 센션(임계 영역) 기반의 동기화 - 일종의 Key(열쇠)를 가지고 접근하도록 하게 함 CRITICAL_SECTION gCriticalSection; // 임계영역 오브젝트(Key에 해당) InitializeCriticalSection(&gCriticalSection); // 오브젝트 초기화(동기화 작업 준비) ..... // 임계영역 진입을 위해 임계영역 오브젝트 획득 EnterCriticalSection(&gCriticalSection); // 열쇠 획득 /*임 계 영 역 */ // 임계영역 오브젝트 반환 LeaveCriticalSection(&gCriticalSection); // 열쇠 반환 ..... DeleteCriticalSection(&gCriticalSection); // 열쇠 소멸..

13-1. 쓰레드 동기화의 개념/임계 영역 접근 동기화

- 임계 영역 => 둘 이상의 쓰레드가 동시에 동일한 메모리 영역에 접근하도록 하는 코드 블럭 : 메모리 접근 동기화가 필요 - 여러 쓰레드의 실행 순서가 필요한 경우 : 순서 동기화(Chapter 14에서 다룰 예정) 쓰레드 동기화 기법의 두 가지 구분 : 유저 모드 동기화, 커널 모드 동기화 동기화 기법 유저 모드 동기화 커널 모드 동기화 Pros 커널 모드와의 빈번한 이동이 없기에 속도가 빠름 다양한 기능을 다룰 수 있음 Cons 커널 모드보다 기능이 제한적 유저 모드와의 이동으로 속도가 느림 유저 모드 동기화 - 크리티컬 섹션(임계 영역) 기반 동기화 - 인터락 함수 기반 동기화 커널 모드 동기화 - 뮤텍스 기반 동기화(접근 동기화) - 세마포어 기반 동기화(접근 동기화) - 이름있는 뮤텍스 기반..

12-3. 쓰레드의 상태 컨트롤 / 쓰레드의 우선순위 컨트롤

쓰레드의 상태 컨트롤 - [SuspendThread] 함수는 Running 상태의 쓰레드를 Blocked 상태로 만들어 주는 함수 - [ResumeThread] 함수는 Blocked 상태의 쓰레드를 Ready 상태로 만들어 주는 함수 * 명시적으로 쓰레드를 컨트롤하는 것은 문제를 발생을 야기시킬 수 있기에 가급적 사용을 하지 않음 쓰레드의 우선순위 결정 요소 - 기본 우선순위는 9가 됨 쓰레드의 우선순위 컨트롤 함수 // 쓰레드의 우선순위를 설정하는 함수 BOOL SetThreadPriority { HANDLE hThread, int nPriority } // 함수 실패 시 0(False)을 반환 // 쓰레드의 우선순위를 반환받는 함수 int GetThreadPriority { HANDLE hThread..

12-2. 쓰레드의 성격과 특성

- 쓰레드는 스택 영역만 독립적으로 같고 그 외 힙, 데이터, 코드 영역은 공유 - 각각의 쓰레드가 전역변수 total에 접근하여 연산한 값을 저장 문제점 - total 변수에 다중으로 접근 시 total에 값을 넣기 전에 쓰레드 간의 CS(Context Switching)이 발생하는 경우 - total에 접근 중인 쓰레드가 있으면 다른 쓰레드는 접근할 수 없도록 해야 함(임계 영역 문제-Code Block) 프로세스로부터의 쓰레드 분리 1) 쓰레드 Usage Count : 생성과 동시에 2 2) 하나는 쓰레드 종료 시 감소, 하나는 CloseHandle 함수 호출 시 감소 3) 쓰레드 생성 후 종료코드를 얻은 다음 [CloseHandle] 함수 호출 : 쓰레드 분리* ANSI 표준 C 라이브러리와 쓰레..

12-1. Windows에서의 쓰레드 생성과 소멸

쓰레드의 생성 - CreateThread 함수를 통해 쓰레드를 생성 ㄴ 첫 번째 전달 인자: 핸들의 상속여부 결정 ㄴ 두 번째 전달 인자: 초기 독립 스택의 사이즈 ㄴ 세 번째 전달 인자: void 포인터를 인자로 받고 DWORD를 리턴하는 함수의 포인터(쓰레드 메인함수) ㄴ 네 번째 전달 인자: Windows에게 요구할 전달인자 선언 ㄴ 다섯 번째 전달 인자: 쓰레드를 생성과 동시에 Blocked 상태로 둘 지에 대한 옵션 여부 ㄴ 여섯 번째 전달 인자: 고유한 쓰레드의 ID cf) 핸들은 프로세스가 컨트롤하기 위한 것 생성 가능한 쓰레드의 갯수는? - 허용 가능한 범위 안에서 최대한 생성 가능 - 별도 사용 스택 공간의 최대치 만큼 생성할 수 있음 쓰레드의 소멸 case 1) 거의 대부분의 경우 : ..

11-2. Windows에서의 프로세스와 쓰레드

Windows에서의 프로세스와 쓰레드 - 프로세스A와 프로세스B가 있으며, 프로세스A는 3개의 쓰레드, 프로세스B는 2개의 쓰레드가 있다면, - 프로세스A의 쓰레드1,2가 동시 실행 중이면 쓰레드3은 Block상태 즉, I/O연산 중에 있거나 우선순위가 낮기 때문 - 쓰레드와 프로세스를 구분하기는 어렵지만 '프로세스 내에 존재하는 실행의 흐름'으로 간주 - 쓰레드는 메인 코드가 있으며 독립된 스택 영역을 사용 - 실행 흐름의 주체는 프로세스가 아니라 쓰레드(메인 함수 호출 또한 메인 쓰레드에 의해 실행 됨) - 쓰레드가 실행할 수 있는 환경을 제공해주는 것이 프로세스이며, 그 환경 안에서 쓰레드가 동작 쓰레드 구현 모델에 따른 구분 Kernel Level Thread와 User Level Thread O..

LIST