일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- DRAM
- 클라우드
- HA
- Compression
- CUDA
- convolution
- kubernetes
- CuDNN
- 양자역학의공준
- Semiconductor
- SpMM
- flash_memory
- stl
- Qubit
- jhVM
- nvidia
- FPGA
- deep_learning
- quantum_computing
- 반도체기초
- sycl
- C++
- 딥러닝
- cloud
- GPU
- dnn
- 반도체
- POD
- jhDNN
- 쿠버네티스
- Today
- Total
목록Programming (14)
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..
Vim을 쓰다보면 VScode의 multi-line cursor와 같은 기능이 있으면 좋겠다는 생각이 들 것이다. 자세히 찾아보니까 VScode의 multi-line cursor와 동일한 기능을 제공하는 Vim plugin이 존재하기에, 이것을 설치하면 된다고 한다. 하지만 Customize의 세계는 넓고 무서우니 일단 넘어가고 간단한 방법을 찾아보았다. Multi-line Insert Mode밑의 시나리오 1과 같이, 동일한 문자열(i.e. abc123)을 여러 줄에 걸쳐 동일한 위치에 추가하고자 한다. 1. 원하는 위치에 커서를 위치 시킨다. 2. [Ctrl + v] 를 눌려 [VISUAL BLOCK] 모드에 진입 3. 원하는 라인까지 커서 이동 (↓ 버튼) 4. [Shift + i] 입력 원하는 라..
기존 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)이다" 라고 직역할 수 있는데, 한글로 직역하여도 바로 와닿지는 않을 것이다. 좀 더 풀어서 얘기하자면, 자원 획득을 객체 초기화 시에만 하라, 혹은, 자원 획득이 필요한 경우, 자원 획득을 담당하는 클래스를 만들어 그 클래스의 생성자에서만 자원 획득을 하라고 이해하면 좋을 것 같다. (프로그램을 짜다보면 동적 메모리 할당, 파일 열기, 락 등 자원 획득을 하는 일이 많은데, 이러한 자원 획득을 담당하는 클래스를 만들어 그 클래스의 생성자에서만 자원 획득을 하라고 강..