๐ Row-major, Column-major, ๊ทธ๋ฆฌ๊ณ ์ปดํ์ผ๋ฌ ์ต์ ํ
Compiler ๊ฐ ํด์ฃผ๋ ๊ฒ๊ณผ ์ํด์ฃผ๋ ๊ฒ์ ๋ํด ์์๋ณด์
- ์ปดํ์ผ๋ฌ (์ ChatGPT)๋ ๋์ ๋๋ฃ๋ค.
๊ฐ์
- ์ผ๋ฐ์ ์ธ ์ฝ๋ฉ ํ ๊ฐ์ ์ด์ผ๊ธฐ๋ ์ธํฐ๋ท์ ์ด๋ฏธ ๋ง์ผ๋ฏ๋ก ์๋ ์ ์์ฐ๋ ค๊ณ ํ์ง๋ง โฆ
- ๋๋ฆ๋๋ก ์คํํด๋ณธ ๋ฐ๊ฐ ์์ด ๊ธฐ๋ก ์ฐจ์์์ ์ ๋ฆฌํด๋๋ ค๊ณ ํ๋ค.
๋ฌธ์ ์ํฉ
- Matrix ๊ฐ ์์ ๋ ์ต์ํ ์๋ ค์ง ๊ฟํ์ด
- Matrix ์ ์ฒด elmenet ๋ค์ ์ํํ๋ ค๋ฉด for loop ๋๋ฒ์ ๋์์ผ ํ๋๋ฐ,
- ์ด ๋ row-major ๊ฐ column-major ๋ณด๋ค ์ฑ๋ฅ์ด ์ข๋ค๋ ๊ฒ์ด๋ค.
๋ฐฐ๊ฒฝ ์ง์
- ์ ๊ทธ๋ฐ์ง๋ ๊ด๋ จ ์๋ฃ๋ ๋ง์ผ๋ฏ๋ก ํค์๋๋ง ์ ๋ฆฌํ๊ณ ๋์ด๊ฐ๋ค
์์ธํ ์ค๋ช
์ ์๋ตํ๋ค .
- ํค์๋:
Cache Locality
, Cache Line
, Cache Miss
- ๊ฒฐ๊ตญ Cache Cache Cache! ์ด๊ฒ matrix ์ํ ์์ ์ ๊ทธ์น๋ฉด ์๋๊ณ , Cache Locality ๋ผ๋ ๊ฐ๋
๊ณผ HW (
CPU
์ Memory
๊ตฌ์กฐ)์ ๋ํด ์ ์ฒด์ ์ผ๋ก ์ดํดํ๊ณ ๋์ด๊ฐ์ผ ์ค์ ๋ก ๊ณต๋ถ๋ฅผ ํ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๊ฒ ๋ค.
- ์ถ์ฒ ์๋ฃ
์ค์ต
Hands-on Experience
- ๋ ๊ฐ์กฐํ๋ ๊ฒ: ๊ทธ๋ฅ ์ฝ์ด๋ณด๊ณ ๊ทธ๋ฆผ๋ง ๋ณด๋ ๊ฒ๊ณผ ์ง์ from-scratch๋ก ๊ตฌํํด์ ์๊ธฐ ๋ฐ์ดํฐ์์ ์คํํด์ ์ง์ run script ์ณ์ ์ง์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ๊ฒ์ ์ค์ต์ ์
์ฅ์์ ์ฒ์ง ์ฐจ์ด ์ด๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ์ง์ ํด๋ณด์.
๊ตฌํ
- ์ฝ๋
- ์ค๋ช
- ๋ค์๊ณผ ๊ฐ์ด ์๊ฐ์ ์ธก์ ํด์ฃผ๋ ํฉํ ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ
- ํฉํ ๋ฆฌํด๋์ค์ ๋ค์๊ณผ ๊ฐ์ ์๋ก๋ค๋ฅธ 3์ข
์ ๋๋คํจ์๋จธ์ ๋ค์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
์คํ
- ์ค์ตํ๊ฒฝ
- cpp web compiler ๋ผ๊ณ ์น๋ฉด ๊ฐ๋จํ๊ฒ ์ค์ตํด๋ณผ ์ ์๋ ๊ณณ๋ค์ด ๋ง์ด ๋์จ๋ค.
- ๋๋ onlinegdb ์ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ๊ธฐ ํด์ ์คํํด๋ณด์๋ค.
- Tip
- O3 ๋ก build ํ๋ ค๋ฉด,
- ์ง์ ๋ฆฌ๋
์ค ๋จธ์ ์์ ์คํํ๋ค๋ฉด
g++ -std=c++17 -O3 main.cpp -o main
์ ๊ฐ์ด ๋น๋ํด์ฃผ๋ฉด ๋๊ณ ,
- ์์ onlinegdb ์ฌ์ดํธ์์ ์ ์ฉํ๋ ค๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ ๋ค์ OK๋๋ฅด๊ณ ์คํ ํด์ฃผ๋ฉด ๋๋ค.
๊ฒฐ๊ณผ
- matrix dimension SIZE๋ฅผ ๋ฌ๋ฆฌํด๊ฐ๋ฉฐ ์คํํ์๋ค.
- ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์๋ค (๊ฐ SIZE์ ๋ํด 1ํ์ฉ๋ง ์ธก์ ํ์๋ค).
- ์ฌ๊ธฐ์ ๊ฐ๋ก์ถ์ Size ๋ ํ ์ถ์ dimension์ ์๋ฏธํ๋ค. ์ฆ, SIZE=10000 ์ด๋ฉด, 10000 by 10000 matrix ๋ฅผ ์ํํ๋ ๊ฒ์ด๋ค.
- ์ ablation study์ ์๋
- Question 1: row-major ์ column major ์ from-scratch ๊ตฌํ์ฒด ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ์๋ค. (see
ํ๋์ค์ <=> ๋นจ๊ฐ์ค์
)
- Question 2: row-major์ from-scratch ๊ตฌํ์ฒด์ row-major ์ std::algorithmic(i.e., functional)ํ ๊ตฌํ์ฒด ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ์๋ค. (see
ํ๋์ค์ <=> ์ด๋ก์ค์
)
- Question 3: compiler optimization option (-O3) ์ ์๋ฃ๊ณ ๋ฃ๊ณ ์ฐจ์ด๋ฅผ ๋น๊ตํ์๋ค (see
์ค์ <=> ์ ์
)
๊ฒฐ๊ณผ ํด์
- Answer of Question 1:
- ๋น์ฐํ ์ตํ ์๊ณ ์๋๋๋ก row-major ๊ฐ ํจ์ฌ ๋น ๋ฅด๋ค (see
ํ๋์ค์ <=> ๋นจ๊ฐ์ค์
).
- Answer of Question 2:
- std::algorithm์ ์ต๋ํ ํ์ฉํ๋ฉด functional ํ ๋์์ธ์ด ์์ฐ์ค๋ฝ๊ฒ ๊ฐ์ ๋จ์ผ๋ก์จ ์ ์ง๋ณด์์ฑ์ด ์ข์์ง๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ต๋ํ std::algorithm์ ํ์ฉํ๊ณ ์ถ๋ค.
- ํ์ง๋ง no optimization ํ๊ฒฝ์์๋ raw ํ double nested loops ๋ณด๋ค ๋๋ฆฐ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ์๋ค (see
ํ๋์ค์ <=> ์ด๋ก์ค์
).
- ์ฌ์ค n์ด ์์ ๋ (e.g.,
~
SIZE=10000 => 10000*10000 ํ์ ์ํ) ๋ ์ฐจ์ด๊ฐ ํฌ์ง ์๋ค.
- Answer of Question 3:
- -O3 ์ต์
์ ๋ฃ์ด์ฃผ๋ std::algorith์ ํ์ฉํ functionalํ code ๊ฐ (์ ์ด๋ ์ด ์์ ์ ์ด ์คํ์์๋) raw ํ nested for loop ๋ณด๋ค (์กฐ๊ธ์ด๋๋ง) ๋ ๋นจ๋๋ค.
๊ฒฐ๋ก
Lessons
- ์์ ๊ฒฐ๋ก ์ผ๋ก๋ถํฐ ๋ค์๊ณผ ๊ฐ์ ๋ ์จ์ ๋์ถํ ์ ์๊ฒ ๋ค.
- ๊ดํ ์ฑ๋ฅ๊ณ ๋ฏผ
์์งํ์ง ๋ง๊ณ std::algorithm
์ functional
ํ interface๋ฅผ ์ต๋ํ ํ์ฉํ์.
- ์ฝ๋์ readability, maintainability, and testability ๋ฅผ ํ๋ณดํ๋ ๊ฒ์ด ๋์ฑ ์ค์ํ๋ค.
- ๊ทธ๋ฐ ๋ค์, ์ต์ ํ๋ฅผ ์ํด์๋ O3 ๋ฑ ์ปดํ์ผ๋ฌ๋ฅผ ๋ฏฟ์ (์ปดํ์ผ๋ฌ๋ ๋์ ๋๋ฃ! ๋ฒ๊ทธ๋ ์ฐพ์์ฃผ๊ณ ์ฑ๋ฅ๋ ์ฌ๋ ค์ค๋ค).
- ํด๋จผ๋ฆฌ๋๋ธ ์ฝ๋์ ๊ตฌํ์ด ์ด๋ป๊ณ ์ ๋ป๊ณ ์ ๋ํ ํ ์๋ฅผ ์๋ฌด๋ฆฌ ํด๋ ์ค์ ๊ตฌ๋๊ณผ ๋ค๋ฅผ ์ ์๋ค. ์ฆ, ์ฝ๋์ ์ฑ๋ฅ์ ๊ดํด ์ด์ผ๊ธฐ ํ๋ ค๋ฉด, ์ปดํ์ผ๋ฌ ์ต์ ํ ๊น์ง ์ ์ฉ๋ ๊ฒ์ ๋ํด์์๋ง ๋
ผ์ํด์ผ ์๋ฏธ๊ฐ ์๋ค.
- ๊ทธ๋ฐ๋ฐ ์ ์ด์ ์ค๊ณ ์์ฒด๊ฐ ์๋ชป๋(==column-major)๋ฉด ์๋ฌด๋ฆฌ ์ปดํ์ผ๋ฌ๋ฅผ ๋ฏฟ์ด๋ ์ ๋๋ ๊ฒ์ ์ ๋๋ ๊ฒ์ด๋ค.
์๋ผ ๋์๊ฐ
- ์๋ฅผ ๋ค์ด, ์์ ๊ฒฐ๊ณผ ๊ทธ๋ฆผ์์, O3 optimization์ ์ ์ฉํ ๋นจ๊ฐ์ ์ ์ opt ๋ฅผ ์ ์ฉํ์ง ์์ ์ด๋ก์ค์ ๊ฒฐ๊ณผ๋ณด๋ค ์ฌ์ ํ ๋งค์ฐ ๋๋ ธ๋ค.
- ๋ฐ๋ผ์ HW๋ฅผ ์ดํดํ๊ณ ๊ทผ์์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฐ๋
์ ์์ฑํ๋ ๊ฒ์ ์ฌ์ ํ ํ๋ก๊ทธ๋๋จธ์ ๋ชซ์ด๋ผ๊ณ ํ ์ ์๊ฒ ๋ค.
- HW์ ๋ํ ์ดํด๋ ๋ง์ ๊ฒ๋ค์ด ์ถ์ํ ๋๊ณ ํ๋ก๊ทธ๋๋ฐ์ด ์
๋ฌธํ๊ธฐ ์ ์ ๋ ์ฌ์์ง๋ ์์ฆ์๋ ์ฌ์ ํ ์ค์ํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ธก์ ํ์!
- ์ธก์ ํ ๊ฒ์ผ๋ก ๋
ผ์ํด์ผ ํ๋ค.
- ps.
- ๋ฒค์น๋งํฌ๋ ์ฌ๋ฌ๋ฒ ๋๋ ค๋ด์ผ ํ๋๋ฐ ์ด ํฌ์คํ
์์๋ ํธ์์ 1๋ฒ๋ง ์ํํ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์์๊ฐ๋ ๋จธ์ ๋ง๋ค๋ ๋ค๋ฅผ ์ ์๋ค. ๊ฒฝํฅ๋ง ์ฐธ๊ณ ๋ฅผ ํ์. ๊ฒ๋ค๊ฐ ์์์๋ onlinegdb๋ผ๋ ์ฌ์ดํธ์์ ์คํํ์๋๋ฐ, ์์์ ๊ฒฝ์์ด ์๋์ง..? ๋ค๋ฅธ ์๊ฐ์ ๊ฐ์ ์ฝ๋๋ ์คํํ๋ ์์ฒญ ๋ ๋๋ฆด ๋๋ ์์๋ค.
- ์์ matrix์์ ๊ฐ์ ๋ฌธ์ ์์๋ ์ ์ด์ ์ฉ์ผ๋ก ๋ ์๊ฐ๋ณด๋ค๋ vectorization and parallel algorithms์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ค.
- ๊ทธ๋์ ๋ ChatGPT(4) ์๊ฒ ์์ ์ฝ๋ ์ฃผ์์ ์๋ ๊ฒฐ๊ณผ ์๋จธ๋ฆฌ ๋ฅผ ๋ณต์ฌํด์ ์ฃผ๊ณ ํ์ด์ฌ์ผ๋ก ๋น๊ต ํ๋กฏ ๊ทธ๋ ค์ค ๋ผ๊ณ ํ๊ณ ์๊น ์ ๋๋ง ์ง์ ํด์คฌ๋๋ ์์ ๊ฒฐ๊ณผ plot์ ๊ทธ๋ฆฌ๋ ํ์ด์ฌ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์๋ค!! ๋ถ๊ณผ ๋ช ๊ฐ์๋ง์ ์ด์ ์ ๊ธฐํ์ง์๊ณ ์ด์ ๋๋ ์ด์ ๋น์ฐํ ํด์ฃผ๊ฒ ์ง? ๋ผ๋ ๋ง์์ผ๋ก ์ ์ํด๊ฐ๊ณ ์๋ ๋ฏํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด์ค๋ค!