본문 바로가기

전체 글

(611)
micro-operations, micro-ops, μops, 마이크로 조작, 마이크로 연산 컴퓨터 중앙 처리 장치에서 마이크로 오퍼레이션(micro-operations, micro-ops, μops, 마이크로 조작, 마이크로 연산)은 일부 디자인에서 복잡한 기계어를 구현하기 위해 사용되는 세세한 저급 명령어이다. (이 문맥에서 매크로 명령이라고 부르기도 한다)[2]:8–9 일반적으로 마이크로 오퍼레이션은 하나 이상의 레지스터에 저장된 데이터의 기초적인 오퍼레이션을 수행하며, 여기에는 CPU 레지스터 간 또는 레지스터와 외부 버스 간 데이터 전송, 그리고 레지스터의 산술 또는 노리 오퍼레이션 수행이 포함된다. 일반 페치-디코드 실행 주기에서 매크로 명령의 각 단계는 실행 중에 분해되므로 CPU는 일련의 마이크로 오퍼레이션을 통해 결정하고 진행한다. 마이크로 오퍼레이션의 실행은 CPU의 제어 장치..
[C&C++] header 파일 선언 이유 .cpp 파일로 만들어진 오브젝트 파일에 있는 함수들의 내용을 다른 소스 파일에서 사용할 수 있도록 하기 위함입니다. A.cpp 파일에서 B.cpp 파일에 들어있는 함수나 클래스를 사용하기 위해서는 함수의 프로토 타입이나 클래스 선언 등의 정보가 필요합니다. (그래야 어떤 함수(또는 메소드)를 호출할때 인자값이 필요하고, 안필요하고와 리턴 타입을 알 수 있으니까요.) 그런 정보들을 파악하기 위해서 헤더 파일을 만들어서 관리합니다. 그리고, 헤더파일의 사용에 대해서 질문하셨는데.. 이는 라이브러리를 생각하시면 간단합니다. 라이브러리와 같은 것들은 cpp 파일을 제공하지 않는 경우가 많기 때문입니다. 그리고, 무엇보다 관리와 공유가 편하다는 장점이 있습니다. :)
함수 선언 이유 엄연히 함수의 정의가 있는데 왜 선언이 필요할까...??? ​ 첫째, 함수 선언에서 반환값의 형태를 확인합니다. 컴파일러는 함수를 호출한 자리에 반환값과 같은 형태의 저장 공간을 준비합니다. 즉, 정수를 반환하면 호출한 자리에 int형 공간을 확보하고 실수를 반환하면 double형 공간을 확보합니다. 따라서 함수를 호출하기 전에 선언을 통해 반환형을 미리 컴파일러에게 알릴 필요가 있습니다. 물론 함수의 정의에서도 반환형을 확인할 수 있고 컴파일러는 위에서 아래로 한줄씩 컴파일하므로 함수 호출 이전에 함수를 정의하는 방법도 있습니다. ​ main 함수 위에 add함수를 정의하면함수의 정의에 원형이 포함되므로 따로 함수를 선언할 필요가 없습니다. 이 경우 실행 순서에는 변함이 없습니다. 프로그램은 항상 ma..
[Greedy Algorithm] coin change 이 탐욕 알고리즘으로 거스름돈 교환 문제를 풀게 된다면, 큰 단위의 동전이 작은 단위의 동전의 배수가 되어야 탐욕 알고리즘을 적용할 수 있습니다. 위 같은 경우는, 10원 동전은 1과 5의 배수이고, 5는 1의 배수이므로 탐욕 알고리즘을 적용할 수 있었던 것입니다. 유의하셔야 할 점은 매 순간마다 최선의 선택을 하여 나온 해가 반드시 전체적인 최적해는 아니라는 것입니다. 그렇기 때문에, 탐욕 알고리즘을 사용할 때에는 전체적인 최적해 인지를 항상 염두해 두실 필요가 있습니다. 즉, 탐욕 알고리즘을 사용하시기 전에 탐욕 알고리즘을 사용해도 되는지 검증 단계를 거치시는게 좋습니다. greedy 알고리즘을 사용하면 좋은 경우 1. 최적 부분 구조 (Optimal Substructure) - 부분 문제를 최적화하..
[Basic] DRAM, SRAM 메모리 종류 : 1. 메인(Main) 메모리 : 램(RAM) (D램) 2. 레지스터(Register) : CPU 안에 내장되어 있어서 연산을 위한 저장소 제공 3. 캐쉬(Cache) : S램. CPU와 램사이에서 중간 저장소 역할 4. 하드디스크(Hard Disk)와 이외 장치 : 하드 디스크, I/O 장치 등등 [반도체 8대공정] 메모리 SRAM&DRAM (Feat.엔지닉) 반도체 공부 2일차! 반도체 메모리 소자인 SRAM과 DRAM 에 대해서 공부했다 읽기 쓰기 동작 너무 ... blog.naver.com
[DFS] 저울 추 ( p. 197 ) 오른쪽에 모든 추를 놓아본다. 마지막 추에 대해 무게가 안 맞으면 해당 추를 왼쪽에 놓아본다. 반복문으로 중심이 되는 추가 있다. 중심이 되는 추에 대해 위의 과정을 반복하는 것이다. ex) n=10일 때, 추 ={ 1, 3, 9 } 중심 추 1일 때(반복문에서 i=0) (10) / 1, 3, 9 9 (10) / 1, 3 3, 9, (10) / 1 1,3, 9, (10) / 중심 추 3일 때(반복문에서 i=1) (10) / 3, 1, 9 9 (10) / 3, 1 1, 9, (10) / 3 3, 1, 9, (10) / 중심 추 9일 때(반복문에서 i=2) (10) / 9, 1 ===============> 끝 3 3 (10) / 9, 1 1, 3, (10) / 9 9, 3, 1, (10) / 1. 어떤 작..
ILP( instruction level parallelism ), TLP( thread level parallelism ) - Thread Level Parallelism (TLP): Multi-Threading => 프로그램 전체에서, 수행하는 기능에 따라 쓰레드를 구분하고, 그 중 서로 independent한 쓰레드들을 병렬적으로 수행하는 것을 의미한다.​ => TLP explicitly represented by the use of multiple threads of execution that are inherently parallel => Use multiple instruction streams to improve Throughput of computers that run many programs Execution time of multi-threaded programs (Latency가 향상되는 것은 아니다) ※ ..
Greedy Algorithm 그리디 알고리즘은 동적 프로그래밍 사용 시 지나치게 많은 일을 한다는 것에서 착안하여 고안된 알고리즘입니다. 동적 프로그래밍을 대체하는 것은 아니고 같이 쓰이며 서로 보완하는 개념입니다. 그리디 알고리즘은 탐욕 알고리즘 또는 욕심쟁이 알고리즘이라고도 불리는데요. 미래를 생각하지 않고 각 단계에서 가장 최선의 선택을 하는 기법입니다. 이렇게 각 단계에서 최선의 선택을 한 것이 전체적으로도 최선이길 바라는 알고리즘이죠. 물론 모든 경우에서 그리디 알고리즘이 통하지는 않습니다. 쉬운 예를 들자면 지금 선택하면 1개의 마시멜로를 받고, 1분 기다렸다 선택하면 2개의 마시멜로를 받는 문제에서는, 그리디 알고리즘을 사용하면 항상 마시멜로를 1개밖에 받지 못합니다. 지금 당장 최선의 선택은 마시멜로 1개를 받는 거지..
tiling, blocking, batching A survey of techniques for optimizing deep learning on GPUs The rise of deep-learning (DL) has been fuelled by the improvements in accelerators. Due to its unique features, the GPU continues to remain the most … www.sciencedirect.com
[DFS] 두 색 칠하기, bicoloring ( p. 171 ) for i 점의 갯수 G[v][i] 연결되어 있고 색이 현재 칠하려는 색과 같다면 can = 0 칠할 수 있는 자리가 아니다. can이 0 이라면 다시 현재 V정점 visited[V] 0으로 칠하고 return for i 점의 갯수 G[v][i] 연결되어 있고 색이 안칠해진 부분이라면 dfs( i, 1 ) // 그 정점으로 가서 1로 칠하고 나머지 연결된 부분 확인 dfs( i, 2 )
[DFS] 치즈 ( p. 161 ) 바깥 공기 -1 바깥 공기에 붙어 있고 1인 위치 +1 done() : 녹을 자리에 있다면 두 군데 이상에서 +1이 됐을 것이므로 2보다 클 것이다. -> 0으로 만들어준다. -1인 자리 기존에 0이었던 자리 -> 0으로 만들어준다. 2나 1인 자리는 아직 녹지 않았거나 0인 자리를 탐색할 때 건드려지지 않은 부분이다. -> 다시 1로 만든다. 다시 탐색
[DFS] flood fill ( p.78 ) 이와 같이 그래프로 만든 다음 배열의 (0, 0)부터 순차탐색을 진행하면서 (a, b)의 값이 만약 1이라면 이 점을 시작으로 하여 깊이우선탐색을 이용하여 모든 연결된 점을 방문하고 특정 값으로 체크한다. 나머지 점들도 모두 순차탐색하면서 마지막 까지 깊이우선탐색을 실행하고 알고리즘을 종료한다. 마지막에 깊이우선탐색을 실행한 횟수가 두더지의 수가 되고, 각 두더지 굴의 크기는 다른 배열에 저장해 둔 다음 마지막에 std::sort()를 이용하여 정렬한 후 내림차순으로 출력하면 된다. 여기에 사용되는 알고리즘은 지뢰찾기, 뿌요뿌요 등의 게임에 많이 활용되는 방법으로서, flood fill이라고도 한다. 자주 등장하는 방법이므로 익혀두면 활용가치가 크다. 이 알고리즘에서는 재귀함수를 이용하여 깊이우선탐색을 ..
git stash git의 요술 책갈피, Stash 기능 소개 git에는 기본적인 커밋 & 푸시 등의 기능 외에도 수많은 기능들이 있습니다. 그중 매우 유용한 요술 책갈피인 Stash에 대한 소개입니다. 사전적 의미 Stash [stӕʃ] 1. (안전한 곳에) 넣어 두다 2. 챙겨 � wit.nts-corp.com
apt-get 명령어/ package 설치, 삭제, 검색 apt-get 명령어 정리 (패키지 설치,제거) https://blog.outsider.ne.kr/346 Ubuntu의 apt-get 명령어 정리 apt-get(Advanced Packaging Tool)은 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 팩키지 관리 명령어 도구입니다. 우분투에.. luckeex.tistory.com
git merge 후 pull 실패 시 해결 방안 - Pull is not possible because you have unmerged files
git merge 후 pull 실패 시 해결 방안 - You have not concluded your merge (MERGE_HEAD exists) 원격지 저장소에 내용과 저의 코드가 겹치는 부분 없이 깔끔하게 병합(merge)이 될 수도 있고, 같은 부분을 고쳤다던지 한다면, 충돌(conflict)이 발생할 수 있다.
[DFS, BFS] 리모컨 백트래킹은 모든 호출이 끝이 나야만 해답을 찾을 수 있기 때문에, 이러한 깊이우선 탐색은 이 문제에서 비효율적이다. 이 방법 대신 너비우선탐색 기법을 이용하여 버튼 누름 횟수를 기준으로 가장 먼저 목표 온도에 도달할 때까지 탐색하고 중단하는 방법으로 설계해 보자. 34도에 도달하게 되면 모든 연산을 중지하고 결과를 얻을 수 있다. 너비우선탐색으로 탐색하여 목표 온도에 도달하는 경우 계산량은 이 탐색 버튼의 수 3과 목표 온도에 도달하는 최적의 횟수 cnt에 비례하므로 계산량을 줄일 수 있다. 순서대로 하면 cnt가 적은 순서대로 차례로 계산이 된다. 목표 온도에 도달하면 가장 적은 cnt로 도달한 것임을 알 수 있다.
vi 편집기 라인 이동
cmake option cmake 예약 변수 cmake에는 자동으로 지정된 변수들이 많은데 이들을 잘 알아야 원하는 빌드 설정을 하고 CMakeLists.txt도 쉽게 작성할 수 있다. 대부분 CMAKE_로 시작하며 CMakeCache.txt를 보면 어떤 변수들이 있는지 볼 수 있다. 그 중 중요한 몇 개만 여기에 설명하는데 아래 내용을 보다가 이 변수들이 나오면 의미를 찾아보자. CMAKE_CURRENT_SOURCE_DIR: 소스 파일들을 찾을 디렉토리 경로로 CMakeLists.txt가 있는 경로가 기본 값으로 들어있다. 다른 경로를 설정할 때 이 변수를 기준으로 상대 경로를 만들면 편하다. CMAKE_INSTALL_PREFIX: make install 할때 빌드 결과물이 복사될 경로로 /usr/local이 기본 값이다. ..
make install INSTALL() 설치 경로 설정 보통 라이브러리를 설치할 때 github에서 라이브러리 소스를 다운로드 받아 make를 하여 라이브러리 파일이 만들어 진 후 make install을 실행하여 라이브러리를 시스템에 설치한다. 설치란 별게 아니고 라이브러리를 다른 곳에서도 쓸 수 있도록 소스 파일(*.cpp)을 제외한 바이너리와 헤더 파일들을 다른 곳으로 복사하는 것을 말한다. 설치할 경로는 위에서 CMAKE_INSTALL_PREFIX 변수로 지정했다. 이 변수를 지정하지 않으면 기본적으로 /usr/local에 설치된다. INSTALL()은 복사할 파일의 종류에 따라 설치 경로에 대한 상대 경로를 지정한다.
CMake Build System / gcc, make, cmake 차이점 리눅스에서는 보통 편집기와 컴파일러가 분리되어있다. 리눅스에서의 통합개발환경이란 VS처럼 자체적인 컴파일러까지 포함하는게 아니고 리눅스에 기본 설치된 컴파일러인 gcc를 잘 가져다 쓰는 코드 편집기를 말한다. IDE 마다 각자의 방식으로 소스코드 목록과 의존성을 관리하는 프로젝트 파일을 만드는데 소프트웨어를 배포할 때 특정 IDE의 프로젝트 파일을 배포하게 되면 그 소프트웨어를 받아서 쓰는 사람도 특정 IDE를 설치해야 하는 번거로움이 있다. 그래서 리눅스에서 공통적으로 사용하는 빌드 시스템이 있는데 바로 make와 cmake다. 그래서 소프트웨어을 개발할 때는 편리한 IDE를 쓰고 배포하거나 남의 소프트웨어를 가져다 쓸 때는 command line에서 리눅스 빌드툴을 써서 직접 빌드를 한다. gcc, ..
cmake 과정 설치가 되었으면 CMakeLists.txt파일을 만듭니다. (참고로 파일명을 주의해야합니다. 특히 대소문자 구분해서 CMakeLists.txt파일입니다.) 위의 소스의 리스트를 빌드하겠습니다.([C++] Make와 Makefile 작성법에서 사용하던 소스들...) Makefile로 작성할 때는 여러 의존성 관계까지 작성을 했는데 cmake의 빌드 파일인 CMakeLists.txt은 엄청 심플하네요. 이걸로 Makefile 파일을 작성하겠습니다. cmake를 실행하면 3개의 파일과 1개의 디렉토리가 생긴 것을 확인할 수 있습니다. 그럼 저 Makefile를 make하기 전에 Makefile의 내용을 살펴보겠습니다. 무언가 엄청난 빌드 파일입니다... 자세히 분석해 보면 이해를 하겠는데... 굳이 이해할 필..
vi 편집기 검색, 하이라이트 설정
vi 편집기 라인 복사 (명령모드에서) 한 줄 복사: yy 한 줄 삭제: dd 붙여넣기 : -p N줄 복사나 삭제는 nyy ndd ex) 3줄 복사 -> 3yy [리눅스 Linux] vi 편집기 블락 범위 복사, 주석 블럭 처리, 범위 삭제, 비주얼 블럭 모드, 복붙 norm [ 리눅스 Linux, 유닉스 Unix 포스팅 링크 모음 ] 안녕하세요~!! 저번 시간 vi 편집기의 아주 기초 사용법에 이어서 오늘 vi편집기에서 자주 사용하게 될 블락 복사 기능에 대해서 간단하고 빠르게~ 다 jhnyang.tistory.com
vi 편집기 라인 출력 [리눅스 유닉스] vi편집기 라인 출력하기, 행번호 출력, 검색 결과 하이라이터 색깔칠하기 (hlsearch 안녕하세요!! 아주아주 간단하게 다뤄볼 정말 초스피드로 끝날 거 같은 정보성 포스팅입니다. vi 편집기에서 행번호, 라인번호 출력하기 라인번호 출력해주는 명령어예요. 라인번호출력 :set num jhnyang.tistory.com
[putty] colour 변경 # putty 배경을 흰색으로 설정 방법 # # putty 배경을 흰색으로 설정 방법 # windows -> colours -> Use system colours www.pigletstory.co.kr PuTTY 설치와 폰트, 배경, 기본 설정하기 PuTTY는 리눅스의 터미널 창으로 접근할 수 있게 해주는 도구다. 설치 작업이 필요 없는 실행 파일이라 어디서든 부담없이 사용할 수 있다. 다운 받는 사이트 https://www.chiark.greenend.org.uk/~sgtatham/pu pimi.tistory.com
count inversion using merge sort Count Inversions in an array | Set 1 (Using Merge Sort) - GeeksforGeeks A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions. www.geeksforgeeks.org people.cs.umass.edu/~sheldon/teaching/mhc/cs312/2013sp/Slides/Slides13%20-%20Counting%20Inve..
int형 최대, 최소 설정 int형의 최댓값은 0x7fffffff(2,147,483,647)이며, 최솟값은 0x80000000(-2,147,483,648)이다. 엄밀하게 최대, 최소를 지정할 때 이 값을 이용하면 되며, 16진법을 이용하면 쉽게 처리할 수 있다. 여기서 주의할 점은 위 값들을 설정한 후 값을 증가시키거나 감소시키면 오버플로 (overflow)로 인하여 답이 잘못될 수 있다. 예를 들어 다음 명령을 보자. 위 예의 경우에 max값이 최댓값이었는데, 여기서 1을 증가하면 오버플로가 발생하여 max값은 음수가 된다. 따라서 이런 점을 방지하기 위하여 적어도 2배 정도라 하더라도 오버플로가 발생하지 않도록 처리하는 경우가 많다. 이럴 때는 주로 최댓값을 987654321 등의 자릿수도 쉽게 알 수 있고 2배를 하더라도 정..
[DFS] n-Queen 같은 대각선 대각선은 기울기가 증가하는 대각선 부분과 기울기가 감소하는 부분의 2가지 대각선이 존재한다. 이 2가지 대각선에 대해서도 체크배열을 만들어서 활용할 수 있다. 기울기가 증가하는 대각선부터 살펴보면 다음과 같다. 위 대각선 상에 있는 칸의 특징을 보면 행+열의 값이 일정하다. n이 4일 경우 행+열의 최소값은 2이고 최댓값은 8이다. 따라서 기울기가 증가하는 대각선은 체크배열의 행+열 위치에 체크하여 기울기가 증가하는 대각선 상에 퀸을 놓을 수 있는지 없는지를 쉽게 확인할 수 있다. 기울기가 감소하는 대각선도 아래와 같은 특징이 있다. 기울기가 감소하는 대각선 부분은 행과 열의 차가 일정하다. 범위는 n이 4일 경우 –3에서 3까지의 값을 지닌다. 음의 값을 양의 값으로 보정하기 위해 n을 더..
update-alternatives 명령어 alternatives (cf, update-alternatives)는 심볼릭 링크를 생성, 제거, 관리, 조회할 수 있는 기능을 제공하는 GNU 라이센스의 커맨드라인 툴. 즉, 심볼릭 링크를 통해서 특정 커맨드에 대해 디폴트 버전 혹은 경로를 정의할 수 있다. 다만, Debian 계열의 리눅스에는 update-alternatives 명령어만 제공 (perl 언어에 대한 의존성을 제거하기 위해 기존의 alternatives 스크립트가 재구현이 되었다고 함)되고, Redhat 계열의 리눅스 명령과 제공하는 기능에는 다소 차이가 있지만, 이번에는 공통적인 기능과 옵션에 대해서만 정리하기로 하였다. 추가로, 예제들은 Redhat 기준으로 정리하였다. 심볼릭 링크 생성하기 (–install) --install ..