์ด์ ๋ธ๋ฆฌ ๋จ์์์ ๋ฃจํ๊ฐ ์์ ์๋ก branch prediction ์ฐ์ฐ์ด ์ปค์ ธ์ ๋นํจ์จ์ ์ด๋ผ๊ณ ์ต์ ํ ์ฑ ์์ ๋งํ๋๋ฐ
์ด๊ฑฐ ์ค๋ช ์ข ํด์ฃผ์ค๋ถ?
๋ฃจํ ํ์ถ ์กฐ๊ฑด ํ
์คํ
๋์ ๊ทธ๋ฐ๊ฑด๊ฐ
์ด์ ๋ธ๋ฆฌ ๋จ์์์ ๋ฃจํ๊ฐ ์์ ์๋ก branch prediction ์ฐ์ฐ์ด ์ปค์ ธ์ ๋นํจ์จ์ ์ด๋ผ๊ณ ์ต์ ํ ์ฑ ์์ ๋งํ๋๋ฐ
์ด๊ฑฐ ์ค๋ช ์ข ํด์ฃผ์ค๋ถ?
๋ฃจํ ํ์ถ ์กฐ๊ฑด ํ
์คํ
๋์ ๊ทธ๋ฐ๊ฑด๊ฐ
์ฑ ์์๋ ๋ฐฑ ๋ธ๋์น๊ฐ ์ผ์ด๋๋ฉด ๊ทธ๋๋ง๋ค cpu๋ ์ ์ ๋ ๋ช ๋ น์ด ํ์ดํ๋ผ์ธ์ ๋คํํ๊ธฐ๋๋ฌธ์ ์ฑ๋ฅ์ ๋ฐ๋์งํ์ง ์๋ค๋๋ฐ ๋ญ ๋ง์ธ์ง ๋ชจ๋ฅด๊ฒ ์
branching์ ๊ต์ฅํ ๋น์ผ ์ฐ์ฐ์์ ์ ์ ํ๊ณ ๋ฃจํ๋ ๋ณธ๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์ผ๋ก ๊ตฌ์ฑ๋์ด์๋๋ฐ ์กฐ๊ฑด๋ฌธ branching์ ์์์๊ฐ์ด ์์๋๋ค๋ฉด ๋ณธ๋ฌธ์ด ์งง์์๋ก branching์ ์์๋๋ ๋น์ค์ด ์ปค์งํ ๋ ๋นํจ์จ์ ์ด๋ผ๊ณ ํ ์์๊ฒ ์ง - dc App
๊ทธ๋ฌ๋ฉด ์ ๋๊ธ์ ๋ญ ๋ง์ธ์ง ์ค๋ช ํด์ค ์ ์์?
์ด๊ฑด ์ธํฐ๋ท์ ๋ถ๊ธฐ์์ธก ๊ฒ์ํด์ ์ง์ ์ฐพ์๋ณด๋๊ฒ ๋น ๋ฅผ๊ฑฐ์ - dc App
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
์ฒซ ๋ ๋ฌด์จ ์๊ธด์ง ์๋ ค์ค์
๋ญ์ผ ์ฌ๊ธฐ ๋ก์ฐ๋ ๋ฒจ ์จ์๊ณ ์๋ค ๋ง๋ค ๊ฐ๋ฉ์ง ๋ค๋ค...
cpu ํ์ดํ๋ผ์ธ์ ๋ฐฐ์ด๊ฑฐ ๊ฐ์๋ฐ ์ ๋ธ๋์น ๋ฌธ์ ๋ ์๊ฐ์ด ์๋์ง ใ ใ ใ ๋ค ์์ด๋ฒ๋ ธ๋
๊ฐ์ก์๋ฆฌ ๋ค ํ์์๊ณ ์์ ์ค๋๋ฆฌ์์ด ์ด๊ฒ ์ง์ ์ ์ธ ๋ต์
branch prediction์ ์ต์ํํ๊ธฐ์ํด ์ปดํ์ผ๋ฌ ๋จ์์ unraping์ผ๋ก ๋ฃจํ๋ฅผ ์ต๋ํ ์ ๊ฑฐํ๋ ์ต์ ํ๋ ์ ์ฉ์ด ๋๋๊ฑฐ๊ณ
์ฒซ๋๊ธ์ ์๊ธฐ๋ ์ค๋์ด๋ฃธ์ด ๋งํ brancing์ด ๋น์ผ์ฐ์ฐ์ธ ์ด์ ์์ ๋ ์ปดํจํฐ ๊ตฌ์กฐ๋ก ๋ ์๋ฐฐ์ด๊ฑฐ ๊ฐ์๋ฐ ์ปด๊ณต2ํ๋ ์ธ๊ฐ์ ๋ฐฐ์ฐ์ง ์๋? ๋น์ ๊ณต์๊ฑฐ๋ ๊ณ ๋ฉ์? ๊ฑ ๊ณต๋ถ๊ฐ ๋ถ์กฑํ๋๊น ๋ญ๊ฐ๋ญ์๋ฆฐ์ง๋ ๋ชจ๋ฅด๋๊ฑฐ
๊ทธ๋๋ ์ดํด์๋๋๋ฐ ... ๋ ์ปดํ์ผ๋ฌ ๊ณต๋ถํ๋ ๋ํ์์์ด์ผ ใ ใ
์๋ ๋ด๊ฐ ๋ ์ดํด ์๋๋๋ฐ ์ปด๊ณต๊ณ์ด ๋ํ์์์ ๊ทธ๊ฒ๋ ์ปดํ์ผ๋ฌ๋ฉด ๊ธฐ๋ณธ ์ปดํจํฐ ๊ตฌ์กฐ๋ ๋น์ฐํ ์๋ค๋ ์๊ธด๋ฐ ์ ๊ฒ ๋ญ์๋ฆฐ์ง๋ฅผ ๋ชจ๋ฅธ๋ค๊ณ ? ํ... ๋ง์ด ์๋๋๋ฐ ๋นํํ๋๊ฒ ์๋๋ผ ์ง์ง ์ด๋ ๊ฐ์ง์ก ๋ํ์์์? ในใ ์ดํด๊ฐ ์๋์ ๊ทธ๋ผ
์ด๋ ๋ํ์ด๋ ๋ชํ๋ ์ด๋ ์ปดํจํฐ ๊ตฌ์กฐ๋ก ์ ๋ฐฐ์ ๋ค๋ฉด ๋น์ฐํ ์ดํดํด์ผ ์ ์์/
๊ทธ๊ฒ ๊ณ ๋ฉ์ด๋ ์ค๋ฉ์ด๋ ์ปด๊ตฌ๋ฅผ ๋ฐฐ์ ๋ค๋ฉด ๋น์ฐํ ์ดํด๊ฐ์ผ ์ ์์ธ๋ฐ ์ฐธ ๋ฏธ์คํฐ๋ฆฌ๋ค
์๋ฌด๋ฆฌ ์๊ฐํด๋ loop unrollํด์ ์ป๋ ์ด์ ํ๊ณ branch predictor๊ฐ ์ป๋ ์ด์ ์ด ๋น์ทํ ์ ๋ฐ์ ์์ ๊ฒ ๊ฐ์๋ฐ branch predictor๊ฐ ์ผ์ ธ๋ super pipeline๋ ๊ฐ์ด ํ์ฉ ๊ฐ๋ฅํ๋๊น ๋ณดํต unroll๋์ ๋ฃจํ๋ randomizeํ escape condition์ด ์๋๋๊น ์ ํ ๋ฃจํ๋ฅผ unrollํจ์ผ๋ก์จ ์ป๋ ์ด์ ์ branch target buffer๋ฅผ ์ฑ์ฐ๋ prolog ์ ๋๋ฐ์ ์๊ณ ์ด๊ฑด ๊ณ ์ ์๊ฐ์ผ๋ก ๋ด๋๋๋๊น ๋ฃจํ๊ฐ ์ปค์ง๋ฉด ์ปค์ง ์๋ก ๊ทธ ํจ๊ณผ๋ ๋ฏธ๋ฏธํ ๊บผ๊ณ super scalar ์ฐ์ฐ hint๋ฅผ ์ ๋ฌ ๋ชปํด์ ๊ทธ๋ ๋ค๋๊ฑฐ์?
๊ทธ๋ฅ ์ง๊ด์ ์ผ๋ก ์ ์ดํด๊ฐ ์๋์ ๊ทธ๋ฐ๊ฑฐ branch predictor๊ฐ ๋ฐฑ๋ธ๋ฐ์น์ ๋ํด์ instruction stall์ ์ํค์ง ์๋๋ค๊ณ ๋ฐฐ์์ ๊ทธ๋ฐ๊ฑฐ์
๊ทธ๋ฅ unroll ์ต์ ๋๊ณ ์คํํด๋ณผ๊ป
์ผ๋จ ์ด์ชฝ ์ ๋ฌธ๊ฐ๋ ์๋๋ผ์ ๋ช๊ฐ์ง ์ฉ์ด์ ๋ํด ์ ํํ ๋ชจ๋ฅด๊ธฐ๋ ํ์ง๋ง ์ผ๋จ ์ต๋ํ ๋๋ตํด๋ณด์๋ฉด - branch predictor๊ฐ ๋ฐฑ๋ธ๋ฐ์น์ ๋ํด์ instruction stall์ ์ํค์ง ์๋๋ค ? ์ด๊ฒ ๋ฌด์จ ๋ง์ด์ง? back branch ๊ฒ์ํด๋ด๋ ์ ๋ณด๊ฐ ์๋๊ฑธ๋ก ๋ด์๋ ์ ์ ์ฉ์ด๋ ์๋๊ฑฐ ๊ฐ์๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก branching prediction์ด ์คํจํ๋ฉด instructiond stall์ด ์ผ์ด๋๋๊ฒ ์์น์ด๊ณ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ prediction์ ์ต์ํ ํ๋๋ก unroll์ ํ๋ ๊ฑฐ๋ผ๊ณ ์๊ณ ์๋๋ฐ ๋ ๊น์ด ๋ค์ด๊ฐ๋ฉด ๋ญ๊ฐ ๋ฌ๋ผ์ง๋๊ฑด์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค๋ง ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด ์ฌ๊ธฐ์ ๊ทธ ์์ธํ ์ ๋ณด์ ๋ตํ ์ ์๋ ์ฌ๋์ ์์๊ฑฐ์
๋ด๊ฐ ๋ณด๊ธฐ์ ๋๊ฐ ์ฉ์ด ๋ช๊ฐ๋ ๊ฐ๋ ์ด ์์ฌ์ ํท๊ฐ๋ ค ํ๋๊ฑธ๋ก ๋ณด์ด๋๋ฐ ๊ทธ๋ฅ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ํ๋ฆฌ์ง ๋ง๊ณ ์๊ฐํด๋ด
back branch๋ back edge๋ ๊ฐ์ ๋ง์ ๊ทธ ๋จธ๋ ๋ฃจํ์ ์ฒซ ๋ถ๋ถ์ผ๋ก ๋๋์๊ฐ๋๊ฑฐ
์ข์ ์ง์ ์. ๊ทธ๋์ unroll์ด ํจ๊ณผ์ ์ธ ๊ฒฝ์ฐ๋ ๊ทนํ ์ ํ์ ์. ๋ด๊ฐ ์์์ ๋งํ๊ฒ์ฒ๋ผ branching์ ๋น์ค์ด ์ปค์ ๋นํจ์จ์ ์ธ ๊ฒฝ์ฐ์ ํจ๊ณผ์ ์ธ ์ต์ ํ ๋ฐฉ๋ฒ์ด๊ฒ ์ง - dc App
pipeline ์ต์ ํ๋ก stall์์ด ์งํ๋ ์๋ ์์์๋ ๊ทธ๋ ๋ค๊ณ ํด๋ ๊ทธ๋ฆฌ๊ณ ๋๊ฐ ์ฒซ๋๊ธ์ ์ด๊ฒ๋ง ๋ด๋ ๋ฐฑ๋ธ๋์น๊ฐ ์ผ์ด๋ฌ์ ๋ ๋ญ๊ฐ ์ฑ๋ฅ์ ์์ข์ ์ผ์ด ์ผ์ด๋๋๊ฑฐ๊ธฐ ๋๋ฌธ์ ๋ฃจํ๋ฅผ ์ต์ํ ํ๋๊ฒ ์ฑ๋ฅ์ ์ด์ ์ด ๋๋ค๋๊ฑด ํ์คํ๊ฑฐ๊ณ -> ๊ทธ๋์ unroll์ ํ๋๊ฒ ์ฑ๋ฅ์ ๋์์ด ๋๋ค๋๊ฑฐ๊ณ , ์ด ๊ฐ๋จํ๊ฒ ์ดํด๊ฐ ์๋๋๊ฑฐ๋ฉด ์ง๊ธ ๋จธ๋ฆฌ๊ฐ ใ ใด ๋ณต์กํ๊ฑฐ์ผ๋ฏ
ํ ์จ ๋๋ฆฌ๊ณ ๋ค์ ํ ๋ฒ ์๊ฐํด๋ณผ๊ป ๋ต๋ณ๋ค ๊ณ ๋ง์
๋ ์ค๋ง unroll ์ด๋ predictor์ ์คํ์๊ฐ์ด ๋ค๋ฅธ๊ฑด ์๊ณ ์๋๊ฑฐ์ง? unroll์ ์ปดํ์ผ๋ฌ์์ ํ๋๊ฑฐ๊ณ predictor๋ cpu์์ ํ๋๊ฑฐ์์ ๋น์ฐํ unroll์ด ์ด๋ฏธ ๋์๋ ์ฝ๋๋ฉด cpu์ ๋ถ๋ด์ด ์ค์ด๋๋๊ฑฐ์ง ์ ์ด์ ์ด ๋น์ทํ๋ค๊ณ ์๊ฐํ๋๊ฑฐ์ง? ๋ช ๋ฐฑํ ์ฒ๋ฆฌ์๊ฐ๋๊ฐ ๋ค๋ฅธ๋ฐ unroll์ด ๋ ์ฝ๋๋ ๋ฌด์กฐ๊ฑด cpu์์ ๋ ํจ์จ์ ์ผ ์๋ฐ์ ์์ ์ด๊ฑฐ ํท๊ฐ๋ฆฐ๊ฑฐ ์๋์ง ์๊ฐํด๋ด๋ผ ๊ทธ๋ผ ๋ ๊ฐ๋ค
๊ทธ๊ฑด์์ง ใ ใ ๋๋ ๊ทธ๊ฑด ๋น์ฐํ๊ฑฐ๋ผ๊ณ ์๊ฐํ๊ณ ์์๋๋ฐ, ์ด๋ฒ์ ์ต์ ํ ์ชฝ ๊ณต๋ถํ๋ฉด์ ์๋ฌธ์๊ฒจ์ ์ง๋ฌธํ๊ฑฐ์ผ ๊ฒ์ ํ๋ฐํ๋ ์ฌ๋๋ค ์ต์ ํ ์ํ๋ ๊ฑฐ ๋ง์ด ๋ด์ ์ง๋ฌธํ๋ฌ์จ๊ฑฐ
๊ฐ์ด์์ ์ด์ด ๊ฐ๋ํ ์น๊ตฌ๋ค
๋ธ๋์น ํ๋ฆฌ๋์ ๋ ๋ฒจ๊น์ง ๊ฐ๋ค๋๊ฑฐ๋ ์์ฒญ ๋ก์ฐํ ๋ ๋ฒจ์์ค์ ์ต์ ํ๋ฅผ ์ ๊ฒฝ์ฐ๊ฒ ๋ค๋๊ฑด๋ฐ ์์งํ ๋ณ๋ก ์ ๊ฒฝ ์์จ๋ ๋จ.. ๋ด๊ฐ ์๋ ๋ฐ๋ฅผ ํ์ด๋ณด์๋ฉด CPU๊ฐ ๋ก์ง์ ์ต์ ํ ํ๋ ๋ฐฉ์ ์ค์๋ ์๋ก ์ฝํ์ง ์๋ ๋ก์ง๋ค์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋๊ฒ ์์. a = 1 + 1; b = c + 2; ํ๋ก๊ทธ๋จ ๋ก์ง์ ์ ํ์ ์ผ๋ก ์ด๋ฃจ์ด ์ง์ง๋ง ์์ ๋ ์ค ์ฒ๋ผ ์๋ก ์ฐ๊ด์ด ์๋ ๋ก์ง๋ค์ ๋์์ ๊ณ์ฐํด๋ ์๊ด์ด ์๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ ์ผ๋ก ๋์์ ๊ณ์ฐ์ด ์งํ๋๋๊ฑฐ์ง. ๊ทธ๋ฐ๋ฐ if๊ฐ์ ๋ก์ง๋ค์ ์ด๋ฐ ๋์ ์งํ์ ์ฒ๋ฆฌํ๋๋ฐ ๋งค์ฐ ๊ท์ฐฎ์ ๋ฌธ์ ๋ฅผ ๋ฐ์์ํค๋๋ฐ ๊ฒฐ๊ณผ๊ฐ ๋์๋ด์ผ ์ด๋ ๋ก์ง์ ํ์ง ํ๋จ์ด ๋๋จ ๋ง์ด์ผ. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ ์ผ๋ก๋ ์ ๋งํ๋ฉด ๋ค์ด๊ฐ ๊ฒ ๊ฐ์ ์ชฝ์ ๋ฏธ๋ฆฌ ๊ณ์ฐํด ๋๊ณ ์ต์ข ์ ์ผ๋ก ๊ทธ ์์ธก์ด ๋ง์์ผ๋ฉด ๊ทธ๋๋ก ์งํ
ํ๋ ธ์ผ๋ฉด ๋ฐ๋์ชฝ์ ๊ทธ๋ ๊ณ์ฐํ๋ ์์ผ๋ก ์งํ์ด ๋.. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ if๊ฐ์ ์กฐ๊ฑด๋ฌธ๋ค์ด ์ต์ ํ์ ํฐ ๋น์ฉ์ ๋ฐ์์ํจ๋ค๋ ์๊ธฐ๊ฐ ๋์ค๋ ๊ฑฐ์ผ.. ๊ทผ๋ฐ ์์งํ ์ธ๋๊ฒ ๋ง๋๋ ๋ ๋ฒจ์์ ์ฌ๊ธฐ๋ฅผ ์ ๊ฒฝ์ธ ํ์๊ฐ ์๋๋? ๋ผ๊ณ ๋ฌผ์ผ๋ฉด ๊ทธ๋ฅ ๋์ถฉ ๊ฐ๋ฐํด๋ ๋จ..
์ ํ์๋ ์์ง๋ง ์๋ฉด ์ข์, ํ๋ก๊ทธ๋๋ฐ ๊ณ์ '๊ต์' ๊ฐ์ ๋๋์ด์ง
์ง๋ฌธ์๋ ๊ฑ ๋ํ๊ต ๊ณต๋ถํ๋ค๊ฐ ๋งํ์ ์ง๋ฌธํ๋ฏ
๊ทธ๋ฐ๋ฏ ์์ ๋๊ธ ์ข ๋ดค๋๋ฐ ์ด๋ฏธ ๋ด ์์ค์ ๋์๋ฏ
์ ๋๊ธ ์ฝ์ด๋ณด๋๊น ๋๊ฐ ์๊ฐํ๋๊ฒ branch predictor๋ก ์ด์งํผ instruction stall์ด ์ผ์ด๋์ง ์์์ ๋ฑํ ์๋ฏธ์๊ฒ ๋น์ฉ์ด ์ค์ด๋ค์ง ์๋๋ค๊ณ ์๊ฐํ๋๋ฐ. ๋๊ฐ ๋งํ๋ branch predictor ๊ณ์ฐ ์์ฒด๊ฐ ๋ฃจํ ๋ง๋ค ํ๋๋ฐ ๋น์ฐํ ๊ทธ ๋ฃจํ๊ฐ ๋ง์ด ๋๋ฉด ๋์๋ก ์์ธก๊ณ์ฐ์ ์์ฃผํด์ ์์ข๋ค ๋ผ๊ณ ์ฑ ์์ ๋งํ๋๊ฑธ๋ก ๋ณด์ด๋ค.
๋ด๊ฐ๋งํ ๋ฃจํ๋ฅผ ๋ง์ด ๋๋ค ๋ผ๋ ์ ์ ์์ฒด๊ฐ ํน์ ๋ฃจํ๋ฅผ ๊ฐ์ ๋ก unrollํด์ ํ์ด์ ๋ฃจํ ๋ด์ ์ ์์ฒด๋ฅผ ๋๋ฆฌ๊ณ ๋ฃจํ ์์ฒด๋ ์ ๊ฒ ๋๋ ์ํฉ์ ํ์ง ์์๋ ์๊ธฐ๊ณ
๋์ผํ ์๋์ ํ๋ ์ฝ๋๋ฅผ ๋ฃจํ๋ฅผ ์ ๊ฒ ๋๊ฒ ์ง๋๋ ๋ง์ด ๋๊ฒ ์ง๋๋ ๋ผ๋ ์ ์ ์
๊ทธ ์๋ฏธ์๊ฒ ๋น์ฉ์ด ์ค์ด๋๋๋ ์๋๋๋ ์ ์ณ๋๊ณ ์ค์ด๋ค๊ธด ํ๋ค ๋ผ๋ ๋ด์ฉ์ธ๋ฏ
๊ทธ๋ ๋ค๋ฉด ๊ทธ branch predictor์ ์์ธก ๊ณ์ฐ์ด instruction pipeline์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋ ์ง๊ฐ ๊ถ๊ธํ๋ค ์์ธก ์ฐ์ฐ ๋๋ฌธ์ branch ํ์ instruction๋ค์ด 1.5 cycle ์ด์ ๋ฐ๋ ค๋ฒ๋ฆฌ๋ฉด ์ด์จ๋ฏ unroll ๋ณด๋ค๋ ์ํด๋๊น ๋ต๋ณ ๊ณ ๋ง์!
๋ ํ์ดํ๋ผ์ด๋ ๋ ์ํฉ์์ ๊ฐ ์คํ ์ด์ง์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํญ์ ์์์ธ๊ฐ ์๋๊ฐ๊ฐ ํท๊ฐ๋ฆฌ๋ค. ๋๋ ๋ง์ฝ ์์๋ฉด branch prediction์ ํ๋ ๋ง๋ ์๊ด์์ด ๋๊ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋๊น ๋๊ฐ ๋งํ๊ฒ ์ฒ๋ผ ์๋ฏธ ์์ด์งํ ๊ณ
๋ญ ์ฑ ์์ ๋งํ๋๋ก๋ฉด ๋ณ๋์ด ์๋ค๊ณ ๋ด์ผ๊ฒ ์ง?