๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[์ปดํŒŒ์ผ] ์ธ๋ผ์ธ ์ตœ์ ํ™”

์ถœ์ฒ˜

ChatGPT

Gemini


์ธ๋ผ์ธ ์ตœ์ ํ™” (Inline Optimization)๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์ด ์ตœ์ ํ™” ๊ธฐ๋ฒ•์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ณ  ์‹คํ–‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

 

์ธ๋ผ์ธ ์ตœ์ ํ™”์˜ ์ฃผ์š” ๊ฐœ๋…

1. ํ•จ์ˆ˜ ์ธ๋ผ์ธํ™” Function Inlining

  • ์ธ๋ผ์ธ ์ตœ์ ํ™”์˜ ํ•ต์‹ฌ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ง์ ‘ ๊ทธ ํ•จ์ˆ˜์˜ ๋ณธ๋ฌธ์œผ๋กœ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋Œ€์‹  ํ•จ์ˆ˜์˜ ์ฝ”๋“œ ์ž์ฒด๋ฅผ ํ˜ธ์ถœ ์ง€์ ์— ์‚ฝ์ž…ํ•œ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•จ์ˆ˜ ํ˜ธ์ถœ์— ๋”ฐ๋ฅธ ์Šคํƒ ํ”„๋ ˆ์ž„ ์ƒ์„ฑ๊ณผ ๋ฐ˜ํ™˜ ์ž‘์—…์ด ์‚ฌ๋ผ์ ธ ํ˜ธ์ถœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ค„์–ด๋‹ค.

 

2. ํ˜ธ์ถœ ์˜ค๋ฒ„ํ—ค๋“œ ๊ฐ์†Œ

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค: ์Šคํƒ ํ”„๋ ˆ์ž„์„ ์„ค์ •ํ•˜๊ณ , ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ฉฐ, ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ˆ˜์‹ ํ•˜๊ณ , ํ˜ธ์ถœ ํ›„ ์›๋ž˜ ์œ„์น˜๋กœ ๋ณต๊ท€ํ•œ๋‹ค.
  • ์ธ๋ผ์ธ ์ตœ์ ํ™”๋Š” ์ด๋Ÿฌํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ํ•จ์ˆ˜์˜ ์ฝ”๋“œ๊ฐ€ ํ˜ธ์ถœ ์ง€์ ์— ์ง์ ‘ ์‚ฝ์ž…๋˜๋ฏ€๋กœ, ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์‚ฌ๋ผ์ง€๊ณ  ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋‹ค.

 

3. ์ตœ์ ํ™”๋œ ์ฝ”๋“œ ์ƒ์„ฑ

  • ์ธ๋ผ์ธ ์ตœ์ ํ™”๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ๋„์™€์ค€๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ž์ฃผ ํ˜ธ์ถœ๋˜๋Š” ์ž‘์€ ํ•จ์ˆ˜๋Š” ์ธ๋ผ์ธํ™”ํ•˜์—ฌ ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ธ๋ผ์ธ ์ž‘๋™ ๋ฐฉ๋ฒ•

1. ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ถ€๋ถ„ ์‹๋ณ„

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ถ€๋ถ„์„ ์ฐพ๋Š”๋‹ค.

2. ํ•จ์ˆ˜ ์ฝ”๋“œ ๋Œ€์ฒด

์ฐพ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ถ€๋ถ„์— ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์‚ฝ์ž…ํ•œ๋‹ค.

3. ์ตœ์ ํ™”

์‚ฝ์ž…๋œ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ตœ์ ํ™”ํ•œ๋‹ค.

 

 

์ธ๋ผ์ธ ์ตœ์ ํ™”์™€ ์žฅ์ ๊ณผ ๋‹จ์ 

์žฅ์ 

์„ฑ๋Šฅ ํ–ฅ์ƒ

ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ, ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ์ž‘์€ ํ•จ์ˆ˜์—์„œ ์œ ์šฉ๋‹ค.

์บ์‹œ ํšจ์œจ์„ฑ

ํ•จ์ˆ˜ ์ฝ”๋“œ๊ฐ€ ํ˜ธ์ถœ ์ง€์ ์— ์ง์ ‘ ์‚ฝ์ž…๋˜๋ฏ€๋กœ, CPU ์บ์‹œ์˜ ํšจ์œจ์„ฑ์ด ๋†’์•„์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์ 

์ฝ”๋“œ ํฌ๊ธฐ ์ฆ๊ฐ€

์ธ๋ผ์ธ ์ตœ์ ํ™”๋Š” ์ฝ”๋“œ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ธ๋ผ์ธํ™”๋˜๋ฉด, ์ „์ฒด ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋””๋ฒ„๊น… ์–ด๋ ค์›€

์ธ๋ผ์ธ ์ตœ์ ํ™”๋Š” ์ฝ”๋“œ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ธ๋ผ์ธํ™”๋˜๋ฉด, ์ „์ฒด ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

์ธ๋ผ์ธ ์ตœ์ ํ™” ์˜ˆ์‹œ

C++ ์˜ˆ์‹œ

inline int square(int x) {
    return x * x;
}

int main() {
    int a = square(5); // square(5) ๋Œ€์‹  5 * 5๊ฐ€ ์‚ฝ์ž…๋ฉ๋‹ˆ๋‹ค.
    return 0;
}

 

์œ„์˜ C++ ์ฝ”๋“œ์—์„œ square ํ•จ์ˆ˜๋Š” ์ธ๋ผ์ธ ํ•จ์ˆ˜๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค. main ํ•จ์ˆ˜์—์„œ square(5) ํ˜ธ์ถœ์ด 5 * 5๋กœ ์ธ๋ผ์ธํ™”๋  ์ˆ˜ ์žˆ๋‹ค.

 

์ž๋ฐ” ์˜ˆ์‹œ

์ž๋ฐ”์—์„œ๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋Ÿฐํƒ€์ž„์— ์ธ๋ผ์ธ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

public class Example {
    public int square(int x) {
        return x * x;
    }

    public void compute() {
        int a = square(5); // JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด ํ˜ธ์ถœ์„ ์ธ๋ผ์ธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    }
}

 

์ž๋ฐ”์˜ ๊ฒฝ์šฐ, JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋Ÿฐํƒ€์ž„์— square(5) ํ˜ธ์ถœ์„ 5 * 5๋กœ ์ธ๋ผ์ธํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


ChatGPT์˜ ์ถœ์ฒ˜

์ถœ์ฒ˜

 

Gemini์˜ ์ถœ์ฒ˜

์ฐธ๊ณ  ์ž๋ฃŒ: