-
Flash와 FTL
안녕하세요? 오늘은 flash와, flash에서 사용되는 기법인 FTL에 대한 간단한 글을 써보았습니다. Flash의 특성 Flash(플래시 메모리)는 전기적으로 데이터를 저장하는 저장장치들을 일컫는 말입니다. 요즘 사용되는 대부분의 기계에는 flash가 들어갑니다. 대부분의 컴퓨터나 노트북에는 SSD가 들어가고, 데이터를 간편하게 휴대하기 위해 사용하는 USB나 스마트폰에 내장되어있는 저장장치도 대부분 flash입니다. Flash는 Random read 속도가 빠르고, 전력 소모도 적고, 충격에도 강한 등의 많은 장점을 가지고 있어 널리 사용됩니다. 이런 flash에 데이터를 저장할 때, 공통적으로 몇 가지 특별한 속성을 가집니다. 이 때문에 flash에 데이터를...
-
Grad-CAM
Introduction Image Classification은 Convolutional Deep Neural Network를 활용하는 대표적인 문제들 중 하나입니다. 이와 관련된 유명한 대회로 ILSVRC (ImageNet Large Scale Visual Recognition Challenge) 가 있습니다. ImageNet 데이터베이스의 데이터를 이용하여 대회가 이루어지는데, 약 백만 장의, 천 개의 카테고리로 분류된 training image들을 이용하여 각 test image에 대해서 어떤 카테고리에 속할 지 잘 예측하는 것을 목표로 합니다. 이 대회에서 널리 알려진 네트워크 구조인 AlexNet, GoogLeNet, VGGNet, ResNet 모델 등이 제안되기도 하였습니다. 고양이가 있는 사진이 ‘고양이’ 카테고리로 분류되어 있다고...
-
C/C++의 undefined behavior
C나 C++에 있어서 가장 곤혹스러운 요소 중 하나인 undefined behavior는 입문자부터 숙련자에 이르기까지 까다로운 디버깅을 요합니다. 흔히 나오는 코딩 실수인 배열 인덱스 오류도 undefined behavior이며, 온라인 저지 등에서는 최적화 옵션이 켜지면서 전혀 다른 효과가 일어날 수 있습니다. 꼭 C++에만 국한된 이야기는 아니지만, C++ undefined behavior의 주된 요인 중 하나인 signed integer overflow는 2019년에만 1247개의 CVE 취약점을 낳았습니다. 그렇다고 모든 사람이 C/C++ 스펙을 머릿속에 넣어야 하는 것도 아닐 뿐더러 그럴 수도 없습니다. 이 포스트에서는 undefined behavior의...
-
GCC 확장 기능
서론 프로그래밍을 하면서 C나 C++의 레퍼런스를 찾다 보면 표준의 디테일에 놀라게 되는 경우가 많습니다. 평소에는 무심하게 사용해왔던 문법에 들어있는 다양한 제약 조건이나, 키워드들의 알지 못했던 쓰임새들을 종종 보게 됩니다. 그런데 그렇게 방대한 스펙을 가지고도 사람들은 더 많은 것을 바라기 마련입니다. 표준상으로는 지원되지 않는 문법을 통해 더욱 편리한 코드를 만들거나, 어셈블리 명령을 직접 적어넣지 않아도 프로세서의 좋은 기능을 컴파일러가 최대한 살릴 수 있게 보장해 주었으면 하는 등 끝없이 더 많은 기능을 원하고 있습니다. 이를 충족시키기 위해...
-
Geometric spanning tree
Geometric Spanning Tree $d$ 차원 좌표공간 상에 크기 $N$ 의 점 집합 $S$ 가 주어졌을 때, 집합 $S$ 를 정점 집합으로 하며 각 정점 쌍마다 두 점의 거리를 가중치로 한 그래프를 생각할 수 있다. 이러한 그래프에서 최소 스패닝 트리를 찾는 문제를 Minimum Geometric Spanning Tree 라고 한다 (Encyclopedia of Algorithms 533p). 두 정점의 “거리” 를 지정하는 방법은 여러 가지가 존재하고, 이 거리계를 어떻게 지정하느냐에 따라서 문제를 해결하는 양상이 많이 달라진다. 일반적으로 사용하는 거리계는 $L_1$ metric...