๊ฐ๋ฐ์ ๋ฐ ์์คํ ๊ด๋ฆฌ์์๊ฒ ์ ํฉํ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ธฐ์ ์ ํตํด ๋ฉํฐ ์ฝ์ด CPU ํ์ฉ์ ์ดํดํ๊ณ ๊ทน๋ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค.
์ฑ๋ฅ ๊ทน๋ํ: ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํตํ ๋ฉํฐ ์ฝ์ด CPU ํ์ฉ
์ค๋๋ ์ ์ปดํจํ ํ๊ฒฝ์์ ๋ฉํฐ ์ฝ์ด CPU๋ ์ด๋์๋ ์กด์ฌํฉ๋๋ค. ์ค๋งํธํฐ์์ ์๋ฒ์ ์ด๋ฅด๊ธฐ๊น์ง ์ด๋ฌํ ํ๋ก์ธ์๋ ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ์ฌ๋ ฅ์ ์คํํ๋ ค๋ฉด ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ๋ํ ํ์คํ ์ดํด์ ์ฌ๋ฌ ์ฝ์ด๋ฅผ ๋์์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. ์ด ๊ฐ์ด๋๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํตํ ๋ฉํฐ ์ฝ์ด CPU ํ์ฉ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์ ๋ฐ ์์คํ ๊ด๋ฆฌ์์๊ฒ ์ ํฉํ ํ์ ๊ฐ๋ , ๊ธฐ์ ๋ฐ ์ค์ ์์ ๋ฅผ ๋ค๋ฃน๋๋ค.
๋ฉํฐ ์ฝ์ด CPU ์ดํด
๋ฉํฐ ์ฝ์ด CPU๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋จ์ผ ๋ฌผ๋ฆฌ์ ์นฉ์ ํตํฉ๋ ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ ์ฒ๋ฆฌ ์ฅ์น(์ฝ์ด)์ ๋๋ค. ๊ฐ ์ฝ์ด๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋ช ๋ น์ ์คํํ ์ ์์ผ๋ฏ๋ก CPU๋ ์ฌ๋ฌ ์์ ์ ๋์์ ์ํํ ์ ์์ต๋๋ค. ์ด๋ ํ ๋ฒ์ ํ๋์ ๋ช ๋ น๋ง ์คํํ ์ ์๋ ์ฑ๊ธ ์ฝ์ด ํ๋ก์ธ์์ ํฌ๊ฒ ๋ค๋ฆ ๋๋ค. CPU์ ์ฝ์ด ์๋ ๋ณ๋ ฌ ์ํฌ๋ก๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฅ๋ ฅ์ ํต์ฌ ์์์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ตฌ์ฑ์๋ ๋์ผ ์ฝ์ด, ์ฟผ๋ ์ฝ์ด, ํฅ์ฌ ์ฝ์ด(6๊ฐ ์ฝ์ด), ์ฅํ ์ฝ์ด(8๊ฐ ์ฝ์ด) ๋ฐ ์๋ฒ ๋ฐ ๊ณ ์ฑ๋ฅ ์ปดํจํ ํ๊ฒฝ์์ ๋ ๋์ ์ฝ์ด ์๊ฐ ํฌํจ๋ฉ๋๋ค.
๋ฉํฐ ์ฝ์ด CPU์ ์ด์
- ์ฒ๋ฆฌ๋ ์ฆ๊ฐ: ๋ฉํฐ ์ฝ์ด CPU๋ ๋ ๋ง์ ์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์ ์ฒด ์ฒ๋ฆฌ๋์ด ๋์์ง๋๋ค.
- ํฅ์๋ ์๋ต์ฑ: ์ฌ๋ฌ ์ฝ์ด์ ์์ ์ ๋ถ์ฐํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณผ๋ํ ๋ถํ์์๋ ์๋ต์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
- ํฅ์๋ ์ฑ๋ฅ: ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ์คํ ์๊ฐ์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
- ์๋์ง ํจ์จ์ฑ: ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ฌ๋ฌ ์ฝ์ด์์ ์ฌ๋ฌ ์์ ์ ๋์์ ์คํํ๋ ๊ฒ์ด ๋จ์ผ ์ฝ์ด์์ ์์ฐจ์ ์ผ๋ก ์คํํ๋ ๊ฒ๋ณด๋ค ์๋์ง ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ฐ๋
๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ์ฌ๋ฌ ๋ช ๋ น์ด ๋์์ ์คํ๋๋ ์ปดํจํ ํจ๋ฌ๋ค์์ ๋๋ค. ์ด๋ ๋ช ๋ น์ด ํ๋์ฉ ์คํ๋๋ ์์ฐจ์ ์ฒ๋ฆฌ์ ๋์กฐ๋ฉ๋๋ค. ๋ณ๋ ฌ ์ฒ๋ฆฌ์๋ ์ฌ๋ฌ ์ ํ์ด ์์ผ๋ฉฐ ๊ฐ ์ ํ์๋ ๊ณ ์ ํ ํน์ฑ๊ณผ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์ต๋๋ค.
๋ณ๋ ฌ ์ฒ๋ฆฌ ์ ํ
- ๋ฐ์ดํฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ: ๋์ผํ ์์ ์ด ์ฌ๋ฌ ๋ฐ์ดํฐ ์์์์ ๋์์ ์ํ๋ฉ๋๋ค. ์ด๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ, ๊ณผํ์ ์๋ฎฌ๋ ์ด์ ๋ฐ ๋ฐ์ดํฐ ๋ถ์๊ณผ ๊ฐ์ ์์ ์ ์ ํฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด๋ฏธ์ง์ ๋ชจ๋ ํฝ์ ์ ๋์ผํ ํํฐ๋ฅผ ์ ์ฉํ๋ ์์ ์ ๋ณ๋ ฌ๋ก ์ํํ ์ ์์ต๋๋ค.
- ์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ: ์๋ก ๋ค๋ฅธ ์์ ์ด ๋์์ ์ํ๋ฉ๋๋ค. ์ด๋ ์ํฌ๋ก๋๋ฅผ ๋ ๋ฆฝ์ ์ธ ์์ ์ผ๋ก ๋๋ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์น ์๋ฒ๋ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ๋ช ๋ น ์์ค ๋ณ๋ ฌ ์ฒ๋ฆฌ(ILP): ์ด๋ CPU ์์ฒด์์ ํ์ฉ๋๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ ํํ์ ๋๋ค. ์ต์ CPU๋ ํ์ดํ๋ผ์ด๋ ๋ฐ ์์๊ฐ ์๋ชป๋ ์คํ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋จ์ผ ์ฝ์ด ๋ด์์ ์ฌ๋ฌ ๋ช ๋ น์ ๋์์ ์คํํฉ๋๋ค.
๋์์ฑ vs. ๋ณ๋ ฌ์ฑ
๋์์ฑ๊ณผ ๋ณ๋ ฌ์ฑ์ ๊ตฌ๋ณํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋์์ฑ์ ์์คํ ์ด ์ฌ๋ฌ ์์ ์ ๊ฒ๋ณด๊ธฐ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฅ๋ ฅ์ ๋๋ค. ๋ณ๋ ฌ์ฑ์ ์ฌ๋ฌ ์์ ์ ์ค์ ๋์ ์คํ์ ๋๋ค. ์ฑ๊ธ ์ฝ์ด CPU๋ ์๊ฐ ๊ณต์ ์ ๊ฐ์ ๊ธฐ์ ์ ํตํด ๋์์ฑ์ ๋ฌ์ฑํ ์ ์์ง๋ง ์ง์ ํ ๋ณ๋ ฌ์ฑ์ ๋ฌ์ฑํ ์๋ ์์ต๋๋ค. ๋ฉํฐ ์ฝ์ด CPU๋ ์ฌ๋ฌ ์์ ์ ์๋ก ๋ค๋ฅธ ์ฝ์ด์์ ๋์์ ์คํํ ์ ์๋๋ก ํ์ฌ ์ง์ ํ ๋ณ๋ ฌ์ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์๋ฌ์ ๋ฒ์น๊ณผ ๊ตฌ์คํํ์จ์ ๋ฒ์น
์๋ฌ์ ๋ฒ์น๊ณผ ๊ตฌ์คํํ์จ์ ๋ฒ์น์ ๋ณ๋ ฌํ๋ฅผ ํตํ ์ฑ๋ฅ ํฅ์์ ํ๊ณ๋ฅผ ๊ท์ ํ๋ ๋ ๊ฐ์ง ๊ธฐ๋ณธ ์์น์ ๋๋ค. ์ด๋ฌํ ๋ฒ์น์ ์ดํดํ๋ ๊ฒ์ ํจ์จ์ ์ธ ๋ณ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์๋ฌ์ ๋ฒ์น
์๋ฌ์ ๋ฒ์น์ ํ๋ก๊ทธ๋จ์ ๋ณ๋ ฌํํ์ฌ ๋ฌ์ฑํ ์ ์๋ ์ต๋ ์๋ ํฅ์์ ์์ฐจ์ ์ผ๋ก ์คํํด์ผ ํ๋ ํ๋ก๊ทธ๋จ์ ๋น์จ์ ์ํด ์ ํ๋๋ค๊ณ ๋ช ์ํฉ๋๋ค. ์๋ฌ์ ๋ฒ์น์ ๊ณต์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Speedup = 1 / (S + (P / N))
์ฌ๊ธฐ์:
S๋ ์ง๋ ฌ์ธ ํ๋ก๊ทธ๋จ์ ๋น์จ์ ๋๋ค(๋ณ๋ ฌํํ ์ ์์).P๋ ๋ณ๋ ฌํํ ์ ์๋ ํ๋ก๊ทธ๋จ์ ๋น์จ์ ๋๋ค(P = 1 - S).N์ ํ๋ก์ธ์(์ฝ์ด)์ ์์ ๋๋ค.
์๋ฌ์ ๋ฒ์น์ ๋ณ๋ ฌํ๋ฅผ ํตํด ์๋นํ ์๋ ํฅ์์ ๋ฌ์ฑํ๊ธฐ ์ํด ํ๋ก๊ทธ๋จ์ ์ง๋ ฌ ๋ถ๋ถ์ ์ต์ํํ๋ ๊ฒ์ด ์ค์ํจ์ ๊ฐ์กฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ๋ก๊ทธ๋จ์ 10%๊ฐ ์ง๋ ฌ์ธ ๊ฒฝ์ฐ ํ๋ก์ธ์ ์์ ๊ด๊ณ์์ด ๋ฌ์ฑํ ์ ์๋ ์ต๋ ์๋ ํฅ์์ 10๋ฐฐ์ ๋๋ค.
๊ตฌ์คํํ์จ์ ๋ฒ์น
๊ตฌ์คํํ์จ์ ๋ฒ์น์ ๋ณ๋ ฌํ์ ๋ํ ๋ค๋ฅธ ๊ด์ ์ ์ ๊ณตํฉ๋๋ค. ํ๋ก์ธ์ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋ณ๋ ฌ๋ก ์ํํ ์ ์๋ ์์ ๋์ด ์ฆ๊ฐํ๋ค๊ณ ๋ช ์ํฉ๋๋ค. ๊ตฌ์คํํ์จ์ ๋ฒ์น์ ๊ณต์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Speedup = S + P * N
์ฌ๊ธฐ์:
S๋ ์ง๋ ฌ์ธ ํ๋ก๊ทธ๋จ์ ๋น์จ์ ๋๋ค.P๋ ๋ณ๋ ฌํํ ์ ์๋ ํ๋ก๊ทธ๋จ์ ๋น์จ์ ๋๋ค(P = 1 - S).N์ ํ๋ก์ธ์(์ฝ์ด)์ ์์ ๋๋ค.
๊ตฌ์คํํ์จ์ ๋ฒ์น์ ๋ฌธ์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋ณ๋ ฌํํ ์ ์๋ ํ๋ก๊ทธ๋จ์ ๋น์จ๋ ์ฆ๊ฐํ์ฌ ๋ ๋ง์ ํ๋ก์ธ์์์ ๋ ๋์ ์๋ ํฅ์์ ๊ฐ์ ธ์จ๋ค๊ณ ์ ์ํฉ๋๋ค. ์ด๋ ๋๊ท๋ชจ ๊ณผํ์ ์๋ฎฌ๋ ์ด์ ๋ฐ ๋ฐ์ดํฐ ๋ถ์ ์์ ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
ํต์ฌ ์ฌํญ: ์๋ฌ์ ๋ฒ์น์ ๊ณ ์ ๋ ๋ฌธ์ ํฌ๊ธฐ์ ์ค์ ์ ๋๋ ๋ฐ๋ฉด ๊ตฌ์คํํ์จ์ ๋ฒ์น์ ํ๋ก์ธ์ ์์ ๋ฐ๋ผ ๋ฌธ์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
๋ฉํฐ ์ฝ์ด CPU ํ์ฉ ๊ธฐ์
๋ฉํฐ ์ฝ์ด CPU๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐ์๋ ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ์ ์ด ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์๋ ์ํฌ๋ก๋๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ ๋ ์์ ์์ ์ผ๋ก ๋๋๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
์ค๋ ๋ฉ
์ค๋ ๋ฉ์ ๋จ์ผ ํ๋ก์ธ์ค ๋ด์์ ์ฌ๋ฌ ์คํ ์ค๋ ๋๋ฅผ ๋ง๋๋ ๊ธฐ์ ์ ๋๋ค. ๊ฐ ์ค๋ ๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ ์ ์์ผ๋ฏ๋ก ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ์์ ์ ๋์์ ์ํํ ์ ์์ต๋๋ค. ์ค๋ ๋๋ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ํต์ ํ๊ณ ๊ณต์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฒฝํฉ ์กฐ๊ฑด ๋ฐ ๊ธฐํ ๋๊ธฐํ ๋ฌธ์ ์ ์ํ๋ ์ผ๊ธฐํ๋ฏ๋ก ์ ์คํ ํ๋ก๊ทธ๋๋ฐ์ด ํ์ํฉ๋๋ค.
์ค๋ ๋ฉ์ ์ฅ์
- ๋ฆฌ์์ค ๊ณต์ : ์ค๋ ๋๋ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๋ฏ๋ก ๋ฐ์ดํฐ ์ ์ก ์ค๋ฒํค๋๊ฐ ์ค์ด๋ญ๋๋ค.
- ๊ฒฝ๋: ์ค๋ ๋๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ธ์ค๋ณด๋ค ๊ฐ๋ฒผ์ฐ๋ฏ๋ก ์์ฑ ๋ฐ ์ ํ ์๋๊ฐ ๋ ๋น ๋ฆ ๋๋ค.
- ํฅ์๋ ์๋ต์ฑ: ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์ํํ๋ ๋์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์๋ต์ฑ ์๊ฒ ์ ์งํ ์ ์์ต๋๋ค.
์ค๋ ๋ฉ์ ๋จ์
- ๋๊ธฐํ ๋ฌธ์ : ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๋ ์ค๋ ๋๋ ๊ฒฝํฉ ์กฐ๊ฑด ๋ฐ ๊ต์ฐฉ ์ํ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
- ๋๋ฒ๊น ๋ณต์ก์ฑ: ๋ค์ค ์ค๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ๋ ๊ฒ์ ๋จ์ผ ์ค๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ๋ ๊ฒ๋ณด๋ค ๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ์ ์ญ ์ธํฐํ๋ฆฌํฐ ์ ๊ธ(GIL): Python๊ณผ ๊ฐ์ ์ผ๋ถ ์ธ์ด์์๋ ์ ์ญ ์ธํฐํ๋ฆฌํฐ ์ ๊ธ(GIL)์ผ๋ก ์ธํด ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง Python ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ ์ดํ ์ ์์ผ๋ฏ๋ก ์ค๋ ๋์ ์ง์ ํ ๋ณ๋ ฌ์ฑ์ด ์ ํ๋ฉ๋๋ค.
์ค๋ ๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ค๋ ๋๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- POSIX ์ค๋ ๋(pthreads): Unix์ ์ ์ฌํ ์์คํ ์ ์ํ ํ์ค ์ค๋ ๋ฉ API์ ๋๋ค.
- Windows ์ค๋ ๋: Windows์ฉ ๊ธฐ๋ณธ ์ค๋ ๋ฉ API์ ๋๋ค.
- Java ์ค๋ ๋: Java์ ๋ด์ฅ๋ ์ค๋ ๋ฉ ์ง์์ ๋๋ค.
- .NET ์ค๋ ๋: .NET Framework์ ์ค๋ ๋ฉ ์ง์์ ๋๋ค.
- Python ์ค๋ ๋ฉ ๋ชจ๋: Python์ ๊ณ ๊ธ ์ค๋ ๋ฉ ์ธํฐํ์ด์ค์ ๋๋ค(CPU ๋ฐ์ธ๋ฉ ์์ ์ ๊ฒฝ์ฐ GIL ์ ํ์ด ์ ์ฉ๋จ).
๋ฉํฐํ๋ก์ธ์ฑ
๋ฉํฐํ๋ก์ธ์ฑ์๋ ๊ฐ ํ๋ก์ธ์ค๋ง๋ค ์์ฒด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ํ๋ก์ธ์ค๋ GIL์ ์ ํ์ด๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ถฉ๋ ์ํ ์์ด ์ง์ ์ผ๋ก ๋ณ๋ ฌ๋ก ์คํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ณด๋ค ๋ฌด๊ฒ๊ณ ํ๋ก์ธ์ค ๊ฐ ํต์ ์ด ๋ ๋ณต์กํฉ๋๋ค.
๋ฉํฐํ๋ก์ธ์ฑ์ ์ฅ์
- ์ง์ ํ ๋ณ๋ ฌ์ฑ: ํ๋ก์ธ์ค๋ GIL์ด ์๋ ์ธ์ด์์๋ ์ง์ ์ผ๋ก ๋ณ๋ ฌ๋ก ์คํํ ์ ์์ต๋๋ค.
- ๊ฒฉ๋ฆฌ: ํ๋ก์ธ์ค๋ ์์ฒด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๋ฏ๋ก ์ถฉ๋ ๋ฐ ์ถฉ๋์ ์ํ์ด ์ค์ด๋ญ๋๋ค.
- ํ์ฅ์ฑ: ๋ฉํฐํ๋ก์ธ์ฑ์ ๋ง์ ์ฝ์ด๋ก ์ ํ์ฅ๋ ์ ์์ต๋๋ค.
๋ฉํฐํ๋ก์ธ์ฑ์ ๋จ์
- ์ค๋ฒํค๋: ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ณด๋ค ๋ฌด๊ฑฐ์ฐ๋ฏ๋ก ์์ฑ ๋ฐ ์ ํ ์๋๊ฐ ๋ ๋๋ฆฝ๋๋ค.
- ํต์ ๋ณต์ก์ฑ: ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ์ค๋ ๋ ๊ฐ ํต์ ๋ณด๋ค ๋ ๋ณต์กํฉ๋๋ค.
- ๋ฆฌ์์ค ์๋น: ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๊ธฐํ ๋ฆฌ์์ค๋ฅผ ์๋นํฉ๋๋ค.
๋ฉํฐํ๋ก์ธ์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ๊ณตํฉ๋๋ค. ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Python multiprocessing ๋ชจ๋: Python์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋ชจ๋์ ๋๋ค.
- Java ProcessBuilder: Java์์ ์ธ๋ถ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
- C++ fork() ๋ฐ exec(): C++์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๊ณ ์คํํ๊ธฐ ์ํ ์์คํ ํธ์ถ์ ๋๋ค.
OpenMP
OpenMP(Open Multi-Processing)๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ์ํ API์ ๋๋ค. C, C++ ๋ฐ Fortran ํ๋ก๊ทธ๋จ์ ๋ณ๋ ฌํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ปดํ์ผ๋ฌ ์ง์๋ฌธ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฃจํด ๋ฐ ํ๊ฒฝ ๋ณ์ ์งํฉ์ ์ ๊ณตํฉ๋๋ค. OpenMP๋ ํนํ ๋ฃจํ ๋ณ๋ ฌํ์ ๊ฐ์ ๋ฐ์ดํฐ ๋ณ๋ ฌ ์์ ์ ์ ํฉํฉ๋๋ค.
OpenMP์ ์ฅ์
- ์ฌ์ฉ ํธ์์ฑ: OpenMP๋ ์ฌ์ฉํ๊ธฐ๊ฐ ๋น๊ต์ ์ฝ๊ณ ์ฝ๋๋ฅผ ๋ณ๋ ฌํํ๋ ๋ฐ ๋ช ๊ฐ์ง ์ปดํ์ผ๋ฌ ์ง์๋ฌธ๋ง ํ์ํฉ๋๋ค.
- ์ด์์ฑ: OpenMP๋ ๋๋ถ๋ถ์ ์ฃผ์ ์ปดํ์ผ๋ฌ ๋ฐ ์ด์ ์ฒด์ ์์ ์ง์๋ฉ๋๋ค.
- ์ ์ง์ ๋ณ๋ ฌํ: OpenMP๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์์ฑํ์ง ์๊ณ ๋ ์ฝ๋๋ฅผ ์ ์ง์ ์ผ๋ก ๋ณ๋ ฌํํ ์ ์์ต๋๋ค.
OpenMP์ ๋จ์
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ ํ: OpenMP๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์คํ ์ฉ์ผ๋ก ์ค๊ณ๋์์ผ๋ฉฐ ๋ถ์ฐ ๋ฉ๋ชจ๋ฆฌ ์์คํ ์๋ ์ ํฉํ์ง ์์ต๋๋ค.
- ๋๊ธฐํ ์ค๋ฒํค๋: ๋๊ธฐํ ์ค๋ฒํค๋๋ ์ ์คํ๊ฒ ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์์ต๋๋ค.
MPI(๋ฉ์์ง ์ ๋ฌ ์ธํฐํ์ด์ค)
MPI(๋ฉ์์ง ์ ๋ฌ ์ธํฐํ์ด์ค)๋ ํ๋ก์ธ์ค ๊ฐ ๋ฉ์์ง ์ ๋ฌ ํต์ ์ ๋ํ ํ์ค์ ๋๋ค. ํด๋ฌ์คํฐ ๋ฐ ์ํผ์ปดํจํฐ์ ๊ฐ์ ๋ถ์ฐ ๋ฉ๋ชจ๋ฆฌ ์์คํ ์์ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. MPI๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ธ์ค๊ฐ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ๋ฐ์์ ์์ ์ ํต์ ํ๊ณ ์กฐ์ ํ ์ ์์ต๋๋ค.
MPI์ ์ฅ์
- ํ์ฅ์ฑ: MPI๋ ๋ถ์ฐ ๋ฉ๋ชจ๋ฆฌ ์์คํ ์์ ๋ง์ ์์ ํ๋ก์ธ์๋ก ํ์ฅํ ์ ์์ต๋๋ค.
- ์ ์ฐ์ฑ: MPI๋ ๋ณต์กํ ๋ณ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ํต์ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
MPI์ ๋จ์
- ๋ณต์ก์ฑ: MPI ํ๋ก๊ทธ๋๋ฐ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ๋ณด๋ค ๋ ๋ณต์กํ ์ ์์ต๋๋ค.
- ํต์ ์ค๋ฒํค๋: ํต์ ์ค๋ฒํค๋๋ MPI ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ค์ํ ์์๊ฐ ๋ ์ ์์ต๋๋ค.
์ค์ ์์ ๋ฐ ์ฝ๋ ์ค๋ํซ
์์์ ์ค๋ช ํ ๊ฐ๋ ์ ์ค๋ช ํ๊ธฐ ์ํด ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ช ๊ฐ์ง ์ค์ ์์ ์ ์ฝ๋ ์ค๋ํซ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Python ๋ฉํฐํ๋ก์ธ์ฑ ์์
์ด ์์ ์์๋ Python์์ multiprocessing ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ซ์ ๋ชฉ๋ก์ ์ ๊ณฑ ํฉ๊ณ๋ฅผ ๋ณ๋ ฌ๋ก ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
import multiprocessing
import time
def square_sum(numbers):
"""Calculates the sum of squares of a list of numbers."""
total = 0
for n in numbers:
total += n * n
return total
if __name__ == '__main__':
numbers = list(range(1, 1001))
num_processes = multiprocessing.cpu_count() # Get the number of CPU cores
chunk_size = len(numbers) // num_processes
chunks = [numbers[i:i + chunk_size] for i in range(0, len(numbers), chunk_size)]
with multiprocessing.Pool(processes=num_processes) as pool:
start_time = time.time()
results = pool.map(square_sum, chunks)
end_time = time.time()
total_sum = sum(results)
print(f"Total sum of squares: {total_sum}")
print(f"Execution time: {end_time - start_time:.4f} seconds")
์ด ์์ ์์๋ ์ซ์ ๋ชฉ๋ก์ ์ฒญํฌ๋ก ๋๋๊ณ ๊ฐ ์ฒญํฌ๋ฅผ ๋ณ๋์ ํ๋ก์ธ์ค์ ํ ๋นํฉ๋๋ค. multiprocessing.Pool ํด๋์ค๋ ํ๋ก์ธ์ค์ ์์ฑ ๋ฐ ์คํ์ ๊ด๋ฆฌํฉ๋๋ค.
Java ๋์์ฑ ์์
์ด ์์ ์์๋ Java์ ๋์์ฑ API๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌํ ์์ ์ ๋ณ๋ ฌ๋ก ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class SquareSumTask implements Callable<Long> {
private final List<Integer> numbers;
public SquareSumTask(List<Integer> numbers) {
this.numbers = numbers;
}
@Override
public Long call() {
long total = 0;
for (int n : numbers) {
total += n * n;
}
return total;
}
public static void main(String[] args) throws Exception {
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 1000; i++) {
numbers.add(i);
}
int numThreads = Runtime.getRuntime().availableProcessors(); // Get the number of CPU cores
ExecutorService executor = Executors.newFixedThreadPool(numThreads);
int chunkSize = numbers.size() / numThreads;
List<Future<Long>> futures = new ArrayList<>();
for (int i = 0; i < numThreads; i++) {
int start = i * chunkSize;
int end = (i == numThreads - 1) ? numbers.size() : (i + 1) * chunkSize;
List<Integer> chunk = numbers.subList(start, end);
SquareSumTask task = new SquareSumTask(chunk);
futures.add(executor.submit(task));
}
long totalSum = 0;
for (Future<Long> future : futures) {
totalSum += future.get();
}
executor.shutdown();
System.out.println("Total sum of squares: " + totalSum);
}
}
์ด ์์ ์์๋ ExecutorService๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ ๋ ํ์ ๊ด๋ฆฌํฉ๋๋ค. ๊ฐ ์ค๋ ๋๋ ์ซ์ ๋ชฉ๋ก์ ์ผ๋ถ์ ๋ํ ์ ๊ณฑ ํฉ๊ณ๋ฅผ ๊ณ์ฐํฉ๋๋ค. Future ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ ์์
์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค.
C++ OpenMP ์์
์ด ์์ ์์๋ OpenMP๋ฅผ ์ฌ์ฉํ์ฌ C++์์ ๋ฃจํ๋ฅผ ๋ณ๋ ฌํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
#include <iostream>
#include <vector>
#include <numeric>
#include <omp.h>
int main() {
int n = 1000;
std::vector<int> numbers(n);
std::iota(numbers.begin(), numbers.end(), 1);
long long total_sum = 0;
#pragma omp parallel for reduction(+:total_sum)
for (int i = 0; i < n; ++i) {
total_sum += (long long)numbers[i] * numbers[i];
}
std::cout << "Total sum of squares: " << total_sum << std::endl;
return 0;
}
#pragma omp parallel for ์ง์๋ฌธ์ ์ปดํ์ผ๋ฌ์๊ฒ ๋ฃจํ๋ฅผ ๋ณ๋ ฌํํ๋๋ก ์ง์ํฉ๋๋ค. reduction(+:total_sum) ์ ์ total_sum ๋ณ์๋ฅผ ๋ชจ๋ ์ค๋ ๋์์ ์ค์ฌ ์ต์ข
๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํด์ผ ํจ์ ์ง์ ํฉ๋๋ค.
CPU ํ์ฉ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ
CPU ํ์ฉ๋ฅ ์ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฉํฐ ์ฝ์ด CPU๋ฅผ ์ผ๋ง๋ ์ ํ์ฉํ๋์ง ์ดํดํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ๋ค์ํ ์ด์ ์ฒด์ ์์ CPU ํ์ฉ๋ฅ ์ ๋ชจ๋ํฐ๋งํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ฌ๋ฌ ๋๊ตฌ๊ฐ ์์ต๋๋ค.
- Linux:
top,htop,vmstat,iostat,perf - Windows: ์์ ๊ด๋ฆฌ์, ๋ฆฌ์์ค ๋ชจ๋ํฐ, ์ฑ๋ฅ ๋ชจ๋ํฐ
- macOS: Activity Monitor,
top
์ด๋ฌํ ๋๊ตฌ๋ CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ๋์คํฌ I/O ๋ฐ ๊ธฐํ ์์คํ ๋ฉํธ๋ฆญ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ๋ ๋์ ์ฑ๋ฅ์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ ์ ์์ต๋๋ค.
๋ฉํฐ ์ฝ์ด CPU ํ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๋ฉํฐ ์ฝ์ด CPU๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- ๋ณ๋ ฌํ ๊ฐ๋ฅํ ์์ ์๋ณ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถ์ํ์ฌ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ ์์ ์ ์๋ณํฉ๋๋ค.
- ์ฌ๋ฐ๋ฅธ ๊ธฐ์ ์ ํ: ์์ ์ ํน์ฑ ๋ฐ ์์คํ ์ํคํ ์ฒ์ ๋ฐ๋ผ ์ ์ ํ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ (์ค๋ ๋ฉ, ๋ฉํฐํ๋ก์ธ์ฑ, OpenMP, MPI)์ ์ ํํฉ๋๋ค.
- ๋๊ธฐํ ์ค๋ฒํค๋ ์ต์ํ: ์ค๋ ๋ ๋๋ ํ๋ก์ธ์ค ๊ฐ์ ํ์ํ ๋๊ธฐํ ์์ ์ค์ฌ ์ค๋ฒํค๋๋ฅผ ์ต์ํํฉ๋๋ค.
- ์๋ชป๋ ๊ณต์ ๋ฐฉ์ง: ์ค๋ ๋๊ฐ ๋์ผํ ์บ์ ๋ผ์ธ์ ์๋ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ํญ๋ชฉ์ ์ก์ธ์คํ์ฌ ๋ถํ์ํ ์บ์ ๋ฌดํจํ ๋ฐ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ๋ ํ์์ธ ์๋ชป๋ ๊ณต์ ์ ์ ์ํ์ญ์์ค.
- ์ํฌ๋ก๋ ๊ท ํ ์กฐ์ : ๋ชจ๋ ์ฝ์ด์ ์ํฌ๋ก๋๋ฅผ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐํ์ฌ ๋ค๋ฅธ ์ฝ์ด๊ฐ ๊ณผ๋ถํ ์ํ์ธ ๋์ ์ ํด ์ํ์ธ ์ฝ์ด๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: CPU ํ์ฉ๋ฅ ๋ฐ ๊ธฐํ ์ฑ๋ฅ ๋ฉํธ๋ฆญ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ฌ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํฉ๋๋ค.
- ์๋ฌ์ ๋ฒ์น๊ณผ ๊ตฌ์คํํ์จ์ ๋ฒ์น ๊ณ ๋ ค: ์ฝ๋์ ์ง๋ ฌ ๋ถ๋ถ๊ณผ ๋ฌธ์ ํฌ๊ธฐ์ ํ์ฅ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ ํฅ์์ ์ด๋ก ์ ํ๊ณ๋ฅผ ์ดํดํฉ๋๋ค.
- ํ๋กํ์ผ๋ง ๋๊ตฌ ์ฌ์ฉ: ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์ฝ๋์์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ๋ฐ ํซ์คํ์ ์๋ณํฉ๋๋ค. ์๋ก๋ Intel VTune Amplifier, perf(Linux) ๋ฐ Xcode Instruments(macOS)๊ฐ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ ๋ฐ ๊ตญ์ ํ
๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋๋ ๊ตญ์ ํ ๋ฐ ํ์งํ๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- ๋ฌธ์ ์ธ์ฝ๋ฉ: ๋ค์ํ ๋ฌธ์๋ฅผ ์ง์ํ๋ ค๋ฉด ์ ๋์ฝ๋(UTF-8)๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ํ์งํ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ์ธ์ด, ์ง์ญ ๋ฐ ๋ฌธํ์ ๋ง๊ฒ ์กฐ์ ํฉ๋๋ค.
- ํ์ค ์๊ฐ๋: ์๋ก ๋ค๋ฅธ ์์น์ ์ฌ์ฉ์์๊ฒ ๋ ์ง์ ์๊ฐ์ด ์ ํํ๊ฒ ํ์๋๋๋ก ํ์ค ์๊ฐ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
- ํตํ: ์ฌ๋ฌ ํตํ๋ฅผ ์ง์ํ๊ณ ํตํ ๊ธฐํธ๋ฅผ ์ ์ ํ๊ฒ ํ์ํฉ๋๋ค.
- ์ซ์ ๋ฐ ๋ ์ง ํ์: ์๋ก ๋ค๋ฅธ ๋ก์ผ์ผ์ ์ ์ ํ ์ซ์ ๋ฐ ๋ ์ง ํ์์ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฌํ ๊ณ ๋ ค ์ฌํญ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ธ๊ณ ์ฌ์ฉ์๊ฐ ์ก์ธ์คํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๊ฒฐ๋ก
๋ฉํฐ ์ฝ์ด CPU๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํตํด ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์์ ์์คํ ๊ด๋ฆฌ์๋ ์ด ๊ฐ์ด๋์์ ์ค๋ช ํ ๊ฐ๋ ๊ณผ ๊ธฐ์ ์ ์ดํดํจ์ผ๋ก์จ ๋ฉํฐ ์ฝ์ด CPU๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ, ์๋ต์ฑ ๋ฐ ํ์ฅ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ ํํ๋ ๊ฒ๋ถํฐ CPU ํ์ฉ๋ฅ ์ ์ ์คํ๊ฒ ๋ชจ๋ํฐ๋งํ๊ณ ์ ์ญ์ ์์๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ๊น์ง, ์ค๋๋ ์ ๋ค์ํ๊ณ ๊น๋ค๋ก์ด ์ปดํจํ ํ๊ฒฝ์์ ๋ฉํฐ ์ฝ์ด ํ๋ก์ธ์์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ๋ ค๋ฉด ์ด์ฒด์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ํ์์ ์ ๋๋ค. ์ค์ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์ง์์ ์ผ๋ก ํ๋กํ์ผ๋งํ๊ณ ์ต์ ํํ๊ณ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ธฐ์ ์ ์ต์ ๋ฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๊ณ์ ์ป์ผ์ญ์์ค.