일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- sycl
- 클라우드
- HA
- DRAM
- Qubit
- 양자역학의공준
- 반도체기초
- 쿠버네티스
- GPU
- flash_memory
- CuDNN
- nvidia
- dnn
- convolution
- POD
- Compression
- SpMM
- stl
- CUDA
- cloud
- FPGA
- quantum_computing
- kubernetes
- C++
- jhDNN
- 반도체
- jhVM
- deep_learning
- 딥러닝
- Semiconductor
- Today
- Total
목록Programming/C++ (11)
Computing
이전 글[STL] Set, Map Custom Sort 구현 방법 (Red-black tree) 이전 글에서 Set을 이용한 Custom Sort 구현 방법에 대해서 소개하였다. 윗 포스터와 같이 std::set은 Balanced Binary Tree (i.e. Red-Black Tree)를 기반으로 구현[1]되었기에 내부적으로 데이터들을 정렬하여 저장한다. 따라서 std::set을 정렬을 위한 용도로 사용할 수 있다. std::set의 또다른 기능 : Duplicate 테스트 및 중복 제거std::set은 정렬 용도 말고도 중복된 요소 제거를 위해 사용될 수 있다. 이는 Set 자료구조의 기본 특성인, std::set 내 저장된 데이터는 고유의 Key 값을 가져야 한다는 특성[2] 덕분이다. 즉 s..
기존 C-style 랜덤 숫자 생성 방법 및 한계밑의 코드 예시는 기존 C-style code에서 랜덤 숫자 (정확히는 랜덤한 것처럼 느껴지는 pseudo-random 숫자를 생성) 를 생성하는 코드이다. std::rand()함수[1]는 Seed 숫자를 이용해 어떤 숫자를 생성하는데, std::srand() 함수를 이용하면 std::rand()함수가 사용하는 Seed 숫자를 설정할 수 있다. 밑의 코드에서는 std::srand() 함수를 이용해 Seed를 현재 시간으로 설정하였다. #include #include ... std::srand(time(NULL)); 랜덤 생성 시의 Seed 설정. Seed를 현재 시간으로 설정한다. for (int i=0; i
항상 헷깔리고 까먹어서 정리한다. =, +=, -=, *= 등과 같은 대입 연산자 (Assignment operator, 대입문, 할당문, Assignment statement)는 대입 연산자의 왼쪽 operand의 reference가 반환된다 [1,2]. int a, b, c; a = 10 // 반환값: reference of a (10) a = b = 20 // a = (b = 20) --> a = 20 (c = 10) = 30 // 1. (c=10)가 c의 reference를 반환하기에 최종 c=30이 됨 std::cout
Singleton 싱글톤 디자인 패턴 Singleton 디자인 패턴을 따르는 클래스는 프로그램에서 유일한 하나의 클래스 객체만이 생성되도록 강제된다. 즉 여러번 클래스의 생성자를 호출하더라도 단 하나의 클래스 객체만이 생성되고, 이후의 생성자 호출은 최초 생성된 클래스 객체만을 반환하도록 구현[1]된다. (위의 정의 그대로) 프로그램 내에 유일하게 하나의 객체만이 생성되어야 하는 경우에, 싱글톤(싱글턴) 디자인 패턴을 적용하여 클래스를 설계하는 것이 유용하다. 예를 들면 하드웨어 장치(GPU, etc.)나 DB connection, thread-pool과 같은 외부 자원을 이용하는 경우에 프로그램 내에 하나의 대표 객체만을 생성하는 것이 안전하다. 이러한 경우에 싱글톤 디자인 패턴을 이용하여 해당 자원을..
Red-Black Tree를 통해 구조화된 자료구조: std::set, std::map 이전 글에서 std::set과 std::map은 Associative Container 중 하나들로, Key 기반으로 데이터(value)에 빠르게 접근할 수 있도록 쌍이 저장된다고 정리하였다. 이때 std::set은 key 자체를 데이터(value)로 보아 key 접근만을 빠르게 하도록 구현된다. std::set과 std::map은 컨테이너 내 데이터 관련 연산(데이터 추가, 읽기, 삭제, 존재 여부 등)을 O(log(N))의 time complexity로 수행가능하도록 구현되었다. 이러한 Key 기반 빠른 탐색이 가능하도록 하기 위해 std::set과 std::map은 self-balancing binary sear..
RAII와 동적 메모리 자원 관리 이전글에서 C++에서 자원 관리를 용이하게 해주는 RAII 디자인 패턴에 대해서 정리하였다. RAII 디자인 패턴은 자원의 생애 주기 (자원 할당 -> 자원 사용 -> 자원 해제) 를 객체의 생애 (객체의 Constructor 호출 -> 객체의 Destructor 호출) 에 바인드하여 자원 관리를 C++ 런타임에서 자동으로 맡기는 기법이다. RAII 디자인 패턴을 달성하기 위해 만들어진 대표적인 class로는 std::unique_ptr, std::shared_ptr, std::lock_guard가 있다. 이때, std::unique_ptr, std::shared_ptr은 Smart pointer (스마트 포인터) 라고도 한다. 스마트 포인터는 RAII 패턴을 이용해 동..
RAII 개념 RAII (Resource Acuquisition Is Intialization) 는 C++에서 강조되는 디자인 테크닉 중 하나이다[1]. "자원 획득(Resource Acquisition)은 초기화(Initialization)이다" 라고 직역할 수 있는데, 한글로 직역하여도 바로 와닿지는 않을 것이다. 좀 더 풀어서 얘기하자면, 자원 획득을 객체 초기화 시에만 하라, 혹은, 자원 획득이 필요한 경우, 자원 획득을 담당하는 클래스를 만들어 그 클래스의 생성자에서만 자원 획득을 하라고 이해하면 좋을 것 같다. (프로그램을 짜다보면 동적 메모리 할당, 파일 열기, 락 등 자원 획득을 하는 일이 많은데, 이러한 자원 획득을 담당하는 클래스를 만들어 그 클래스의 생성자에서만 자원 획득을 하라고 강..
이전 글 [STL] [1] 순차 컨테이너 정리 (Sequence Container, std::array, std::vector, std::list, std::deque) [STL] [2] 연관 컨테이너 정리 (Associative Container, std::set, std::map) 이전 글에서 STL container 개념과 Sequence container, Associative container에 대해서 정리하였다. 오늘은 앞서 소개한 STL container들을 이용하여 개발된 Container adapter에 대해서 정리하고자 한다. Container Adapter Container adapter는 기존 컨테이너를 변경(modify, adapt)하여 특정 인터페이스(기능)만을 제공하도록 만든 ..