본문 바로가기

반응형

개발자/C++(Linux, Window)

Intel MKL 사용하여 행렬곱 계산 속도 개선하기(퍼옴) 행렬곱을 계산할 때 Intel MKL을 사용하면 계산 속도가 얼마나 빨라지는지 알아보기 위하여 여러 가지 방법으로 실험을 해 보았습니다. 실험 환경 시스템 프로세서: Intel Core i7-8550U CPU 메모리: 16.0GB 운영체제: Windows 10 (64-bit) 전원 공급: AC adapter 라이브러리 Intel MKL 2019 Update 5 Eigen 3.3.7 컴파일러 MSVC++ Version 2019 (16.0) 소스 코드 완전한 소스 코드 중에서 설명을 위해 필요한 부분만 아래에 제시합니다. 방법-1. C 언어 3중 루프 사용 double *A, *B, *C; int m, n, p, i, j, k; double sum; m = 2000, p = 200, n = 1000; A =.. 더보기
헤더 가드(Header guard) 헤더 가드(header guard)라는 메커니즘을 통해 중복 정의를 막을 수 있다. 같은 변수와 함수를 한 번더 정의하는것. 이 문제는 헤더가드로 해결할 수 있다. 헤더 가드는 조건부 컴파일 지시자를 사용한다. #ifndef SOME_UNIQUE_NAME_HERE #define SOME_UNIQUE_NAME_HERE // 선언과 정의 #endif 위 헤더 파일이 포함(include)되면 SOME_UNIQUE_NAME_HERE가 정의되었는지 확인한다. 헤더 파일을 처음 include하면 SSOME_UNIQUE_NAME_HERE는 정의되어 있지 않다. 그러므로 SOME_UNIQUE_NAME_HERE를 정의하고 헤더 파일의 내용을 include한다. 그러나 이전에 헤더 파일을 include 했다면 SOME_U.. 더보기
Dynamic Array, L-value R-value 동적배열(Dynamic Array) 이란? 동적 배열이란 크기가 고정되지 않은 배열을 의미한다. (이름 그대로 단순하다!) 보통 우리가 흔히 말하는 배열은 동적(Dynamic)의 반대인 정적(Static) 즉, 정적배열을 의미한다. 정적배열은 크기가 고정되어 있어 데이터를 크기 만큼만 저장할 수 있다. 대표적으로 C++ 의 vector 나 자바의의 ArrayList 등이 있다. push_back -> copy , move(C+11) emplace_back -> copy 3 move 2 construct 1 순으로 빠를 것이다. construct 가 가장 빠름 Efficient함 C++ 98 -> C++ 17으로 바로 migration 해라. C++ 98 계속 쓰고 있는 기업은 이직을 해야한다. Lvalu.. 더보기
Vector Container 메모리 관리 관련 vector 컨테이너는 C++에서 자주 사용되는 컨테이너로 GeeksforGeeks에서는 다음과 같이 정의되어 있습니다 : 벡터는 요소가 삽입되거나 삭제 될 때 자동으로 크기를 조정할 수 있는 동적 배열과 동일하며 컨테이너에서 자동으로 처리합니다. 벡터 요소는 반복자를 사용하여 액세스하고 통과 할 수 있도록 인접한 저장소에 저장됩니다. 벡터에서는 데이터가 끝에 삽입됩니다. 때때로 배열을 확장 할 필요가있을 수 있기 때문에 마지막에 삽입할 때 시간이 달라질 수 있습니다(differential time). 마지막 요소를 제거하면 크기 조정(resizing)이 발생하지 않으므로 상수 시간이 소요됩니다(또는 상수 시간 복잡도를 가집니다). 시작 또는 중간에 삽입하거나 및 제거하는 것은 선형 시간(linear i.. 더보기