본문 바로가기

오래된 글86

C++ inline function inline int add(int a, int b) { return a+b; } 인라인 함수inline function는 C++의 특징 중 하나입니다. 인라인 함수를 사용하는 이유는 무엇일까요? 소스 코드를 실행시키면 메인 함수가 먼저 실행되고, 메인 함수에서 다른 함수들을 호출할 것입니다. 다른 함수를 호출할 때, 호출된 함수의 매개 변수, 반환 주소 등이 메모리 스택에 저장됩니다. 이 과정에서 메모리에 접근에 값을 써야 해서 오버헤드overhead가 발생합니다. 즉, 물리적인 메모리 공간을 접근해 값을 써야 하므로 그 만큼 시간이 많이 걸립니다. 이러한 함수 호출 오버헤드function call overhead를 줄이기 위해 인라인 함수를 사용합니다. 인라인 함수를 사용하면 어떤 일이 벌어질까요? 인.. 2019. 10. 24.
C/C++ 컴파일 과정 | gcc/g++ 명령어 소스 코드는 아래의 그림과 같은 컴파일 과정을 거쳐 실행 파일로 만들어 집니다. 전처리기preprocessor: 소스 코드의 주석 제거, define을 치환하는 기능을 합니다. 컴파일러compiler: 어셈블리 파일로 변환합니다. 어셈블리 코드는 CPU 명령어 조합이며, 어셈블리어는 CPU에 의존적입니다. 어셈블러assembler: 오브젝트 코드 파일로 변환합니다. 오브젝트 코드는 0과 1로 이루어진 이진 코드입니다. 그리고 아직 주소 정보가 확정되지 않은 상태입니다. 링커linker: 오브젝트 파일들을 묶어서 실행 코드 파일로 변환합니다. 운영체제가 로딩할 수 있도록 주소 정보를 할당한 파일을 만들어 냅니다. 따라서 링커는 운영체제에 의존적입니다. 컴파일 과정을 조금 더 자세하게 살펴보겠습니다. 전처리.. 2019. 10. 24.
PyCharm Unresolved reference error 파이참 IDE를 이용해 파이썬 코드를 작성하는 중 'Unresolved reference'에러가 에디터에 표시되었습니다. 텐서플로를 이용해 코드를 구현하는 중에 아래와 같은 에러가 표시되었습니다. Unresolved reference 'Model' Unresolved reference 'Dense' Unresolved reference 'Flatten' Unresolved reference 'Conv2D' from tensorflow.keras.layers import Dense, Flatten, Conv2D from tensorflow.keras import Model 위 코드에서 Dense, Flatten, Conv2D, Model 부분에서 빨간 줄이 나타나면서 에러 표시가 났습니다. 그런데 이상하게.. 2019. 10. 24.
tensorflow 2.0 GPU 에러 | GPU 메모리 부족할 때 텐서 플로우 홈페이지 튜토리얼을 따라하면서 TensorFlow 2.0 버전을 학습하고 있는데, 아래와 같은 에러 메시지가 나왔습니다. 튜토리얼에 나와있는 코드를 그대로 작성하였기에 코드에는 문제가 없다는 생각을 가지고, 에러 메시지를 읽어보았습니다. 전체 에러 메시지는 이 글의 아랫 부분에 있습니다. tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above. 위의 에러 메시지를 읽어보니 "cu.. 2019. 10. 24.
그래프 개념과 구현 그래프Graph는 정점vertex와 간선edge으로 구성된 데이터 구조입니다. 노드 사이에 간선으로 연결되며, 간선은 방향을 가질 수도 있고 방향을 가지지 않을 수도 있습니다. 즉, 그래프는 아래와 같은 두 가지 속성을 지니고 있습니다. 노드node라고도 부르는 정점의 유한 집합으로 구성됩니다. (u, v) 형태의 순성쌍으로 이루어진 간선의 유한 집합으로 구성됩니다. (u, v)는 정점 u에서 정점 v로 이어지는 간선을 나타냅니다. 방향이 있는 그래프directed graph에서 (u, v)와 (v, u)는 같지 않습니다. 간선은 시간이나 거리, 요금과 같은 가중치weight, 값, 비용을 나타낼 수도 있습니다. 위에서 본 그래프의 속성에서 살펴본 것처럼 그래프의 간선이 여러 종류의 값을 나타낼 수 있기.. 2019. 10. 22.
우분투 temporary 디렉토리 우분투, 리눅스 운영체제에서 root 디렉토리 아래에 tmp 디렉토리가 존재한다. 시스템이 재부팅되면 tmp 안에 저장된 데이터는 삭제된다. 텐서플로우로 mnist 데이터를 로드하는 과정에서 tmp/data 디렉토리에 저장하는 경우가 많다. stack exchange stack exchange 2019. 10. 20.
우분투 16.04와 18.04에서 NVIDIA 그래픽 드라이버 설치하는 방법 우분투 16.04와 18.04에서 NVIDIA 그래픽 카드 드라이버를 설치하는 방법을 소개하는 유용한 링크는 다음과 같다. 우분투 버전별로 그래픽 드라이버를 설치하는 방법이 다른 듯하다. 1. 우분투 18.04 버전 18.04버전에서 그래픽 드라이버를 설치하기 위해 아래 링크를 참고하면 좋다. https://codechacha.com/ko/install-nvidia-driver-ubuntu/ Ubuntu18.04 LTS에 nvidia 드라이버를 설치하는 방법 | codechacha 우분투 18.04를 설치 후 화면이 멈추는 일이(lockup) 잦아졌습니다. 원인은 nvidia 그래픽카드 드라이버를 설치하지 않아 발생한 문제였습니다. 드라이버는 수동, 자동으로 설치하는 방법이 있습니다. 먼저 자신이 설치해.. 2019. 8. 5.