본문 바로가기

프로그래밍 언어/C++10

행렬 곱셈 최적화 2편 안녕하세요 조엘입니다! 프로젝트로 진행한 행렬곱셈 최적화에 대한 포스팅을 진행하도록 하겠습니다. 소스코드는 https://github.com/joelonsw/Matrix-Multiplication-Multithreading에서 확인하실 수 있습니다! DNS알고리즘을 통해 병렬처리를 진행했지만, multi 함수는 KIJ 방식 그대로여서 LLC miss rate가 개선되지 못했습니다. 이를 개선하고자 Tiling 방법을 도입했습니다. 매트릭스의 메모리에 접근할 때, 왼쪽과 같이 탐색하게 되면, 매트릭스의 사이즈가 캐시의 사이즈보다 큰 경우, 매트릭스 탐색 후 다시 매트릭스의 첫요소에 접근할 때 캐시에 남아있지 않게 됩니다. 이를 방지하고자 Tiling 방법을 도입했는데, 이는 캐시에 남아있을 때 해당 배열에.. 2020. 7. 23.
행렬 곱셈 최적화 1편 안녕하세요 조엘입니다! 프로젝트로 진행한 행렬곱셈 최적화에 대한 포스팅을 진행하도록 하겠습니다. 소스코드는 https://github.com/joelonsw/Matrix-Multiplication-Multithreading에서 확인하실 수 있습니다! 저는 총 4가지 단계를 거쳐 최적화를 진행했습니다. 1.인덱싱 순서를 바꾸어 캐시 hit ratio을 증가시켰습니다. 2.멀티 쓰레딩을 통해 병렬처리를 진행하였습니다. 3.타일링 기법을 통해 캐시 hit ratio를 증가시켰습니다. 4.SIMD를 통해 한번에 많은 데이터를 처리할 수 있게 하였습니다. 실험은 다음과 같은 환경에서 진행했습니다. 모든 소스코드는 C++로 작성을 했고, g++ version 7.5.0을 사용했습니다. 컴파일 옵션은 최적화 옵션을 .. 2020. 7. 23.
C++ 5단원 복습! (2편) 안녕하세요. 파피몬입니다. 이 복습 내용은 최호성 선생님의 "이것이 C++이다"를 공부하고 작성하였습니다. 아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!! 5단원에서는 연산자 다중정의에 대해서 배워봅니다. 1편, 2편으로 나누어져 있습니다. Chapter 5. 연산자 다중정의 6. 배열 연산자를 다루기 전, const가 지정하는 대상이 무엇인지 정확히 인지할 필요가 있다. ** http://egloos.zum.com/chideout/v/4158795 정리가 잘 되어 있는 이 포스팅을 통해 공부하였다. ** const class_name operator+( const class_name&) const { } 라는 메소드가 있다고 가정하자... 2020. 3. 22.
C++ 5단원 복습! (1편) 안녕하세요. 파피몬입니다. 이 복습 내용은 최호성 선생님의 "이것이 C++이다"를 공부하고 작성하였습니다. 아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!! 5단원에서는 연산자 다중정의에 대해서 배워봅니다. 1편, 2편으로 나누어져 있습니다. Chapter 5. 연산자 다중정의 1. C++에서는 연산자의 재정의 / 다중정의를 지원한다. 연산자 다중정의로 사용자는 직관적인 class 사용이 가능해진다. 그렇기에! 기본 연산은 제작자가 아주 잘, 실패 없이 만들어 놔야한다! ** 논리 연산자 ( ! , && , || 등 ) 는 절대 다중 정의하면 안 된다! 심각한 논리적 오류로 이어짐 ** 산술 연산자, 대입 연산자, 관계 연산자(1편), 배.. 2020. 3. 22.
C++ 4단원 복습! (2편) 안녕하세요. 파피몬입니다. 이 복습 내용은 최호성 선생님의 "이것이 C++이다"를 공부하고 작성하였습니다. 아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!! 4단원에서는 복사 생성자와 임시 객체에 대해서 배워봅니다. 1편, 2편으로 나누어져 있습니다. Chapter 4. 복사 생성자와 임시 객체 이동 생성자를 공부할 차례입니다. 공부에 앞서 임시 객체와 r-value 참조에 대해 알고 시작해야 합니다. 7. 임시 객체를 알아보기 전 간단한 C언어 코드를 살펴보자. #include int TestFunc() { int nData = 10; return nData; } int main() { int nResult = TestFunc(); re.. 2020. 3. 15.
C++ 4단원 복습! (1편) 안녕하세요. 파피몬입니다. 이 복습 내용은 최호성 선생님의 "이것이 C++이다"를 공부하고 작성하였습니다. 아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!! 4단원에서는 복사 생성자와 임시 객체에 대해서 배워봅니다. 1편, 2편으로 나누어져 있습니다. Chapter 4. 복사 생성자와 임시 객체 1. C++에서 다루는 4가지 생성자를 살펴봅니다. ** 디폴트 생성자 - Chapter 3에서 다루었습니다. ** 복사 생성자 - 처음 초기화한 객체에 기존 객체를 복사시킬 경우 호출됩니다. ** 변환 생성자 - 매개 변수가 하나인 생성자입니다. 임시객체를 생성할 수 있어 묵시적 형변환을 차단해야 합니다. ** 이동 생성자 - r-value가 임.. 2020. 3. 14.
C++ 3단원 복습! (2편) 안녕하세요. 파피몬입니다. 이 복습 내용은 최호성 선생님의 "이것이 C++이다"를 공부하고 작성하였습니다. 아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!! 3단원에서는 클래스에 대해서 배워봅니다. 1편, 2편으로 나누어져 있습니다. Chapter 3. 클래스 5. 객체를 동적 할당할 때에는 new/delete 연산자를 써주도록 합니다. C언어의 malloc()/free()함수는 객체를 위한 메모리만을 할당해 줄 뿐, 객체가 사용할 메모리는 될 수 없습니다. (C언어에서는 객체의 개념이 없어서 그런가....) //클래스 CTest가 정의되어 있다고 가정 //C언어 스타일 //그저 heap영역에서 CTest객체의 크기만큼의 메모리를 할당받아.. 2020. 3. 12.
C++ 3단원 복습! (1편) 안녕하세요. 파피몬입니다. 이 복습 내용은 최호성 선생님의 "이것이 C++이다"를 공부하고 작성하였습니다. 아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!! 3단원에서는 클래스에 대해서 배워봅니다. 1편, 2편으로 나누어져 있습니다. Chapter 3. 클래스 1. 절차지향의 C언어에서의 자료구조와 그 자료구조를 사용하는 코드(함수)는 서로 의존성이 있습니다. 자료구조가 바뀐다면 함수도 바뀌어야 하죠. 여기서 문제는 자료구조의 사용자가 자료구조를 만든 제작자만큼의 지식을 필요로 한다는 것입니다. 이를 탈피하고자 제작자에게 더 큰 임무를 줍니다. 사용자 친화적으로 자료구조를 구현하는 것이지요. 단계별 예시를 통해 점점 사용자 친화적인 코드를.. 2020. 3. 12.
C++ 2단원 복습! 안녕하세요. 파피몬입니다. 이 복습 내용은 최호성 선생님의 "이것이 C++이다"를 공부하고 작성하였습니다. 아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!! 2단원에서는 1단원에 이어서 C언어와 C++의 차이점에 주안을 두고 공부하였습니다. Chapter 2. C++ 함수와 네임스페이스 1. C++에서는 C언어와 달리 다형성(함수를 여러형태로 구현하고, 동시에 존재하는 것)을 지원한다. 고로 이름이 같지만 매개변수가 다른 함수를 정의할 수 있다. 이를 다중 정의(overloading)이라고 한다. 2. C++에서는 디폴트 매개변수를 지원한다. 함수 원형의 선언부에 디폴트 값을 기술한다. 반드시 오른쪽 매개변수부터 기술해야 하며, 중간에 빼.. 2020. 3. 11.
반응형