Dev/C++3 Template Meta Programming으로 matrix 라이브러리 만들기 (3) 이전 포스팅에서는 Expression tree를 위한 MatrixExpr, 기본적인 행렬을 표현하는 Matrix, 행렬 간 덧셈을 표현하는 MatrixSum을 구현 후 불필요한 복사가 없는 행렬 덧셈을 구현하였다. Expression tree를 만드는 과정과 이를 evaluation 하는 과정을 분리할 수 있었고, 이를 통해 실제 값이 필요한 시점에 계산을 할 수 있다 (lazy evaluation). 이와 비슷한 방법으로 행렬 간 뺄셈, element-wise 한 곱셈 (아다마르 곱) 등을 구현할 수 있을 것이다. 하지만 lazy evaluation은 모든 경우에 대해 항상 효율적이지 못하다. 이번 포스팅에서는 그 대표적인 예 중 하나인 행렬간 곱셈을 구현하면서 자세히 알아보자. 1. MatrixMul.. 2022. 7. 30. 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. 이전 1 다음