Compile Optimization
ํ๋ถ ์กธ์ ์ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฉ ์ฐ๊ตฌ์ค์ ์ปจํํ์ฌ ์กธ์ ๊ณผ์ /์ฐ๊ตฌ๋ฅผ ์งํํ๊ณ ์์ต๋๋ค. ๋ง์ง๋ง ํ๊ธฐ์ ๋ฃ๋ ์ ์ผํ ์ปด๊ณต๊ณผ ์์ ์ด๊ณ , C++ ์ฝ๋๋ฅผ ์์ฒญ๋๊ฒ ๋ง์ด ๋ณผ ์ ์์ด์ ์ฌ๋ฏธ๋ ์์ต๋๋ค ใ ใ ๋ฌด์ฌํ ์กธ์ ํ ์ ์๊ธธ!! ์์ข์ฃ!
Compile Optimization
C++ ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํ ๋, ์ปดํ์ผ๋ฌ๊ฐ ์คํ ์๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ ๋ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ์๋ ๋๋ ์๋์ผ๋ก ์ ์ฉํ๋ ์ต์ ํ ๊ธฐ๋ฒ๋ค์ ๋งํฉ๋๋ค.
๋ณดํต ๋ค์๊ณผ ๊ฐ์ ์ปดํ์ผ๋ฌ ์ต์ ์ ํตํด ์ ์ฉ๋ฉ๋๋ค: โข -O0: ์ต์ ํ ์์ (๋๋ฒ๊น ์ ์ฉ์ด) โข -O1, -O2, -O3: ์ ์ ๋ ๊ณต๊ฒฉ์ ์ธ ์ต์ ํ โข -Os: ์ฝ๋ ํฌ๊ธฐ ์ต์ ํ โข -Ofast: ํ์ค์ ๋ฌด์ํ๊ณ ์ฑ๋ฅ์ ์ง์ค โข -flto: Link-Time Optimization
โธป
๐ ๏ธ ์ด๋ค ๊ฒ๋ค์ ํ์ ๋ โ์ต์ ํ๋ฅผ ํ๋คโ๊ณ ๋ณผ ์ ์๋?
- ์ปดํ์ผ๋ฌ ์ต์ ํ ํ๋๊ทธ ์กฐ์ โข -O2์์ -O3, ํน์ -Ofast๋ก ๋ณ๊ฒฝ โข -flto (Link Time Optimization) ํ์ฑํ โข -march=native, -mtune=native ์ฌ์ฉ์ผ๋ก ๋์ CPU์ ๋ง์ถ ์ฝ๋ ์์ฑ
โก๏ธ ์ฝ๋ ๋ณ๊ฒฝ ์์ด ์ฑ๋ฅ ํฅ์ ๊ฐ๋ฅ
โธป
- ์ฝ๋ ์์ค์ ๋ฆฌํฉํ ๋ง (์ปดํ์ผ๋ฌ ์นํ์ ์ฝ๋ ์์ฑ)
๋ถํ์ํ ๋ณต์ฌ ์ ๊ฑฐ โข std::move, std::forward ์ ๊ทน ์ฌ์ฉ โข RVO(Return Value Optimization) ๊ณ ๋ ค
์ธ๋ผ์ธ ๊ฐ๋ฅ์ฑ ํฅ์ โข ์งง๊ณ ์์ฃผ ํธ์ถ๋๋ ํจ์๋ inline ๋๋ ํ ํ๋ฆฟ์ผ๋ก ์์ฑ
๋ฃจํ ์ต์ ํ โข ๋ฃจํ ๋ถ๋ณ ์กฐ๊ฑด ์ ๊ฑฐ โข ๋ฃจํ ์ธ๋กค๋ง ๊ฐ๋ฅํ๋๋ก ๊ตฌ์กฐ ์กฐ์
โก๏ธ ์ปดํ์ผ๋ฌ๊ฐ ๋ ์ ์ต์ ํํ ์ ์๋๋ก ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌ
โธป
- ํ ํ๋ฆฟ๊ณผ constexpr์ ํ์ฉ โข constexpr ํจ์๋ก ์ปดํ์ผ ํ์ ๊ณ์ฐ ์ ๋ โข ํ ํ๋ฆฟ ๋ฉํํ๋ก๊ทธ๋๋ฐ์ ํตํด ๋ฐํ์ ๊ณ์ฐ ์ ๊ฑฐ
โก๏ธ ์คํ ์์ ์ ๋ถ๋ด์ ์ค์ด๊ณ ์ปดํ์ผ ํ์์ผ๋ก ์ด์
โธป
- ๋ง์ปค ์ต์ ํ โข LTO ์ ์ฉ (-flto) โข ์ ์ ๋งํฌ vs ๋์ ๋งํฌ ์ ๋ต ์กฐ์
โก๏ธ ์ต์ข ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ ๊ฐ์ ๋๋ ์๋ ํฅ์
โธป
๐ ์ด๋ค ์ธก๋ฉด์์ ๊ฐ์ ๋๋ฉด โ์ฑ๊ณต์ ์ธ ์ต์ ํโ๋ผ๊ณ ํ ์ ์์๊น? 1. ์คํ ์๊ฐ ๋จ์ถ โข ํน์ ์ฐ์ฐ์ด๋ ์ ์ฒด ํ๋ก๊ทธ๋จ์ ์คํ ์๊ฐ์ด ๊ฐ์ 2. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ ๊ฐ โข ํ ๋น ํฌ๊ธฐ ์ค์ด๊ธฐ, ์ค๋ณต ์ ๊ฑฐ, ์บ์ ์ฌ์ฉ ์ต์ ํ 3. ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ ๊ฐ์ โข ํนํ ์๋ฒ ๋๋ ํ๊ฒฝ์ด๋ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ์ค์ 4. ์ปดํ์ผ ์๊ฐ ๋จ์ถ โข ํ ํ๋ฆฟ ์ธ์คํด์ค ์ ์ค์ด๊ธฐ, ํค๋ ํฌํจ ์ต์ํ ๋ฑ 5. ๋๋ฒ๊น ์ฉ์ด์ฑ ์ ์ง โข ์ต์ ํ ์์ค์ ์กฐ์ ํ๋ฉด์๋ ๋๋ฒ๊น ๊ฐ๋ฅ์ฑ ํ๋ณด
โธป
๐ ์ ๋ฆฌ
โC++ ์ปดํ์ผ ์ต์ ํ๋ฅผ ํ๋คโ๋ ๋ง์ ๋ณดํต ์ปดํ์ผ๋ฌ ํ๋๊ทธ ์กฐ์ , ์ฝ๋ ๊ตฌ์กฐ ๋ฆฌํฉํ ๋ง, ์ปดํ์ผ ํ์ ๊ณ์ฐ ์ ๋, ๋ง์ปค ์ต์ ํ ๋ฑ์ ํตํด ์ฑ๋ฅ, ํฌ๊ธฐ, ์์ ํจ์จ์ฑ์ ๊ฐ์ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
โธป
ํ์ํ๋ค๋ฉด, ์ค์ ์ ์ฉ๋ ์์๋ ํน์ ์ํฉ์ ๋ง๋ ์ต์ ํ ์ ๋ต๋ ๋์๋๋ฆด ์ ์์ด์. ์๋ฅผ ๋ค์ด, ๊ฒ์ ํด๋ผ์ด์ธํธ ์ต์ ํ vs ์๋ฒ ๋ฐฑ์๋ ์ต์ ํ๋ ์ ๊ทผ์ด ์ข ๋ค๋ฅด๊ฑฐ๋ ์. ์ด๋ค ๋งฅ๋ฝ์ธ์ง ์๋ ค์ฃผ์๋ฉด ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ด์ผ๊ธฐํด๋๋ฆด๊ฒ์!