๋ถ๊ธฐ ์์ธก (Branch Prediction)
๋ถ๊ธฐ ์์ธก์ ์ปดํ์ผ ๋ฐ ์ต์ ํ ๊ณผ์ ์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ ์ค ํ๋๊ณ , ๋์์ ๊ฐ์ฅ ์ด๋ ค์ด ๋ถ๋ถ์ด๊ธฐ๋ ํ๋ค.
ํ์ดํ๋ผ์ธ ๊ตฌ์กฐ์ ์ฐ๊ด์ด ๊น๋ค.
https://blog.naver.com/sssang97/223940931299
CPU๋ branch ๋ช
๋ น์ด๋ฅผ ๋ง๋๋ฉด, ์์ ๋ถ๊ธฐ ์ง์ ์ ์ถ์ธกํด์ ๊ฑฐ๊ธฐ ์๋ ๋ช
๋ น์ด๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํด์ ์คํ ์ค๋น๋ฅผ ํ๋ค.
์์ธก์ด ๋ง๋ค๋ฉด ๊ต์ฅํ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ผ ์ ์์ง๋ง, ์คํจํ๋ค๋ฉด ๊ทธ ์์ ์ ๋ค ๋ฒ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ถ๊ธฐ์ ์ฝ๋๋ฅผ ๋ค์ ๋ถ๋ฌ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋์ฐํ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋์ฒด๋ก ์์ธก์ด ์คํจํ์ ๋๋ ์ต์ ํ๋ก์ธ์ค ๊ธฐ์ค์ผ๋ก ์ต์ 10๊ฐ ์ ๋์ ๋ช
๋ น์ด ์คํ์ ์ํด๋ณธ๋ค.
๊ทธ๋์ ์ง๊ธ์
๋ง์ ํ๋ CPU ์ ์กฐ์ฌ๋ค์ branch prediction ์ต์ ํ ๊ด๋ จ๋ ๋ถ๋ถ์์ ๋ง์ ๋ ธ๋ ฅ์ ํด์๊ณ , ํ๊ณ ์๋ค.
์ด๊ฑด ์ง๊ธ์ ์ด๋ฅด๋ฌ์๋ ์์ ํ ํด๊ฒฐ๋์ง ๋ชปํ ๋ฌธ์ ์ด๊ณ , ํ๋์จ์ด์ ์ํํธ์จ์ด ์์ชฝ์์ ํจ๊ป ์ต์ ํ๋ฅผ ์ํด ํ์ ์ฐ๊ณ ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
CPU ์ ์กฐ์ฌ์์๋ ํ๋์จ์ด ์ํคํ
์ณ ๊ฐ์ ์ ์ด์ด๋๊ฐ๊ณ ์๊ณ , ์ปดํ์ผ๋ฌ ๋ฐ ์ฌ์ฉ์๋ branch prediction์ ๊ณ ๋ คํด์ ์ด์
๋ธ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ค.
CPU๊ฐ ํ๋ ๋ ธ๋ ฅ
branch์ ๋ํ ์์ธก์ ์์ ํ ํ๋ฅ ์ ๋ฐ๋ฅด๊ณ , ์ ํํ๊ฒ ์ผ์นํ๋ค๋ ๋ณด์ฅ์ด ์๋ค.
๊ทธ๋๋ CPU ์ ์กฐ์ฌ๋ค์ ์ด๋ป๊ฒ๋ branch ์์ธก ์ ์ค๋ฅ ์ ๋์ด๋ ค๊ณ ์ ๋ฅผ ์ฐ๊ณ ์๊ณ , ๊ทธ๊ฑด ํ์ฌ์งํํ์ด๋ค.
์ง๋ํ ์ญ์ฌ์ ์ถ์ ์ผ๋ก ์ธํด์ ์ต์ CPU๋ค์ branch ์์ธก ์ ์ค๋ฅ ์ด ๊ฝค ์ข๊ณ , ์ง์ branch prediction์ ์ํด ์ฌ์ฉ์๊ฐ ์ธ๋ถ์กฐ์ ์ ํ์ง ์๋๋ผ๋ ์ฑ๋ฅ์ด ์ ๋์ค๋ ํธ์ด๋ค.
๊ทธ๋์ ์คํ๋ ค ์ ๋งคํ๊ฒ ๊ฑด๋๋ฆฌ๋ฉด ๋ ๋๋ ค์ง ์๋ ์๋ค.
์ฌ๊ธฐ์๋ ๊ต์ฅํ ๋ง์ ์ ๊ทผ๋ฒ๊ณผ ํธ๋ฆญ๋ค์ด ์กด์ฌํ๋ค.
๊ณตํต์ ์ผ๋ก, ๋ถ๊ธฐ๋ฅผ ์ต์ ํํ๋ ค๋ฉด ๋ถ๊ธฐ ์คํ์ ๋ํ ๊ธฐ๋ก์ ๋จ๊ฒจ๋ฌ์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ ์ผ๋ก Branch History Table(BHT)์ด๋ผ๋ ๊ฒ์ ๋๋ค.
One-level branch prediction - 1๋นํธ ์นด์ดํฐ(Last time prediction)
๋น๊ต์ ๋จ์ํ ์ถ์ ์ํ๋ ์์ธก ๋ฐฉ์์ด๋ค.
์ด๊ฒ ๋ญ๋๋ฉด, ๋ง์ง๋ง์ผ๋ก ํ ๋ถ๊ธฐ๋ฅผ ์ ํฉํ ๋ถ๊ธฐ๋ก ํ๋จํ๊ณ ์์ธกํ๋ค๋ ๊ฒ์ด๋ค.
์ฒ์ ์คํํ ๋ A/B ๋ถ๊ธฐ ์ค A ๊ฒฝ๋ก๋ฅผ ํ๋ค๋ฉด, ๋ค์ ์ฌ์ง์
ํ์ ๋๋ A๋ฅผ ํ ๊ฒ์ด๋ผ๊ณ ์์ธกํด์ ๋ช
๋ น์ด๋ฅผ ๋ก๋ํ๋ค. ๋ง์ฝ ๊ทธ ๋ค์์ B ๋ถ๊ธฐ๋ฅผ ํ๋ค๋ฉด ๊ทธ ๋ค์ ์ฌ์ง์
์์๋ B๋ก ์์ธกํ๋ค.
์ค์ ๋ถ๊ธฐ ์คํ ํ์์๋ ๊ด๊ณ๊ฐ ์๊ณ ์ง๋๋ฒ ์คํ์ ๊ธฐ๋ฐ์ผ๋ก๋ง ์์ธก์ ํ๊ธฐ ๋๋ฌธ์, ๋ถ๊ธฐ๊ฐ ํ์ชฝ์ผ๋ก๋ง ์ค๋ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ์ ํจ์จ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด๋ค.
์นด์ดํฐ ๊ฐ์ 1๋นํธ ๊ฐ์ด๋ค. ๊ธฐ๋ค ์๋๋ค ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๊ฑด ์ผ๋ฐ์ ์ธ ์ํฉ์์ ์ฑ๋ฅ์ด ๊ฑฐ์ ์ข์ง ๋ชปํ๊ธฐ ๋๋ฌธ์, ํ๋ ๊ตฌ์กฐ์์๋ ์ ์ฌ์ฉ๋์ง ์๋๋ค.
A ๋ถ๊ธฐ๋ก 100๋ฒ๋ฅผ ํ๋ค๊ฐ B ๋ถ๊ธฐ๋ฅผ ํ๋ฒ๋ง ํ๋๋ผ๋ ๋ฐ๋ก prediction์ด ๋ง๊ฐ์ง๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ๋์จ ๊ฒ์ด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ์ํํ๋ 2๋นํธ ์นด์ดํฐ ๋ฐฉ์์ด๋ค.
One-level branch prediction - 2๋นํธ ์นด์ดํฐ
์ด๊ฑด ๊ทธ๋ ๋ค/์๋๋ค ๋ก ๊ตฌ๋ถํ๋ ๊ฒ์์ ๋ ๋์๊ฐ์, ๊ฐํ ์ ํธ/๊ฐํ ๋น์ ํธ/์ฝํ ์ ํธ/์ฝํ ๋น์ ํธ์ 4๊ฐ์ง๋ก ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค.
๋๋จํ ๊ฒ์ ์๋๋ค.
A/B ๋ธ๋์น์ ์ ํธ๋ฅผ ๊ตฌ๋ถํ๊ณ ๊ต์ฒดํ๋ ํ์ด๋ฐ์ ํ๋ฒ์ ์ ์๋ฅผ ์ฃผ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋๊น, A ๋ธ๋์น๊ฐ ๊ฐํ๊ฒ ์ ํ๋ ์ํ์์ B ๋ธ๋์น๊ฐ ์คํ๋๋๋ผ๋, ํ๋ฒ์ ๋ด์ฃผ๊ณ ์ฝํ ์ ํ ์ํ๋ก ์ ํํ๋ค. ๊ทธ ์ํ์์ ๋ B๊ฐ ์คํ๋๋ค๋ฉด B๋ก ๋์ด๊ฐ๊ฒ ์ง๋ง, A๊ฐ ์คํ๋๋ค๋ฉด ์์ธก์ด ์ ์ง๋๋ ๊ฒ์ด๋ค.
์์ธก ์ ์ง์จ์ด ๋ ๋์์ ์๋ ์๋ ๋๋ฆ ํ๋์ ๊ฝค ์ฐ์๋ค.
Two-level Adaptive Predictor
์ฌ๊ธฐ์๋ ๋จ์ ์ํ ํ๋๊ทธ ์ฒ๋ฆฌ ์์ค์์ ๋ฒ์ด๋์ ์ ์ํ ๊ฐ๋ ์ ๋์ ํ๋ค.
์ฐ์ ๋ธ๋์น๋ณ ์คํ ๊ธฐ๋ก์ ์ ์ฅํ๊ธฐ ์ํด Global History Register(GHR)๋ผ๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ๊น์ง๋ ๊ธฐ์กด ๋ฐฉ์๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค.
์ฐจ์ด์ ์ด ์๊ธฐ๋ ๋ถ๋ถ์, ๋จ์ ๋ธ๋์น๋ณ ํ์คํ ๋ฆฌ ์ธ์๋ ๊ฐ "์คํ ํ๋ฆ", ํจํด์ ๋ํ ์์ธก ์ ๋ณด๊น์ง ๊ด๋ฆฌํ๋ค๋ ๊ฒ์ด๋ค. ์ด๊ฑธ Pattern history table์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด๊ฑด ํน์ ์คํ ํ๋ฆ, ๋ถ๊ธฐ์ ์งํฉ๋ง๋ค ๊ด๋ฆฌ๋๋ ์ผ์ข
์ ํด์ํ
์ด๋ธ์ด๋ค.
GHR์ ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํด์๋ฅผ ์ถ์ถํ๊ณ ์ ๊ทผํด์ ์์ธก ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ณ ์ฝ์ด์ ์ธ ์ ์๋ ๊ตฌ์กฐ๋ก ์์ฉ๋๋ค.
"ํจํด"์ ๋จ์๋ ํฌ๊ธฐ, ํด์๊ฐ์ ์ด๋ป๊ฒ ์ง์ ํ ์ง๋ ๊ตฌํ ์ธ๋ถ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ฅ ํน์ง์, ์์ธก์ด ๊ฐ๋ณ ๋ถ๊ธฐ ๋จ์์๋ง ๊ทธ์น๋ ๊ฒ์ด ์๋๋ผ, ์ฌ๋ฌ ๋ถ๊ธฐ ๊ฐ์ ์๊ด๊ด๊ณ๊น์ง ๊ณ ๋ คํด์ ์์ธก์ ์งค ์ ์๋ค๋ ๊ฒ์ด๋ค.
ํ์กดํ๋/์ต์ CPU๋ค์ ๋๋ถ๋ถ ์ด ๋ฐฉ์์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์๊ฑฐ๋, ์ด ๋ฐฉ์์ ๋ณํ ์ํคํ
์ณ๋ค์ ์ฌ์ฉํ๋ค.
branch predictor ๊ตฌ์กฐ์ ๋ผ๋ ๊ทธ ์์ฒด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
AMD์ ์ต์ ์ํคํ ์ณ์ธ Zen 5๋ง ํด๋ Two-level Adaptive Predictor์ ์ง์ ์ ์ธ ๋ณํ ์ค๊ณ์ธ 2-Ahead Branch Predictor๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋ค.
์ด๊ฒ ์ธ์๋ ๋ณํ ์๊ณ ๋ฆฌ์ฆ/๊ตฌ์กฐ๋ค์ด ์๋นํ ๋ง์๋ฐ, ์ฌ๊ธฐ์ ๋ค ๋ค๋ฃจ์ง๋ ์๊ฒ ๋ค. ์ด๊ฒ ํต์ฌ์ด๋ค.
์ปดํ์ผ๋ฌ ์์ค ์ฒ๋ฆฌ
CPU๋ ๋ง์ ๋ ธ๋ ฅ์ ํ๊ณ ์์ง๋ง, ์ปดํ์ผ๋ฌ๋ ๋ถ๊ธฐ๋ก ์ธํ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ง๊ธฐ ์ํด ๋ ธ๋ ฅ์ ํ๋ค.
๋ถํ์ํ ๋ถ๊ธฐ ์ ๊ฑฐ
์ปดํ์ผ๋ฌ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ผ ์ ์๋ค๋ฉด, ๊ฐ๊ธ์ ๋ถ๊ธฐ๋ฅผ ์ ๊ฑฐํ ๋ฒ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ค๊ณ ๋
ธ๋ ฅํ๋ค.
ํน์ ์ฌ์ฉ์ ์์ค์์๋ ์๋๋ฅผ ํด๋ณผ ์ ์๋ค.
branch prediction ํํธ
GCC/Clang์ ๊ฒฝ์ฐ์๋ __builtin_expect๋ผ๋ ์ปดํ์ผ๋ฌ ํ์ฅ์ ํตํด์ branch prediction์ ์ํ ํํธ๋ฅผ ์ ๊ณตํ ์ ์๋ค.
// ์ปดํ์ผ๋ฌ ํํธ ์ ๊ณต
if (__builtin_expect(condition, 1)) { // likely
// ์์ฃผ ์คํ๋๋ ์ฝ๋
} else { // unlikely
// ๋๋ฌผ๊ฒ ์คํ๋๋ ์ฝ๋
}
์ด๋ฌ๋ฉด ์ปดํ์ผ๋ฌ๋ "likely" ๋ถ๊ธฐ๋ฅผ ๋ง์ด ํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ ์ฝ๋๋ฅผ ๋ฐฐ์นํ๋ค.
PGO
PGO๋ Branch Prediction๋ฅผ ์ ๋ํ๋๋ฐ์ ๊ฐ์ฅ ํ์ํ ์ปดํ์ผ๋ฌ ์์ค ์ ๊ทผ ๋ฐฉ๋ฒ ์ค ํ๋๋ค.
PGO๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ปดํ์ผ๋ฌ๋ ์คํ ๊ธฐ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ์์ฃผ ๊ฑธ๋ฆฌ๋ hot branch์ ๋ ๊ฑธ๋ฆฌ๋ cold branch๋ฅผ ํต๊ณ์ ์ผ๋ก ํ๋จํ ์ ์๋ค.
๊ทธ๋์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์คํ ๋น๋๊ฐ ๋์ hot branch๋ฅผ ๊ฐ๊น์ด ๋ฐฐ์นํด์ ์บ์์ ํ๋๋ก ํ๊ณ , ์คํ ๋น๋๊ฐ ๋ฎ์ cold branch๋ฅผ ๋ฉ๋ฆฌ ๋ฐฐ์นํด์ ๋ถ๊ธฐ ์์ธก๋ฅ ์ด ๋์์ง๋๋ก ์ ๋ํ๋ ๊ฒ์ด๋ค.
https://blog.naver.com/sssang97/223937776756
์ฐธ์กฐ
https://chrisfeilbach.com/2025/07/05/understand-cpu-branch-instructions-better/
https://en.wikipedia.org/wiki/Branch_predictor
https://enesharman.medium.com/branch-prediction-algorithms-a7f8da1394b4
https://www.slideserve.com/bracha/two-level-adaptive-branch-prediction
https://m.blog.naver.com/ektjf731/223053617175
https://enesharman.medium.com/branch-prediction-algorithms-a7f8da1394b4