
3. 알고리즘 [ 버블소트, 힙소트, 머지소트, 퀵소트, 삽입소트 ] 버블소트는 서로 인접한 두 원소를 비교하여 정렬하는 알고리즘입니다. 0번 인덱스부터 n-1번 인덱스까지 n번까지의 모든 인덱스를 비교하며 정렬합니다. 시간복잡도는 $O(n^2)$ 입니다. 힙소트는 주어진 데이터를 힙 자료구조로 만들어 최대값 또는 최소값부터 하나씩 꺼내서 정렬하는 알고리즘입니다. 힙소트가 가장 유용한 경우는 전체를 정렬하는 것이 아니라 가장 큰 값 몇개만을 필요로 하는 경우입니다. 시간복잡도는 $O(nlog_2n)$ 입니다. 머지소트는 주어진 배열을 크기가 1인 배열로 분할하고 합병하면서 정렬을 진행하는 분할/정복 알고리즘입니다. 시간복잡도는 $O(nlog_2n)$ 입니다. 퀵소트는 매우 빠른 정렬 속도를 자랑하는 분할..

2. 자료구조[ 자료구조와 알고리즘 ]자료구조는 데이터를 원하는 규칙 또는 목적에 맞게 저장하기 위한 구조이고, 알고리즘이란 자료구조에 쌓인 데이터를 활용해 어떠한 문제를 해결하기 위한 여러 동작들의 모임입니다. [ 스택, 큐, 트리, 힙 구조 설명 ]스택: 세로로 된 바구니와 같은 구조로 먼저 넣게 되는 자료가 마지막으로 나오게 되는 First-In Last-Out(FILO) 구조이다.큐: 가로로 된 통과 같은 구조로 먼저 넣게 되는 자료가 가장 먼저 나오는 First-In First-Out(FIFO) 구조이다.트리: 정점과 간선을 이용해 사이클을 이루지 않도록 구성한 Graph의 특수한 형태로, 계층이 있는 데이터를 표현하기에 적합하다.힙: 최댓값 또는 최솟값을 찾아내는 연산을 쉽게 하기 위해 고안..

1. 프로그래밍 공통 [ OOP란 ] OOP는 현실 세계를 프로그래밍으로 옮겨와 현실 세계의 사물들을 객체로 보고, 그 객체로부터 개발하고자 하는 특징과 기능을 뽑아와 프로그래밍하는 기법입니다. OOP로 코드를 작성하면 재사용성과 변형가능성을 높일 수 있습니다. [ OOP의 5가지 설계 원칙 ] SRP(Single Responsibility Principle, 단일 책임 원칙): 클래스는 단 하나의 목적을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다. OCP(Open-Closed Principle, 개방 폐쇠 원칙): 클래스는 확장에는 열려 있고, 변경에는 닫혀 있어야 한다. LSP(Liskov Substitution Principle, 리스코프 치환 원칙): 상위 타입의 객체를 하위..

1. CUDA C 병렬 프로그래밍 고급 예제 [ Parallel Dot ] 아래의 예제는 동일한 크기의 A배열과 B배열의 index에 있는 숫자를 곱해 C배열에 대입하는 코드이다. #include "device_launch_parameters.h" #include #include #include #define SIZE (2048 * 2048) #define THREADS_PER_BLOCK 512 // __global__을 통해서 커널임을 표시한다. host에서 호출된다. __global__ void dot(int *a, int *b, int *c, int n){ // 수많은 블록과 스레드가 동시에 처리한다. // 위에서 정의한 index를 통해서 스레드들을 구별한다. int index = threadId..

1. CUDA란? [ CUDA란? ] CUDA는 Nvidia가 만든 병렬 컴퓨팅 플랫폼 및 API 모델이다. 소프트웨어 개발자들은 CUDA를 통해 General한 Purpose를 위한 GPU사용이 가능해졌는데, 이러한 것을 GPGPU(General-Purpose Computing on Graphics Processing Units)라고 한다. CUDA 플랫폼은 GPU의 가상 명령어셋과 병령 처리 요소들을 사용할 수 있도록 만들어주는 소프트웨어 레이어이며, NVIDIA가 만든 CUDA 코어가 장착된 GPU에서 작동한다. 2006년 11월, G80 아키텍처와 함께 처음 발표되었으며, 초기에는 C,C++만 지원했지만 지금은 Fortran이나 C# 등 다양한 언어에서 사용아 가능하며 현재는 10.0 버전까지 나..