Profile Guided Optimization (PGO)

Profile Guided Optimization, ์ดํ•˜ PGO๋Š” ๊ฐ€์žฅ ๊ณต๊ฒฉ์ ์ธ ์ปดํŒŒ์ผ ์ตœ์ ํ™” ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋‹ค.

์ปดํŒŒ์ผ ์–ธ์–ด๋ฅผ ์“ฐ๊ณ  ์ตœ์ ํ™” ์˜ต์…˜์„ ์ด๊ฒƒ์ €๊ฒƒ ๋„ฃ๋”๋ผ๋„, ์ตœ์ ํ™”์— ํ•œ๊ณ„๋Š” ์˜จ๋‹ค.

์ตœ์ ํ™” ํžŒํŠธ๋ฅผ ํ†ตํ•œ ๋งˆ์ดํฌ๋กœ๋งค๋‹ˆ์ง•๊ณผ ํ‘๋งˆ๋ฒ•์„ ๋–ก์น ํ•œ๋‹ค๋ฉด ๋‹น์žฅ์€ ์–ด๋–ป๊ฒŒ ๋˜๋”๋ผ๋„, ๊ทธ๊ฑด ๋ณ„๋กœ ์ง€์† ๊ฐ€๋Šฅํ•˜์ง€๊ฐ€ ์•Š๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
์ด๋Ÿด ๋•Œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ์ ‘๊ทผ๋ฒ•์ด ์ด PGO๋ผ๋Š” ๊ฒƒ์ด๋‹ค.




์ผ๋ฐ˜์ ์ธ ์ปดํŒŒ์ผ

์šฐ๋ฆฌ๊ฐ€ ์ปดํŒŒ์ผ์ด๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์ •์  ๋ถ„์„(Static program analysis)์„ ํ†ตํ•ด์„œ ์—„๊ฒฉํ•œ ๊ทœ์น™ ๊ธฐ๋ฐ˜์œผ๋กœ, ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

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

PGO๋Š” ์ด๋Ÿฐ ํ•œ๊ณ„์ ์„ ๋ณด์™„ํ•˜๊ณ ์ž ์ƒ๊ธด ๊ฐœ๋…์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.




PGO์˜ ์ ์šฉ ๊ณผ์ •

PGO๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์ˆ˜ํ–‰๋œ๋‹ค.

  1. ์ผ๋‹จ ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ง‘์„ ํ™œ์„ฑํ™”ํ•œ ์ฑ„๋กœ ์ปดํŒŒ์ผํ•ด์„œ ์‹คํ–‰ํŒŒ์ผ์„ ๋ฝ‘๋Š”๋‹ค.

  2. ์‹คํ–‰ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ณ , ์‹ค์ œ ์‚ฌ์šฉ์‚ฌ๋ก€์— ๋งž๊ฒŒ ์‹คํ–‰์„ ์œ ๋„ํ•˜๋ฉด์„œ ํ”„๋กœํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘๋Š”๋‹ค.

  3. ํ”„๋กœํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์˜ต์…˜์„ ์ฃผ๊ณ  ๋‹ค์‹œ ์ปดํŒŒ์ผ์„ ํ•œ๋‹ค.

  4. ๊ทธ๋Ÿฌ๋ฉด ์ปดํŒฉํŠธํ•˜๊ฒŒ ์ตœ์ ํ™”๋œ ์‹คํ–‰ํŒŒ์ผ์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์ด๋‹ค.



Go์™€ Rust(LLVM)์˜ ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ๋งํฌ๋กœ ๋‹ฌ์•„๋†“๊ฒ ๋‹ค.
https://blog.naver.com/sssang97/222888877448
https://blog.naver.com/sssang97/223176448202




PGO๊ฐ€ ์ตœ์ ํ™”๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•

PGO์˜ ์ตœ์ ํ™” ์ˆ˜์ค€๊ณผ ์ ‘๊ทผ๋ฒ•์€ ํˆด์ฒด์ธ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” LLVM์„ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•ด๋ณด๊ฒ ๋‹ค.
์•„๋ž˜ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•˜๊ณ ๋„ ์ ‘๊ทผ๋ฒ•์€ ๋งค์šฐ ๋‹ค์–‘ํ•˜๋‹ค. ์ž์งˆ๊ตฌ๋ ˆํ•œ ๊ฒƒ๊นŒ์ง€ ๋‹ค๋ฃจ๋ฉด ๋๋„ ์—†์–ด์„œ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ ๋ช‡๊ฐ€์ง€๋งŒ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.



ํ•จ์ˆ˜ ์ธ๋ผ์ด๋‹

ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ์ƒ๊ฐ๋ณด๋‹ค ๋ฌด๊ฑฐ์šด ๋ฉด์ด ์žˆ๋Š” ๋™์ž‘์ด๋‹ค.
์ธ์ž ๋„˜๊ธธ๋•Œ๋งˆ๋‹ค ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์Œ“๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์Šคํƒ์„ ์Œ“์•„์•ผ ํ•˜๊ณ , ํ•จ์ˆ˜ ์ง„์ž… ์‹œ์ ๊ณผ ํƒˆ์ถœ ์‹œ์ ๋งˆ๋‹ค jump ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋‚˜๋งˆ ํ•จ์ˆ˜๋กœ ์ง„์ž…ํ•  ๋•Œ๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ ๊ณ ์ •์ฃผ์†Œ๋‹ˆ๊นŒ ๊ดœ์ฐฎ์€๋ฐ, ํ•จ์ˆ˜๋ฅผ ์ดํƒˆํ•  ๋•Œ๋Š” return address๊ฐ€ ์—ฌ๋Ÿฌ๊ณณ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„๊ธฐ ์˜ˆ์ธก์œผ๋กœ ์ธํ•œ ์ตœ์ ํ™”๊ฐ€ ์ž˜ ์•ˆ๋˜๋Š” ํŽธ์ด๋‹ค.

๊ทธ๋ž˜์„œ ํ•จ์ˆ˜ ๋‹จ์œ„๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋งคํฌ๋กœ์ฒ˜๋Ÿผ ์ฝ”๋“œ ๋ณธ๋ฌธ์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์„ ์ธ๋ผ์ด๋‹์ด๋ผ๊ณ  ํ•œ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋‚˜, ๊ทธ๊ฒŒ ํ•ญ์ƒ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š”๊ฑด ์•„๋‹ˆ๋ผ์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋“ค๋„ ๊ทธ๋•Œ๊ทธ๋•Œ ์ƒํ™ฉ ๋ด๊ฐ€๋ฉด์„œ ํ•œ๋‹ค.
๋งˆ๊ตฌ์žก์ด๋กœ ๋„ฃ์–ด๋Œ€๋ฉด ์ฝ”๋“œ ํฌ๊ธฐ๊ฐ€ ๋น„๋Œ€ํ•ด์ ธ์„œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ƒฅ ์ปค์ ธ์„œ ๋ช…๋ น์–ด ์บ์‹œ ๋กœ๋“œ๋ฅผ ์ œ๋Œ€๋กœ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๊ณ , branch prediction์ด ๋” ๋ณต์žกํ•ด์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

์ธ๋ผ์ธ์—๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ํŠน์ • ํ•จ์ˆ˜๊ฐ€ ๊ทธ๋ƒฅ ๋งŽ์ด ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ผ๋ฉด ๊ทธ ํ•จ์ˆ˜๋ฅผ ๋ชจ๋“  ํ˜ธ์ถœ ์ง€์ ์— ์ธ๋ผ์ธํ•  ์ˆ˜๋„ ์žˆ๊ณ , ํŠน์ • ํ•จ์ˆ˜๊ฐ€ ํŠน์ • ๊ฒฝ๋กœ์—์„œ๋งŒ ์ž์ฃผ ํ˜ธ์ถœ๋œ๋‹ค๋ฉด ๊ฑฐ๊ธฐ์—๋งŒ ์ธ๋ผ์ธ์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

PGO๋ฅผ ์ ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” ํ›„์ž, ์ž์ฃผ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ๋” ๊ณต๊ฒฉ์ ์ธ ์ธ๋ผ์ด๋‹์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.



๋ถ„๊ธฐ ์˜ˆ์ธก (branch prediction)

branch, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์กฐ๊ฑด ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋‹ค.
CPU๋Š” branch ๋ช…๋ น์–ด๋ฅผ ๋งŒ๋‚˜๋ฉด ๋‹ค์Œ์— ์‹คํ–‰๋  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ์˜ˆ์ธกํ•œ๋‹ค. ์˜ˆ์ธก์ด ๋งž๋‹ค๋ฉด ๊ต‰์žฅํžˆ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹คํŒจํ•œ๋‹ค๋ฉด ๊ทธ ์‹œ์ ์— ๋‹ค์‹œ ์ฝ”๋“œ๋ฅผ ์บ์‹œ๋กœ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”์ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

PGO๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์‹คํ–‰ ๊ธฐ๋ก์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์ฃผ ๊ฑธ๋ฆฌ๋Š” hot branch์™€ ๋œ ๊ฑธ๋ฆฌ๋Š” cold branch๋ฅผ ํ†ต๊ณ„์ ์œผ๋กœ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰ ๋นˆ๋„๊ฐ€ ๋†’์€ hot branch๋ฅผ ๊ฐ€๊นŒ์ด ๋ฐฐ์น˜ํ•ด์„œ ์บ์‹œ์— ํƒ€๋„๋ก ํ•˜๊ณ , ์‹คํ–‰ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ cold branch๋ฅผ ๋ฉ€๋ฆฌ ๋ฐฐ์น˜ํ•ด์„œ ๋ถ„๊ธฐ ์˜ˆ์ธก๋ฅ ์ด ๋†’์•„์ง€๋„๋ก ์œ ๋„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.



์ฝ”๋“œ ๋ ˆ์ด์•„์›ƒ ์ตœ์ ํ™”

์š”์ƒˆ ๊ณ ๊ธ‰ ์–ธ์–ด๋“ค์—์„œ๋Š” ํ•จ์ˆ˜๋‚˜ ์ฝ”๋“œ์˜ ์œ„์น˜๊ฐ€ ์„ฑ๋Šฅ๊ณผ ์—ฐ๊ด€์ด ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜์ง€๋งŒ, ์‹ค์ œ ์–ด์…ˆ๋ธ”๋ฆฌ ์ˆ˜์ค€์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.
CPU๋ผ๋Š” ๋…€์„๋„ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ํ•ญ์ƒ ๋“ค๊ณ  ์žˆ์ง€๋Š” ์•Š๊ณ , ๊ทธ ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ ๊ฐ€๊นŒ์ด ์œ„์น˜ํ•ด์•ผ์ง€ ์บ์‹œ์—์„œ ๋น ๋ฅด๊ฒŒ ๋กœ๋“œํ•ด์„œ ์‹คํ–‰์„ ํ•  ์ˆ˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ PGO๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ ์‹คํ–‰ ์ˆœ์„œ์— ๊ธฐ๋ฐ˜ํ•ด์„œ ๋ช…๋ น์–ด ๋ธ”๋ก ๋ฐฐ์น˜ ์ˆœ์„œ๋ฅผ ์กฐ์ •ํ•˜๊ณ , ์ž์ฃผ ์‹คํ–‰๋˜๋Š” Hot ์ฝ”๋“œ๋ฅผ ๊ฐ€๊นŒ์ด์—, ๋œ ์‹คํ–‰๋˜๋Š” Cold ์ฝ”๋“œ๋ฅผ ๋ฉ€๋ฆฌ์— ๋ฐฐ์น˜ํ•œ๋‹ค.



๊ฐ„์ ‘ ํ˜ธ์ถœ ์ตœ์ ํ™” (indirect call)

๊ฐ„์ ‘ ํ˜ธ์ถœ์ด๋ž€ ๊ฐ„์ ‘ ๋ถ„๊ธฐ(indirect branch)์— ์˜ํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
๊ฐ„์ ‘ ๋ถ„๊ธฐ๋ž€, ๋ฉ”๋ชจ๋ฆฌ(RAM)์˜ ์ €์žฅ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๊ธฐ๋ฅผ ํƒœ์šฐ๋Š” ๊ฒƒ์ด๋‹ค.

C++์˜ ๊ฐ€์ƒํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•ด์„œ, ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ์˜ ๋ฉ”์„œ๋“œ ๋‹คํ˜•์„ฑ ๋™์ž‘์€ ์ „๋ถ€ ๊ฐ„์ ‘ ๋ถ„๊ธฐ๋กœ ๊ตฌํ˜„๋œ๋‹ค. ์‹ค์ œ ๊ฐ์ฒด์˜ ํƒ€์ž… ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด๋‹น ํƒ€์ž…์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ฐ„์ ‘ ๋ถ„๊ธฐ๋Š” ๋ถ„๊ธฐ ์˜ˆ์ธก(branch prediction)์„ ๋ง๊ฐ€๋œจ๋ฆฌ๋Š” ์ฃผ๋ฒ” ์ค‘ ํ•˜๋‚˜์ธ์ง€๋ผ, ์ด๋Ÿฐ ๊ฐ„์ ‘ ํ˜ธ์ถœ์ด ์Œ“์ด๋‹ค๋ณด๋ฉด ์„ฑ๋Šฅ์— ๊ฝค ํฐ ์•…์˜ํ–ฅ์„ ์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

PGO๋ฅผ ์ ์šฉํ•œ๋‹ค๋ฉด ์‹ค์ œ ์‹คํ–‰ ๊ธฐ๋ก์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ„์ ‘๋ถ„๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” branch prediction์„ ์ถ”๊ฐ€ํ•ด์ฃผ๊ฑฐ๋‚˜, ๊ฐ€์ƒํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์ธ๋ผ์ด๋‹ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.



๋ฃจํ”„ ์ตœ์ ํ™”: ๋ฃจํ”„ ์–ธ๋กค๋ง

๋ฃจํ”„ ์–ธ๋กค๋ง์€ ๋ฃจํ”„ ๋‚ด ์—ฐ์‚ฐ ๋™์ž‘์„ ์••์ถ•ํ•˜๊ณ  branch ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋Š” ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์ด๋‹ค.
PGO๋ฅผ ์ ์šฉํ•˜๋ฉด ์‹คํ–‰ ๋นˆ๋„๊ฐ€ ๋†’์€ ๋ฃจํ”„๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์–ธ๋กค๋ง์„ ์‹œ๋„ํ•œ๋‹ค.

https://blog.naver.com/sssang97/221800631864



Dead Code ์ œ๊ฑฐ

Dead Code ์ œ๊ฑฐ, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ œ๊ฑฐ๋Š” ์‚ฌ์‹ค ์ผ๋ฐ˜ ์ปดํŒŒ์ผ์—์„œ๋„ ์ถฉ๋ถ„ํžˆ ๊ฑธ๋Ÿฌ์งˆ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๊ธด ํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ ์‹œ์ ์—์„œ๋Š” ์•Œ ์ˆ˜ ์—†๊ณ  ์‹ค์ œ๋กœ ์‹คํ–‰์„ ํ•ด๋ด์•ผ dead code์ธ์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋”๋Ÿฌ ์žˆ๋‹ค.
๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งํ‚น์ด๋‚˜, OS๋‚˜ ๋“œ๋ผ์ด๋ฒ„ ์ƒํƒœ์— ๋”ฐ๋ผ์„œ ์ง„์ž… ๊ฐ€๋Šฅ/๋ถˆ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์ง€์ ์ด ์ •ํ•ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Ÿฐ๊ฑด PGO๋‚˜ JIT์„ ํƒœ์šด ๊ฒฝ์šฐ์—๋งŒ ํ™•์‹คํ•˜๊ฒŒ ํŒ๋‹จํ•ด์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ์™€ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.




PGO์˜ ์ ์šฉ ์‚ฌ๋ก€

GCC, LLVM, MSVC, ICC ๋“ฑ ๋ฉ”์ด์ €ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ํˆด์ฒด์ธ๋“ค์€ ๋ชจ๋‘ PGO ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.
์ด๋Ÿฐ ์งฌ์ด ์Œ“์—ฌ์žˆ๋Š” ํ™˜๊ฒฝ๋“ค์€ PGO๊ฐ€ ์•„์ฃผ ํšจ๊ณผ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ๋„ ๋Œ€๋ถ€๋ถ„ ํ™•์—ฐํžˆ ์ค„์–ด๋“ค๊ณ , ์„ฑ๋Šฅ๋„ ๋ˆˆ์— ๋„๊ฒŒ ํ–ฅ์ƒ๋œ๋‹ค. 2๋ฐฐ 3๋ฐฐ๊นŒ์ง€๋Š” ์•„๋‹ˆ๋”๋ผ๋„ 10~40% ์ •๋„์˜ ์†๋„ ํ–ฅ์ƒ์€ ๋ณดํ†ต ๋А๋ผ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

Golang์€ ๋น„๊ต์  ์ตœ๊ทผ์— PGO๋ฅผ ์ž์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์„œ ๋‚ด๋†“์•˜๋Š”๋ฐ, ๋‹ค๋ฅธ๊ฑด ๊ฑฐ์˜ ์—†๊ณ  ์ธ๋ผ์ด๋‹๋งŒ ํ•˜๋Š”๊ฑฐ๋ผ์„œ ์„ฑ๋Šฅ ํ–ฅ์ƒ๋„ ๋ฏธ๋ฏธํ•˜๊ณ  ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์˜คํžˆ๋ ค ์ปค์ง€๋”๋ผ.




JIT ์ปดํŒŒ์ผ

PGO๊ฐ€ ๊ฐ€์žฅ ์ž˜ ์‚ฌ์šฉ๋˜๋Š” ๋ถ„์•ผ๋Š” ์‚ฌ์‹ค ์ผ๋ฐ˜ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ์ผ๋ถ€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋Ÿฐํƒ€์ž„ ์–ธ์–ด๋“ค์ด๋‹ค.

PGO ์ปดํŒŒ์ผ์ด ๊ฝค ๊ฐ•๋ ฅํ•˜๊ธด ํ•˜๋‚˜ ๋งค๋ฒˆ ์„ธํŒ…ํ•˜๊ณ  ํ”„๋กœํŒŒ์ผ ๋ฝ‘๊ณ , ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š” ๊ฒƒ์€ ๋ฒˆ๊ฑฐ๋กœ์šธ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

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

Java์˜ ์ตœ์ ํ™” ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ
https://blog.naver.com/sssang97/223573816314



์ฐธ์กฐ
https://llvm.org/devmtg/2020-09/slides/PGO_Instrumentation.pdf
https://chrisfeilbach.com/2025/07/05/understand-cpu-branch-instructions-better/
https://d2.naver.com/helloworld/8404108?ref=pangyoalto.com