๐ ์ต์ ํ์ ์ ์ธ๊ณ: ๋ฃจํ ์ธ๋กค๋ง๊ณผ ์ธ๋ผ์ธ ํ์ฅ ๋ง์คํฐํ๊ธฐ ๐

์๋ ํ์ธ์, ์ฝ๋ฉ ๊ณ ์๋๋ค! ์ค๋์ ํ๋ก๊ทธ๋จ ์ต์ ํ์ ๊ฝ์ด๋ผ๊ณ ํ ์ ์๋ ๋ฃจํ ์ธ๋กค๋ง๊ณผ ์ธ๋ผ์ธ ํ์ฅ์ ๋ํด ๊น์ด ํํค์ณ๋ณผ ๊ฑฐ์์. ์ด ๊ธฐ๋ฒ๋ค์ ๋ง์น ํ๋ก๊ทธ๋๋ฐ๊ณ์ '์ธ์ ๊ฟํ' ๊ฐ์ ์กด์ฌ๋ผ๊ณ ํ ์ ์์ฃ . ใ ใ ใ
์ฌ๋ฌ๋ถ, ํน์ ์ฝ๋๊ฐ ๊ฑฐ๋ถ์ด์ฒ๋ผ ๋๋ฆฌ๊ฒ ์คํ๋๋ ๊ฒฝํ ์์ผ์ ๊ฐ์? ๊ทธ๋ด ๋๋ง๋ค '์ ์ง์ง... ๋ด ์ฝ๋ ์ ์ด๋ฌ๋' ํ๋ฉด์ ์ข์ ํ์ จ๋ค๋ฉด, ์ค๋์ ํ๋ค์ด ์ฌ๋ฌ๋ถ์ ์ฝ๋์ ํฐ๋ณด์์ง์ ๋ฌ์์ค ๊ฑฐ์์! ๐ขโก๏ธ๐
๊ทธ๋ผ ์ง๊ธ๋ถํฐ C ํ๋ก๊ทธ๋๋ฐ์ ์ธ๊ณ์์ ์๋์ ํจ์จ์ฑ์ ๋ํ์์ด ๋๋ ๋ฐฉ๋ฒ, ํจ๊ป ์์๋ณผ๊น์? ๋ ์ธ ๊ณ ! ๐โโ๏ธ๐จ
๐ ๋ฃจํ ์ธ๋กค๋ง: ๋ฐ๋ณต๋ฌธ์ ํผ์ณ๋ผ! ๐
์, ์ฌ๋ฌ๋ถ! ๋ฃจํ ์ธ๋กค๋ง์ด ๋ญ์ง ์์ธ์? ๋ชจ๋ฅด์ ๋ ๊ด์ฐฎ์์. ์ง๊ธ๋ถํฐ ์์ฃผ ์ฝ๊ณ ์ฌ๋ฏธ์๊ฒ ์ค๋ช ํด๋๋ฆด๊ฒ์. ๐
๋ฃจํ ์ธ๋กค๋ง์ ๋ฐ๋ณต๋ฌธ์ 'ํ์ดํค์น๋' ๊ธฐ๋ฒ์ด์์. ๋ง์น ๋กค์ผ์ดํฌ๋ฅผ ํผ์น๋ฏ์ด ๋ง์ด์ฃ ! ๐ฐ ์ด๋ ๊ฒ ํ๋ฉด ๋ญ๊ฐ ์ข๋๊ณ ์? ํ๋ก๊ทธ๋จ ์คํ ์๋๊ฐ '์~' ํ๊ณ ๋นจ๋ผ์ง๋ต๋๋ค!
๋ฃจํ ์ธ๋กค๋ง์ ํต์ฌ ํฌ์ธํธ:
- ๋ฐ๋ณต ํ์ ์ค์ด๊ธฐ ๐
- ๋ถ๊ธฐ ์์ธก ๊ฐ์ ํ๊ธฐ ๐ฎ
- ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ธฐํ ๋๋ฆฌ๊ธฐ โฟ
์, ์ด์ ์ค์ ์ฝ๋๋ก ํ๋ฒ ์ดํด๋ณผ๊น์? ์ฌ๋ฌ๋ถ์ ๋์ '๋ก๊ทธ๋๊ฒ' ๋จ๊ณ ๋ด์ฃผ์ธ์! ๐
// ์ผ๋ฐ์ ์ธ for ๋ฃจํ
for (int i = 0; i < 4; i++) {
sum += array[i];
}
// ์ธ๋กค๋ง๋ ๋ฃจํ
sum += array[0];
sum += array[1];
sum += array[2];
sum += array[3];
์ด๋์? ๋ ๋ฒ์งธ ์ฝ๋๊ฐ ์ข ๋ ๊ธธ์ด ๋ณด์ด์ฃ ? ํ์ง๋ง ์ด๊ฒ ๋ฐ๋ก ์๋์ ๋น๊ฒฐ์ด์์! ๋ฃจํ ์นด์ดํฐ ์ฒดํฌ, ์ฆ๊ฐ, ์กฐ๊ฑด ๊ฒ์ฌ ๊ฐ์ ์ค๋ฒํค๋๊ฐ ์น~ ์์ด์ก๊ฑฐ๋ ์. ๐
๋ฌผ๋ก ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋๊ฐ ์ข ๊ธธ์ด์ง ์ ์์ด์. ํ์ง๋ง ์๋๋ฅผ ์ํด์๋ผ๋ฉด... ์ฝ๊ฐ์ ํฌ์์ ๊ฐ์ํด์ผ๊ฒ ์ฃ ? ใ ใ ใ
์ด ๊ทธ๋ํ๋ฅผ ๋ณด์ธ์. ์ธ๋กค๋ง๋ ๋ฃจํ๊ฐ ์ผ๋ง๋ ๋นจ๋ฆฌ ๋๋๋์ง ํ๋์ ๋ณด์ด์ฃ ? ์ด๊ฒ ๋ฐ๋ก ๋ฃจํ ์ธ๋กค๋ง์ ๋ง๋ฒ์ ๋๋ค! โจ
ํ์ง๋ง ์ฃผ์ํ์ธ์! ๋ชจ๋ ์ํฉ์์ ๋ฃจํ ์ธ๋กค๋ง์ด ์ข์ ๊ฑด ์๋์์. ๋๋ก๋ ์คํ๋ ค ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆด ์๋ ์๋ต๋๋ค. ๊ทธ๋์ ํญ์ ๋ฒค์น๋งํน์ ํตํด ์ค์ ๋ก ์ฑ๋ฅ์ด ๊ฐ์ ๋๋์ง ํ์ธํด์ผ ํด์.
๐จ ์ฃผ์์ฌํญ:
- ๋๋ฌด ๋ง์ด ์ธ๋กค๋งํ๋ฉด ์ฝ๋ ํฌ๊ธฐ๊ฐ ์ปค์ ธ์ ๐
- ์บ์ ํจ์จ์ฑ์ด ๋จ์ด์ง ์ ์์ด์ ๐พ
- ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ์ ์์ด์ ๐
๊ทธ๋๋ ์ ์ ํ ์ฌ์ฉํ๋ฉด ์ ๋ง ํฐ ์ฑ๋ฅ ํฅ์์ ์ป์ ์ ์์ด์. ๋ง์น ์ฌ๋ฅ๋ท์์ ์ฌ๋ฌ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ค๋ ฅ์ ๊ณต์ ํ๋ฏ์ด, ๋ฃจํ ์ธ๋กค๋ง ๊ธฐ์ ๋ ์ฌ๋ฌ๋ถ์ ์ฝ๋์ ํฐ ๋์์ด ๋ ๊ฑฐ์์! ๐ช
์, ์ด์ ๋ฃจํ ์ธ๋กค๋ง์ ๋ํด ์ข ์๊ฒ ์ฃ ? ๋ค์์ ์ธ๋ผ์ธ ํ์ฅ์ ๋ํด ์์๋ณผ ์ฐจ๋ก์์. ์ค๋น๋์ จ๋์? ๊ณ ๊ณ ์ฝ! ๐
๐ ์ธ๋ผ์ธ ํ์ฅ: ํจ์๋ฅผ ํผ์ณ๋ผ! ๐
์, ์ด๋ฒ์ ์ธ๋ผ์ธ ํ์ฅ์ ๋ํด ์์๋ณผ ์ฐจ๋ก์์. ์ธ๋ผ์ธ ํ์ฅ์ด ๋ญ๋๊ณ ์? ๊ฐ๋จํ ๋งํด์ ํจ์ ํธ์ถ์ 'ํผ์ณ์' ์ง์ ์ฝ๋๋ก ๋์ฒดํ๋ ๊ฑฐ์์. ๋ง์น ํ๋ฐฐ ์์๋ฅผ ์ด์ด์ ๋ด์ฉ๋ฌผ์ ๊บผ๋ด๋ ๊ฒ์ฒ๋ผ์! ๐ฆโก๏ธ๐
์ธ๋ผ์ธ ํ์ฅ์ ํ๋ฉด ํจ์ ํธ์ถ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋๊ฐ ์์ด์ ธ์ ํ๋ก๊ทธ๋จ ์คํ ์๋๊ฐ 'ํ๋ฆฌ๋ฆญ~' ๋นจ๋ผ์ง๋ต๋๋ค! ๐
์ธ๋ผ์ธ ํ์ฅ์ ์ฅ์ :
- ํจ์ ํธ์ถ ์ค๋ฒํค๋ ์ ๊ฑฐ ๐ซ
- ์ปดํ์ผ๋ฌ ์ต์ ํ ๊ธฐํ ์ฆ๊ฐ ๐ง
- ์บ์ ํจ์จ์ฑ ํฅ์ ๐ป
์, ์ด์ ์ค์ ์ฝ๋๋ก ํ๋ฒ ์ดํด๋ณผ๊น์? ์ฌ๋ฌ๋ถ์ ๋ ๋์ '๋ก๊ทธ๋๊ฒ' ๋จ๊ณ ์ง์คํด์ฃผ์ธ์! ๐๐
// ์ผ๋ฐ์ ์ธ ํจ์ ํธ์ถ
int add(int a, int b) {
return a + b;
}
int result = add(5, 3);
// ์ธ๋ผ์ธ ํ์ฅ ํ
int result = 5 + 3;
์ด๋์? ๋ ๋ฒ์งธ ์ฝ๋๊ฐ ํจ์ฌ ๊ฐ๋จํด ๋ณด์ด์ฃ ? ์ด๊ฒ ๋ฐ๋ก ์ธ๋ผ์ธ ํ์ฅ์ ๋ง๋ฒ์ด์์! ํจ์ ํธ์ถ์ด ์ฌ๋ผ์ง๊ณ , ๋ฐ๋ก ์ฐ์ฐ์ด ์ด๋ฃจ์ด์ง๋๊น ์๋๊ฐ '์~' ํ๊ณ ๋นจ๋ผ์ง๋ ๊ฑฐ์ฃ ! ๐
๋ฌผ๋ก ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋ ํฌ๊ธฐ๊ฐ ์ข ์ปค์ง ์ ์์ด์. ํ์ง๋ง ์๋๋ฅผ ์ํด์๋ผ๋ฉด... ์ด ์ ๋ ์ฏค์ด์ผ! ใ ใ ใ
์ด ๊ทธ๋ํ๋ฅผ ๋ณด์ธ์. ์ธ๋ผ์ธ ํ์ฅ๋ ์ฝ๋๊ฐ ์ผ๋ง๋ ๋นจ๋ฆฌ ์คํ๋๋์ง ํ๋์ ๋ณด์ด์ฃ ? ์ด๊ฒ ๋ฐ๋ก ์ธ๋ผ์ธ ํ์ฅ์ ์๋ ฅ์ ๋๋ค! โก
ํ์ง๋ง ์ฃผ์ํ์ธ์! ๋ชจ๋ ํจ์๋ฅผ ์ธ๋ผ์ธ์ผ๋ก ๋ง๋ค๋ฉด ์คํ๋ ค ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ด์. ์ฝ๋ ํฌ๊ธฐ๊ฐ ๋๋ฌด ์ปค์ง๋ฉด ์บ์ ํจ์จ์ฑ์ด ๋จ์ด์ง ์ ์๊ฑฐ๋ ์. ๊ทธ๋์ ํญ์ ์ ์คํ๊ฒ ๊ฒฐ์ ํด์ผ ํด์.
๐จ ์ฃผ์์ฌํญ:
- ๋๋ฌด ํฐ ํจ์๋ ์ธ๋ผ์ธํ์ง ๋ง์ธ์ ๐ซ
- ์ฌ๊ท ํจ์๋ ์ธ๋ผ์ธํ๊ธฐ ์ด๋ ค์์ ๐
- ๋๋ฌด ์์ฃผ ํธ์ถ๋๋ ํจ์๋ ์ ์คํ ๊ฒฐ์ ํ์ธ์ ๐ค
๊ทธ๋๋ ์ ์ ํ ์ฌ์ฉํ๋ฉด ์ ๋ง ํฐ ์ฑ๋ฅ ํฅ์์ ์ป์ ์ ์์ด์. ๋ง์น ์ฌ๋ฅ๋ท์์ ์ฌ๋ฌ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ๋ ธํ์ฐ๋ฅผ ๊ณต์ ํ๋ฏ์ด, ์ธ๋ผ์ธ ํ์ฅ ๊ธฐ์ ๋ ์ฌ๋ฌ๋ถ์ ์ฝ๋์ ํฐ ๋์์ด ๋ ๊ฑฐ์์! ๐ช
์, ์ด์ ์ธ๋ผ์ธ ํ์ฅ์ ๋ํด ์ข ์๊ฒ ์ฃ ? ์ด ๋ ๊ฐ์ง ๊ธฐ๋ฒ์ ์ ํ์ฉํ๋ฉด ์ฌ๋ฌ๋ถ์ ์ฝ๋๋ ๊ด์์ผ๋ก ๋ฌ๋ฆด ์ค๋น๊ฐ ๋ ๊ฑฐ์์! ๐
๋ค์ ์น์ ์์๋ ์ด ๋ ๊ธฐ๋ฒ์ ์ค์ ๋ก ์ด๋ป๊ฒ ์ ์ฉํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ฃผ์ํด์ผ ํ ์ ์ ๋ฌด์์ธ์ง ๋ ์์ธํ ์์๋ณผ๊ฒ์. ์ค๋น๋์ จ๋์? Let's dive deeper! ๐โโ๏ธ
๐ ๏ธ ์ค์ ์ ์ฉ: ๋ฃจํ ์ธ๋กค๋ง๊ณผ ์ธ๋ผ์ธ ํ์ฅ ๐ ๏ธ
์, ์ด์ ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ด ๋ฃจํ ์ธ๋กค๋ง๊ณผ ์ธ๋ผ์ธ ํ์ฅ์ ์ค์ ๋ก ์ด๋ป๊ฒ ์ ์ฉํ๋์ง ์์๋ณผ ์ฐจ๋ก์์. ์ฌ๋ฌ๋ถ, ์์ ๋ฒจํธ ๋งค์ จ๋์? ์ง๊ธ๋ถํฐ ์ฝ๋ฉ์ ๊ณ ์๋๋ก๋ก ๋ฌ๋ ค๋ณผ ๊ฑฐ์์! ๐๏ธ๐จ
1. ๋ฃจํ ์ธ๋กค๋ง ์ค์ ์ ์ฉ
๋จผ์ ๋ฃจํ ์ธ๋กค๋ง๋ถํฐ ์์ํด๋ณผ๊น์? ์์ฃผ ๊ฐ๋จํ ์์ ๋ก ์์ํด๋ณผ๊ฒ์.
// ์๋ ์ฝ๋
int sum = 0;
for (int i = 0; i < 1000; i++) {
sum += arr[i];
}
// ์ธ๋กค๋ง ์ ์ฉ ํ
int sum = 0;
for (int i = 0; i < 1000; i += 4) {
sum += arr[i];
sum += arr[i+1];
sum += arr[i+2];
sum += arr[i+3];
}
์ด๋์? ๋ฃจํ๋ฅผ 4๋ฒ์ฉ ํผ์ณ์ ์ฒ๋ฆฌํ๋๊น ๋ฐ๋ณต ํ์๊ฐ 1/4๋ก ์ค์์ฃ ? ์ด๋ ๊ฒ ํ๋ฉด ๋ฃจํ ์นด์ดํฐ ์ฆ๊ฐ, ์กฐ๊ฑด ๊ฒ์ฌ ๊ฐ์ ์์ ์ด ์ค์ด๋ค์ด์ ์ฑ๋ฅ์ด ํฅ์๋ผ์!
ํ์ง๋ง ์ฃผ์ํ ์ ์ด ์์ด์. ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 4์ ๋ฐฐ์๊ฐ ์๋๋ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๊ทธ๋ด ๋ ์ด๋ ๊ฒ ์ฒ๋ฆฌํด์ผ ํด์:
int sum = 0;
int i;
for (i = 0; i < (1000 - 3); i += 4) {
sum += arr[i];
sum += arr[i+1];
sum += arr[i+2];
sum += arr[i+3];
}
// ๋๋จธ์ง ์ฒ๋ฆฌ
for (; i < 1000; i++) {
sum += arr[i];
}
์ด๋ ๊ฒ ํ๋ฉด ๋ฐฐ์ด ํฌ๊ธฐ์ ์๊ด์์ด ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ด์. ๋๋ํ์ฃ ? ๐
2. ์ธ๋ผ์ธ ํ์ฅ ์ค์ ์ ์ฉ
์ด๋ฒ์ ์ธ๋ผ์ธ ํ์ฅ์ ์ ์ฉํด๋ณผ๊น์? C์ธ์ด์์๋ inline ํค์๋๋ฅผ ์ฌ์ฉํด์ ์ปดํ์ผ๋ฌ์๊ฒ "์ด ํจ์ ์ข ์ธ๋ผ์ธ์ผ๋ก ์ฒ๋ฆฌํด์ค!"๋ผ๊ณ ์์ฒญํ ์ ์์ด์.
// ์๋ ์ฝ๋
int add(int a, int b) {
return a + b;
}
int result = add(5, 3);
// ์ธ๋ผ์ธ ์ ์ฉ ํ
inline int add(int a, int b) {
return a + b;
}
int result = add(5, 3); // ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ฅผ 'int result = 5 + 3;'๋ก ์ฒ๋ฆฌํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง
์ด๋ ๊ฒ ํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ add ํจ์๋ฅผ ํธ์ถํ๋ ๋์ ์ง์ ๋ง์ ์ฐ์ฐ์ ์ํํ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ ๊ฐ๋ฅ์ฑ์ด ๋์์ ธ์. ํจ์ ํธ์ถ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋๊ฐ ์ฌ๋ผ์ง๋๊น ์ฑ๋ฅ์ด ํฅ์๋๋ ๊ฑฐ์ฃ !
ํ์ง๋ง ์ฃผ์ํ์ธ์! inline์ ๊ทธ์ '์ ์'์ผ ๋ฟ์ด์์. ์ปดํ์ผ๋ฌ๊ฐ "์... ์ด๊ฑด ์ธ๋ผ์ธ์ผ๋ก ํ๋ฉด ์ ๋ ๊ฒ ๊ฐ์๋ฐ?"๋ผ๊ณ ํ๋จํ๋ฉด ๋ฌด์ํ ์๋ ์์ด์. ๊ทธ๋์ ์ค์ ๋ก ์ธ๋ผ์ธ ๋๋์ง ํ์ธํ๋ ค๋ฉด ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ๋ด์ผ ํ ์๋ ์๋ต๋๋ค. ๐
๐จ ์ธ๋ผ์ธ ํ์ฅ ์ฃผ์์ฌํญ:
- ๋๋ฌด ํฐ ํจ์๋ ์ธ๋ผ์ธํ์ง ๋ง์ธ์. ์ฝ๋ ํฌ๊ธฐ๊ฐ ๋๋ฌด ์ปค์ง ์ ์์ด์.
- ์์ฃผ ๋ณ๊ฒฝ๋๋ ํจ์๋ ์ธ๋ผ์ธํ์ง ์๋ ๊ฒ ์ข์์. ๋งค๋ฒ ์ฌ์ปดํ์ผํด์ผ ํ๊ฑฐ๋ ์.
- ์ฌ๊ท ํจ์๋ ์ธ๋ผ์ธํ๊ธฐ ์ด๋ ค์์. ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ป๊ฒ ํผ์ณ์ผ ํ ์ง ๋ชจ๋ฅผ ์ ์๊ฑฐ๋ ์.
3. ๋ ๊ธฐ๋ฒ ํจ๊ป ์ฌ์ฉํ๊ธฐ
์, ์ด์ ๋ ๊ธฐ๋ฒ์ ํจ๊ป ์ฌ์ฉํด๋ณผ๊น์? ์ด๋ ๊ฒ ํ๋ฉด ์ ๋ง ์์ฒญ๋ ์ฑ๋ฅ ํฅ์์ ์ป์ ์ ์์ด์!
// ์๋ ์ฝ๋
int dot_product(int *a, int *b, int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += a[i] * b[i];
}
return sum;
}
// ๋ฃจํ ์ธ๋กค๋ง + ์ธ๋ผ์ธ ํ์ฅ ์ ์ฉ ํ
inline int dot_product(int *a, int *b, int n) {
int sum = 0;
int i;
for (i = 0; i < (n - 3); i += 4) {
sum += a[i] * b[i];
sum += a[i+1] * b[i+1];
sum += a[i+2] * b[i+2];
sum += a[i+3] * b[i+3];
}
for (; i < n; i++) {
sum += a[i] * b[i];
}
return sum;
}
์ฐ์! ์ด๋ ๊ฒ ํ๋ฉด ํจ์ ํธ์ถ ์ค๋ฒํค๋๋ ์์ด์ง๊ณ , ๋ฃจํ ์คํ ํ์๋ ์ค์ด๋ค์ด์ ์ฑ๋ฅ์ด ํญ๋ฐ์ ์ผ๋ก ํฅ์๋ ๊ฑฐ์์! ๐
์ด ๊ทธ๋ํ๋ฅผ ๋ณด์ธ์. ๋ ๊ธฐ๋ฒ์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์คํ ์๊ฐ์ด ๊ฑฐ์ ์ ๋ฐ ์ดํ๋ก ์ค์ด๋ค ์ ์์ด์! ์ด๊ฒ ๋ฐ๋ก ์ต์ ํ์ ํ์ ๋๋ค! ๐ช
ํ์ง๋ง ๊ธฐ์ตํ์ธ์. ํญ์ ๋ฒค์น๋งํน์ ํตํด ์ค์ ๋ก ์ฑ๋ฅ์ด ํฅ์๋๋์ง ํ์ธํด์ผ ํด์. ๋๋ก๋ ์ด๋ฐ ์ต์ ํ๊ฐ ์คํ๋ ค ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆด ์๋ ์๊ฑฐ๋ ์. ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค์ํ ์ฌ๋ฅ์ ๋น๊ตํ๋ฏ์ด, ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๋ํด๋ณด๊ณ ๊ฐ์ฅ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ๋ ๊ฒ ์ค์ํด์!
์, ์ด์ ์ฌ๋ฌ๋ถ์ ๋ฃจํ ์ธ๋กค๋ง๊ณผ ์ธ๋ผ์ธ ํ์ฅ์ ์ค์ ๊ณ ์๊ฐ ๋ ๊ฑฐ์์! ์ด ๊ธฐ์ ๋ค์ ํ์ฉํด์ ์ฌ๋ฌ๋ถ์ ์ฝ๋๋ฅผ ๋์ฑ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด๋ณด์ธ์. ๋ค์ ์น์ ์์๋ ์ด ๊ธฐ๋ฒ๋ค์ ์ฌ์ฉํ ๋์ ์ฃผ์์ฌํญ๊ณผ ํ๋ค์ ๋ ์์ธํ ์์๋ณผ ๊ฑฐ์์. ์ค๋น๋์ จ๋์? Let's optimize! ๐
๐ฏ ์ต์ ํ์ ์ ์: ์ฃผ์์ฌํญ๊ณผ ๊ฟํ ๐ฏ
์, ์ฌ๋ฌ๋ถ! ์ด์ ๋ฃจํ ์ธ๋กค๋ง๊ณผ ์ธ๋ผ์ธ ํ์ฅ์ ๊ธฐ๋ณธ์ ๋ง์คํฐํ์ จ์ฃ ? ๐๐๐ ํ์ง๋ง ์ ๊น! ์ด ๊ฐ๋ ฅํ ๋ฌด๊ธฐ๋ค์ ํจ๋ถ๋ก ํ๋๋ฅด๋ฉด ์ ๋ผ์. ๋ง์น ์ฌ๋ฅ๋ท์์ ์์ ์ ์ฌ๋ฅ์ ์ ์ ํ ์ฌ์ฉํ๋ฏ์ด, ์ด ๊ธฐ์ ๋ค๋ ์ ์ฌ์ ์์ ์ฌ์ฉํด์ผ ์ง๊ฐ๋ฅผ ๋ฐํํ๋ต๋๋ค. ๊ทธ๋ผ ์ด์ ์ฃผ์์ฌํญ๊ณผ ๊ฟํ๋ค์ ์์๋ณผ๊น์? ๐ฏ
1. ๋ฃจํ ์ธ๋กค๋ง ์ฃผ์์ฌํญ
๐จ ์ฃผ์ํด์ผ ํ ์ :
- ์ฝ๋ ํฌ๊ธฐ ์ฆ๊ฐ: ๋๋ฌด ๋ง์ด ์ธ๋กค๋งํ๋ฉด ์ฝ๋๊ฐ ๋น๋ํด์ ธ์! ๐ฑ
- ์บ์ ํจ์จ์ฑ: ์ฝ๋๊ฐ ์ปค์ง๋ฉด ์บ์ ๋ฏธ์ค๊ฐ ์ฆ๊ฐํ ์ ์์ด์. ๐
- ๊ฐ๋ ์ฑ ์ ํ: ๊ณผ๋ํ ์ธ๋กค๋ง์ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค์ด์. ๐
๋ฃจํ ์ธ๋กค๋ง์ ๋ง์น ์๋ ์ ๊ฒ๊ณผ ๊ฐ์์. ์ ์ฌ ์ฉํ๋ฉด ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋์ง๋ง, ์๋ชป ์ฌ์ฉํ๋ฉด ์คํ๋ ค ์ญํจ๊ณผ๊ฐ ๋ ์ ์์ด์. ๊ทธ๋์ ํญ์ ์ ์คํ๊ฒ ์ ๊ทผํด์ผ ํด์.
์๋ฅผ ๋ค์ด, ์ด๋ฐ ์ํฉ์ ํ๋ฒ ์๊ฐํด๋ณผ๊น์?
// ๊ณผ๋ํ ๋ฃจํ ์ธ๋กค๋ง์ ์
for (int i = 0; i < 1000; i += 20) {
sum += arr[i];
sum += arr[i+1];
sum += arr[i+2];
// ... (์ค๋ต) ...
sum += arr[i+18];
sum += arr[i+19];
}
์ด๋ ๊ฒ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ฝ๋๊ฐ ์์ฒญ ๊ธธ์ด์ง๊ณ , ์บ์ ํจ์จ์ฑ๋ ๋จ์ด์ง ์ ์์ด์. ๊ทธ๋ฆฌ๊ณ ์ด ์ฝ๋๋ฅผ ๋ณด๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ "์ด๋จธ๋! ์ด๊ฒ ๋ญ์ผ?" ํ๊ณ ๋๋ ๊ฑฐ์์. ๐ฑ
2. ์ธ๋ผ์ธ ํ์ฅ ์ฃผ์์ฌํญ
๐จ ์ฃผ์ํด์ผ ํ ์ :
- ํจ์ ํฌ๊ธฐ: ํฐ ํจ์๋ฅผ ์ธ๋ผ์ธํ๋ฉด ์ฝ๋ ํฌ๊ธฐ๊ฐ ํญ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํด์! ๐ฅ
- ๋๋ฒ๊น ์ด๋ ค์: ์ธ๋ผ์ธ๋ ํจ์๋ ๋๋ฒ๊ฑฐ์์ ์ถ์ ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ด์. ๐ต๏ธโโ๏ธ
- ์ปดํ์ผ ์๊ฐ ์ฆ๊ฐ: ๊ณผ๋ํ ์ธ๋ผ์ธ์ ์ปดํ์ผ ์๊ฐ์ ๋๋ฆด ์ ์์ด์. โณ
์ธ๋ผ์ธ ํ์ฅ๋ ๋ง์ฐฌ๊ฐ์ง์์. ์ ์ฌ์ฉํ๋ฉด ์ข์ง๋ง, ๊ณผํ๋ฉด ๋ ์ด ๋ ์ ์์ด์. ํนํ ํฐ ํจ์๋ฅผ ์ธ๋ผ์ธํ ๋๋ ์ ๋ง ์กฐ์ฌํด์ผ ํด์.
์ด๋ฐ ์ํฉ์ ํ๋ฒ ์๊ฐํด๋ณผ๊น์?
inline void bigFunction() {
// ์๋ฐฑ ์ค์ ๋ณต์กํ ์ฝ๋
// ...
}
int main() {
for (int i = 0; i < 1000; i++) {
bigFunction(); // ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋๊ฐ ์์ฒญ ์ปค์ง ์ ์์ด์!
}
return 0;
}
์ด๋ ๊ฒ ํ๋ฉด ์ปดํ์ผ๋ ์ฝ๋์ ํฌ๊ธฐ๊ฐ ์์ฒญ๋๊ฒ ์ปค์ง ์ ์์ด์. ๊ทธ๋ฆฌ๊ณ ๋๋ฒ๊น ํ ๋๋ "์ด๋ผ? ์ด ์ฝ๋๊ฐ ์ด๋์ ์์ง?" ํ๊ณ ํท๊ฐ๋ฆด ์ ์์ฃ . ๐ตโ๐ซ
3. ์ต์ ํ์ ํฉ๊ธ๋ฅ
์, ์ด์ ์ต์ ํ์ ํฉ๊ธ๋ฅ ์ ์๋ ค๋๋ฆด๊ฒ์. ์ ๊ธฐ์ตํ์ธ์!
๐ ์ต์ ํ์ ํฉ๊ธ๋ฅ ๐
"๋จผ์ ์ธก์ ํ๊ณ , ๊ทธ ๋ค์์ ์ต์ ํํ๋ผ!"
์ด๊ฒ ๋ฌด์จ ๋ป์ด๋๊ณ ์? ๋ฐ๋ก ์ด๊ฑฐ์์:
- ๋จผ์ ์ธก์ ํ์ธ์: ์ฝ๋์ ์ด๋ ๋ถ๋ถ์ด ๋๋ฆฐ์ง ์ ํํ ํ์ ํ์ธ์.
- ๋ณ๋ชฉ ์ง์ ์ ์ฐพ์ผ์ธ์: ๊ฐ์ฅ ์๊ฐ์ ๋ง์ด ์ก์๋จน๋ ๋ถ๋ถ์ ์ฐพ์๋ด์ธ์.
- ์ต์ ํ๋ฅผ ์ ์ฉํ์ธ์: ๋ฃจํ ์ธ๋กค๋ง์ด๋ ์ธ๋ผ์ธ ํ์ฅ์ ์๋ํด๋ณด์ธ์.
- ๋ค์ ์ธก์ ํ์ธ์: ์ ๋ง๋ก ์ฑ๋ฅ์ด ํฅ์๋๋์ง ํ์ธํ์ธ์.
์ด๋ ๊ฒ ํ๋ฉด ๋ถํ์ํ ์ต์ ํ๋ฅผ ํผํ๊ณ , ์ ๋ง ํ์ํ ๊ณณ์ ์ง์คํ ์ ์์ด์. ๋ง์น ์ฌ๋ฅ๋ท์์ ์์ ์ ๊ฐ์ฅ ๋ฐ์ด๋ ์ฌ๋ฅ์ ์ง์คํ๋ ๊ฒ์ฒ๋ผ์! ๐
4. ์ต์ ํ์ ๊ฟํ
๋ง์ง๋ง์ผ๋ก, ๋ช ๊ฐ์ง ๊ฟํ์ ๋๋ฆด๊ฒ์. ์ด๊ฑธ ๊ธฐ์ตํ๋ฉด ์ฌ๋ฌ๋ถ๋ ์ต์ ํ์ ๋ฌ์ธ์ด ๋ ์ ์์ด์!
๐ฏ ์ต์ ํ ๊ฟํ:
- ์ปดํ์ผ๋ฌ ์ต์ ํ ์ต์ ์ ํ์ฉํ์ธ์. (์: gcc์ -O2, -O3) ๐ ๏ธ
- ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ์ ํํ ๋ณ๋ชฉ ์ง์ ์ ์ฐพ์ผ์ธ์. ๐
- ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ ์ด ๋๋ก๋ ์ ์์ค ์ต์ ํ๋ณด๋ค ๋ ํจ๊ณผ์ ์ผ ์ ์์ด์. ๐ง
- ์ต์ ํ๋์จ์ด ๊ธฐ๋ฅ(SIMD ๋ฑ)์ ํ์ฉํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด์์. ๐ป
- ํญ์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๊ณ ๋ คํ์ธ์. ๋๋ฌด ๋ณต์กํ ์ต์ ํ๋ ๋ ์ด ๋ ์ ์์ด์. ๐
์, ์ด์ ์ฌ๋ฌ๋ถ์ ๋ฃจํ ์ธ๋กค๋ง๊ณผ ์ธ๋ผ์ธ ํ์ฅ์ ์ง์ ํ ๋ง์คํฐ๊ฐ ๋์ จ์ด์! ๐ ์ด ๊ธฐ์ ๋ค์ ํ๋ช ํ๊ฒ ์ฌ์ฉํ๋ฉด, ์ฌ๋ฌ๋ถ์ ์ฝ๋๋ ๋ง์น ๊ด์์ผ๋ก ๋ฌ๋ฆฌ๋ ์ฐ์ฃผ์ ์ฒ๋ผ ๋นจ๋ผ์ง ๊ฑฐ์์! ๐
ํ์ง๋ง ๊ธฐ์ตํ์ธ์. ์ต์ ํ๋ ๋ง๋ฒ์ด ์๋์์. ํญ์ ์ธก์ ํ๊ณ , ๋ถ์ํ๊ณ , ์ ์คํ๊ฒ ์ ์ฉํด์ผ ํด์. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฑด, ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํด์น์ง ์๋ ๋ฒ์์์ ์ต์ ํ๋ฅผ ํด์ผ ํ๋ค๋ ๊ฑฐ์์.
์ฌ๋ฌ๋ถ์ ์ฝ๋๊ฐ ๋น์ ์๋๋ก ๋ฌ๋ฆฌ๋ ๊ทธ๋ ๊น์ง, ํ์ดํ ! ๐ช๐
๐ญ ๊ฒฐ๋ก : ์ต์ ํ์ ์์ ๐ญ
์, ์ฌ๋ฌ๋ถ! ๊ธด ์ฌ์ ๋์ ์ฐ๋ฆฌ๋ ๋๋์ด ์ต์ ํ์ ์ ์์ ๋๋ฌํ์ด์. ๐๐๐ ๋ฃจํ ์ธ๋กค๋ง๊ณผ ์ธ๋ผ์ธ ํ์ฅ์ด๋ผ๋ ๊ฐ๋ ฅํ ๋ฌด๊ธฐ๋ฅผ ์์ ๋ฃ์์ฃ . ํ์ง๋ง ์ด์ ์ง์ง ์ค์ํ ๊ฑด ์ด ๋ฌด๊ธฐ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๋์์!
์ต์ ํ๋ ๋ง์น ์๋ฆฌ์ ๊ฐ์์. ์ฌ๋ฃ(์ฝ๋)๊ฐ ์ข์์ผ ํ๊ณ , ์ ์ ํ ์๋ (์ต์ ํ ๊ธฐ๋ฒ)์ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ๋ฌด์๋ณด๋ค ์๋ฆฌ์ฌ(ํ๋ก๊ทธ๋๋จธ)์ ์ผ์ค๊ฐ ์ค์ํ์ฃ . ๐ณ
๐ ์ต์ ํ์ ํต์ฌ ํฌ์ธํธ:
- ํญ์ ์ธก์ ํ๊ณ ๋ถ์ํ์ธ์. ์ถ์ธกํ์ง ๋ง์ธ์!
- ํฐ ๊ทธ๋ฆผ์ ๋ณด์ธ์. ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ ์ด ๋ ํจ๊ณผ์ ์ผ ์ ์์ด์.
- ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฌ์ํ์ง ๋ง์ธ์.
- ์ต์ ์ปดํ์ผ๋ฌ์ ํ๋์จ์ด ๊ธฐ๋ฅ์ ํ์ฉํ์ธ์.
- ํ์๋ค๊ณผ ์ํตํ์ธ์. ์ต์ ํ๋ ํ ์คํฌ์ธ ์์!
๋ฃจํ ์ธ๋กค๋ง๊ณผ ์ธ๋ผ์ธ ํ์ฅ์ ์ ๋ง ๊ฐ๋ ฅํ ๊ธฐ๋ฒ์ด์์. ํ์ง๋ง ๊ทธ๋งํผ ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํด์. ๋ง์น ์ฌ๋ฅ๋ท์์ ์์ ์ ์ฌ๋ฅ์ ๋ฝ๋ด๋ฏ์ด, ์ด ๊ธฐ์ ๋ค๋ ์ ์ฌ์ ์์ ์ฌ์ฉํด์ผ ๋น์ ๋ฐํ๋ต๋๋ค. โจ
๊ทธ๋ฆฌ๊ณ ์์ง ๋ง์ธ์. ์ต์ ํ๋ ๋์ด ์๋ ์ฌ์ ์ด์์. ํญ์ ์๋ก์ด ๊ธฐ์ ๊ณผ ๋ฐฉ๋ฒ์ด ๋์ค๊ณ ์์ฃ . ๊ทธ๋ฌ๋ ๊ณ์ ๊ณต๋ถํ๊ณ , ์คํํ๊ณ , ์ฑ์ฅํด ๋๊ฐ์ธ์!
๋ง์ง๋ง์ผ๋ก, ์ฌ๋ฌ๋ถ์๊ฒ ์์ ๋์ ์ ๋๋ฆด๊ฒ์. ์ง๊ธ ์์ ์ค์ธ ํ๋ก์ ํธ์์ ๊ฐ์ฅ ๋๋ฆฐ ๋ถ๋ถ์ ์ฐพ์๋ณด์ธ์. ๊ทธ๋ฆฌ๊ณ ์ค๋ ๋ฐฐ์ด ๊ธฐ๋ฒ๋ค์ ์ ์ฉํด๋ณด์ธ์. ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ๋์ฌ์ง ์ ๋ง ๊ถ๊ธํ์ง ์๋์? ๐ค
์, ์ด์ ์ฌ๋ฌ๋ถ์ ์ต์ ํ์ ๋ฌ์ธ์ด ๋์ จ์ด์! ๐ ์ด ์ง์์ ๊ฐ์ง๊ณ ์ธ์์ ๋๋ผ๊ฒ ํ ์ค๋น๊ฐ ๋์ จ๋์? ์ฌ๋ฌ๋ถ์ ์ฝ๋๊ฐ ๋น์ฒ๋ผ ๋น ๋ฅด๊ฒ ๋ฌ๋ฆฌ๋ ๊ทธ ๋ ์ ๊ธฐ๋ํ๊ณ ์์๊ฒ์!
๊ทธ๋ผ ์ด๋ง ์ด์ด... ์์ฐธ! ๋ง์ง๋ง์ผ๋ก ํ๋ง๋๋ง ๋ ํ ๊ฒ์.
๐ "์ฝ๋๋ ๋น ๋ฅด๊ฒ, ํ์ง๋ง ๊ฐ๋ฐ์ ์ฒ์ฒํ!" ๐ข
ํ์ดํ ! ์ฌ๋ฌ๋ถ์ ์ฝ๋ฉ ๋ผ์ดํ์ ํ์ด์ด ๊ฐ๋ํ๊ธฐ๋ฅผ! ๐๐
- ์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์ฌ๋ฅ๋ท์ ์ต์ AI ๊ธฐ์ ๊ณผ ๋ฒ๋ฅ ์ ๊ธฐ๋ฐํ์ฌ ์์ฌ์ ์ง์ ์ฌ์ฐ๊ถ์ ์ ๊ทน์ ์ผ๋ก ๋ณดํธํ๋ฉฐ,
๋ฌด๋จ ์ฌ์ฉ ๋ฐ ์นจํด ํ์์ ๋ํด ๋ฒ์ ๋์์ ํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ ํฉ๋๋ค.
ยฉ 2025 ์ฌ๋ฅ๋ท | All rights reserved.
๋๊ธ 0๊ฐ