본문 바로가기

Dev15

Template Meta Programming으로 matrix 라이브러리 만들기 (3) 이전 포스팅에서는 Expression tree를 위한 MatrixExpr, 기본적인 행렬을 표현하는 Matrix, 행렬 간 덧셈을 표현하는 MatrixSum을 구현 후 불필요한 복사가 없는 행렬 덧셈을 구현하였다. Expression tree를 만드는 과정과 이를 evaluation 하는 과정을 분리할 수 있었고, 이를 통해 실제 값이 필요한 시점에 계산을 할 수 있다 (lazy evaluation). 이와 비슷한 방법으로 행렬 간 뺄셈, element-wise 한 곱셈 (아다마르 곱) 등을 구현할 수 있을 것이다. 하지만 lazy evaluation은 모든 경우에 대해 항상 효율적이지 못하다. 이번 포스팅에서는 그 대표적인 예 중 하나인 행렬간 곱셈을 구현하면서 자세히 알아보자. 1. MatrixMul.. 2022. 7. 30.
오픈소스 프로젝트 홍보 및 그 후기 서론 공부가 하기 싫을 때 괜히 책상 정리부터 하는 것처럼, 연구실에 있을 때 일 하기가 싫어서 컴퓨터 꾸미기에 관심이 있던 적이 있다. 그때 눈여겨봤던 프로젝트 중 하나가 himawaripy 였는데, 설정하기도 귀찮고 무엇보다 윈도우 환경에서 돌아가지 않아서 접었던 기억이 있다. 그 후 몇 달이 지나 지인 중 한 명이 himawaripy에 star를 누른 걸 보고 잠깐 이야기를 했는데, "갑자기 우리나라에는 위성이 없나?" 하는 생각이 들었고, 그때 (2021년)부터 이 프로젝트를 진행하기 시작했다. 우리나라 인공위성 천리안 2A호에서 오는 사진을 컴퓨터 배경화면으로 바꾸는 데스크탑 앱이고, 이름은 천리안 월페이퍼. GitHub - pjessesco/ChollianWallPaper: 🌎 Real tim.. 2022. 7. 26.
Template Meta Programming으로 matrix 라이브러리 만들기 (2) 이전 포스팅에서는 TMP를 적용하면 좋은 점에 대해 알아보았다. 이제 실제 구현한 코드를 보며 행렬의 덧셈까지 구현해보자. 1. MatrixExpr 클래스 Expression template의 아이디어는 모든 행렬과 식을 각각 고유한 타입으로 나타내는 것이다. Expression을 나타낼 클래스를 이렇게 구현했다. template struct MatrixExpr{ inline auto elem(Index r, Index c) const{ return static_cast(*this).elem(r, c); } inline auto& elem(Index r, Index c) { return static_cast(*this).elem(r, c); } static constexpr Index row = E::r.. 2022. 7. 17.
Template Meta Programming으로 matrix 라이브러리 만들기 (1) 최근 몇 주 동안 C++로 개인 matrix library를 만드는 개인 프로젝트를 진행하였다. 프로젝트의 목표는, C++ 17/20 feature들 써보기 템플릿 공부 Unit test, documentation 작성 다음 개인 프로젝트에 쓸 수 있을 정도까지 만들기 정도이고, 이 포스트를 작성하는 시점에서 계획했던 목표를 얼추 이룬 것 같아서, 프로젝트를 진행하며 느낀 점이나 배운 것을 기록하는 겸, 또 정보 공유 목적으로 포스트를 작성한다. https://github.com/pjessesco/peanut GitHub - pjessesco/peanut: Simple header-only C++20 matrix library using expression templates Simple header-on.. 2022. 7. 16.