GCC 9 ์ปดํŒŒ์ผ๋Ÿฌ ์ œํ’ˆ๊ตฐ ์ถœ์‹œ

XNUMX๋…„์˜ ๊ฐœ๋ฐœ ๋์— ์ถœํŒ ๋œ ๋ฌด๋ฃŒ ์ปดํŒŒ์ผ๋Ÿฌ ์„ธํŠธ ์ถœ์‹œ GCC 9.1, ์ƒˆ๋กœ์šด GCC 9.x ๋ธŒ๋žœ์น˜์˜ ์ฒซ ๋ฒˆ์งธ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์ž…๋‹ˆ๋‹ค. ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ๊ณ„ํš ๋ฆด๋ฆฌ์Šค ๋ฒˆํ˜ธ์ธ ๋ฒ„์ „ 9.0์ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉฐ GCC 9.1์ด ๋ฆด๋ฆฌ์Šค๋˜๊ธฐ ์ง์ „์— GCC 10.0 ๋ถ„๊ธฐ๊ฐ€ ์ด๋ฏธ ๋ถ„๊ธฐ๋˜์–ด ๋‹ค์Œ ์ค‘์š”ํ•œ ๋ฆด๋ฆฌ์Šค์ธ GCC 10.1์ด ํ˜•์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

GCC 9.1์€ C++17 ํ‘œ์ค€์— ๋Œ€ํ•œ ์ง€์›์„ ์•ˆ์ •ํ™”ํ•˜๊ณ , ๋ฏธ๋ž˜ C++20 ํ‘œ์ค€(์ฝ”๋“œ๋ช… C++2a)์˜ ๊ธฐ๋Šฅ์„ ๊ณ„์† ๊ตฌํ˜„ํ•˜๊ณ , D ์–ธ์–ด์— ๋Œ€ํ•œ ํ”„๋ŸฐํŠธ์—”๋“œ์— ํฌํ•จํ•˜๊ณ , OpenMP 5.0์— ๋Œ€ํ•œ ๋ถ€๋ถ„ ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์œ ๋ช…ํ•ฉ๋‹ˆ๋‹ค. , OpenACC 2.5์— ๋Œ€ํ•œ ๊ฑฐ์˜ ์™„๋ฒฝํ•œ ์ง€์›, ๋ฐ”์ธ๋”ฉ ๋‹จ๊ณ„์—์„œ ์ ˆ์ฐจ ๊ฐ„ ์ตœ์ ํ™” ๋ฐ ์ตœ์ ํ™”์˜ ํ™•์žฅ์„ฑ ํ–ฅ์ƒ, ์ง„๋‹จ ๋„๊ตฌ ํ™•์žฅ ๋ฐ ์ƒˆ๋กœ์šด ๊ฒฝ๊ณ  ์ถ”๊ฐ€, OpenRISC, C-SKY V2 ๋ฐ AMD GCN GPU์šฉ ๋ฐฑ์—”๋“œ.

์ฃผ์š” ๋ณ€๊ฒฝ:

  • D ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GCC์—๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํฌํ•จ๋œ ํ”„๋ŸฐํŠธ์—”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. GDC (Gnu D ์ปดํŒŒ์ผ๋Ÿฌ) ๋ฐ ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(libphobos): ํ‘œ์ค€ GCC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ D ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GCC์—์„œ D ์–ธ์–ด ์ง€์›์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘๋˜์—ˆ๋‹ค 2011๋…„์œผ๋กœ ๋Œ์•„๊ฐ”์ง€๋งŒ ๋Œ๋‹ค GCC ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ค€์ˆ˜ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•  ํ•„์š”์„ฑ๊ณผ D ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” Digital Mars์— ๋Œ€ํ•œ ์ง€์  ์žฌ์‚ฐ๊ถŒ ์ด์ „ ๋ฌธ์ œ๋กœ ์ธํ•ด;
  • ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒํ™ฉ์— ๋”ฐ๋ผ Switch ํ‘œํ˜„์‹(์ ํ”„ ํ…Œ์ด๋ธ”, ๋น„ํŠธ ํ…Œ์ŠคํŠธ, ์˜์‚ฌ๊ฒฐ์ • ํŠธ๋ฆฌ)์„ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์ „๋žต์˜ ์‚ฌ์šฉ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "-ftree-switch-conversion" ์ตœ์ ํ™”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Switch ํ‘œํ˜„์‹์„ ํฌํ•จํ•˜๋Š” ์„ ํ˜• ํ•จ์ˆ˜๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: "์‚ฌ๋ก€ 2: ๋ฐฉ๋ฒ• = 205; ์ค‘๋‹จ; ์‚ฌ๋ก€ 3: ๋ฐฉ๋ฒ• = 305; ์ค‘๋‹จ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด ์ง‘ํ•ฉ). ;โ€๋Š” "100 * ์–ด๋–ป๊ฒŒ + 5"๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœ์‹œ์ € ๊ฐ„ ์ตœ์ ํ™”๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ผ์ธ ๋ฐฐํฌ ์„ค์ •์€ ์ตœ์‹  C++ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋งž๊ฒŒ ์กฐ์ •๋˜์—ˆ์œผ๋ฉฐ ์ƒˆ๋กœ์šด ๋งค๊ฐœ๋ณ€์ˆ˜ max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns ๋ฐ uninlined๋กœ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. -์ฝํฌํƒ€์ž„. ์ฝœ๋“œ/ํ•ซ ์ฝ”๋“œ ๋ถ„๋ฆฌ์˜ ์ •ํ™•์„ฑ๊ณผ ๊ณต๊ฒฉ์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ ํ™•์žฅ์„ฑ์„ ์œ„ํ•œ ํ–ฅ์ƒ๋œ ํ™•์žฅ์„ฑ ๋ฒˆ์—ญ ๋‹จ์œ„ (์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€๊ทœ๋ชจ ํ”„๋กœ๊ทธ๋žจ์˜ ์—ฐ๊ฒฐ ๋‹จ๊ณ„์—์„œ ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ)
  • ์ฝ”๋“œ ํ”„๋กœํŒŒ์ผ๋ง(PGO - Profile-guided Optimization) ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ตœ์ ํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๊ฐœ์„ ๋˜์–ด ์ฝ”๋“œ ์‹คํ–‰ ํŠน์„ฑ ๋ถ„์„์„ ๋ฐ”ํƒ•์œผ๋กœ ๋”์šฑ ์ตœ์ ์˜ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์š”์•ฝ ์˜ต์…˜ "-fprofile-์‚ฌ์šฉ"์—๋Š” ์ด์ œ ์ตœ์ ํ™” ๋ชจ๋“œ "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" ๋ฐ "-ftree-loop-distribution"์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์— ์นด์šดํ„ฐ๊ฐ€ ์žˆ๋Š” ํžˆ์Šคํ† ๊ทธ๋žจ ํฌํ•จ์„ ์ œ๊ฑฐํ•˜์—ฌ ํ”„๋กœํ•„์ด ์žˆ๋Š” ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์˜€์Šต๋‹ˆ๋‹ค(์ด์ œ ์—ฐ๊ฒฐ ์ค‘์— ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ํžˆ์Šคํ† ๊ทธ๋žจ์ด ์ฆ‰์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค).
  • ํ–ฅ์ƒ๋œ ์—ฐ๊ฒฐ ์‹œ๊ฐ„ ์ตœ์ ํ™”(LTO). ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „ ์œ ํ˜•์˜ ๋‹จ์ˆœํ™”๋ฅผ ์ œ๊ณตํ•˜์—ฌ LTO ๊ฐ์ฒด ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ๋Œ€ํญ ์ค„์ด๊ณ  ๋ฐ”์ธ๋”ฉ ๋‹จ๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋ฅผ ์ค„์ด๋ฉฐ ์ž‘์—… ๋ณ‘๋ ฌํ™”๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŒŒํ‹ฐ์…˜ ์ˆ˜(-param lto-partitions)๊ฐ€ 32๊ฐœ์—์„œ 128๊ฐœ๋กœ ์ฆ๊ฐ€ํ•˜์—ฌ CPU ์Šค๋ ˆ๋“œ ์ˆ˜๊ฐ€ ๋งŽ์€ ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ ํ™” ํ”„๋กœ์„ธ์Šค ์ˆ˜๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    "-param lto-max-์ŠคํŠธ๋ฆฌ๋ฐ-๋ณ‘๋ ฌ์„ฑ";

    ๊ฒฐ๊ณผ์ ์œผ๋กœ GCC 8.3๊ณผ ๋น„๊ตํ•˜์—ฌ GCC 9์— ๋„์ž…๋œ ์ตœ์ ํ™”๋Š” ํ—ˆ์šฉ ๋œ Firefox 5 ๋ฐ LibreOffice 66์˜ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ์•ฝ 6.2.3% ๋‹จ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ฒด ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ 7% ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. 8์ฝ”์–ด CPU์˜ ๋ฐ”์ธ๋”ฉ ์‹œ๊ฐ„์ด 11% ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ๋‹จ๊ณ„์˜ ์ˆœ์ฐจ์  ์ตœ์ ํ™” ๋‹จ๊ณ„๋Š” ์ด์ œ 28% ๋” ๋นจ๋ผ์ง€๊ณ  20% ๋” ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. LTO ๋ณ‘๋ ฌํ™” ๋‹จ๊ณ„์˜ ๊ฐ ํ”„๋กœ์„ธ์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๊ฐ€ 30% ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋Œ€๋ถ€๋ถ„์˜ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‚ฌ์–‘์€ C, C++ ๋ฐ Fortran ์–ธ์–ด์— ๋Œ€ํ•ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์˜คํ”ˆACC 2.5GPU ๋ฐ NVIDIA PTX์™€ ๊ฐ™์€ ํŠน์ˆ˜ ํ”„๋กœ์„ธ์„œ์—์„œ ์ž‘์—…์„ ์˜คํ”„๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ‘œ์ค€์— ๋Œ€ํ•œ ๋ถ€๋ถ„ ์ง€์›์ด C ๋ฐ C++์— ๋Œ€ํ•ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆMP 5.0 (Open Multi-Processing), ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๋ฒกํ„ฐํ™” ์žฅ์น˜(SIMD)๊ฐ€ ์žˆ๋Š” ๋ฉ€ํ‹ฐ ์ฝ”์–ด ๋ฐ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ(CPU+GPU/DSP) ์‹œ์Šคํ…œ์—์„œ C, C++ ๋ฐ Fortran ์–ธ์–ด์— ๋Œ€ํ•œ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•˜๋Š” API ๋ฐ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ;
  • C ์–ธ์–ด์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๊ฒฝ๊ณ ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค: "-ํฌ์žฅ ํšŒ์›์˜ Waddress"(๊ตฌ์กฐ์ฒด ๋˜๋Š” ๊ณต์šฉ์ฒด์˜ ์••์ถ•๋œ ๋ฉค๋ฒ„์— ๋Œ€ํ•œ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ํฌ์ธํ„ฐ ๊ฐ’) ๋ฐ
    ยซ-W์ ˆ๋Œ€๊ฐ’" (์ ˆ๋Œ€๊ฐ’ ๊ณ„์‚ฐ์„ ์œ„ํ•œ ํ•จ์ˆ˜์— ์•ก์„ธ์Šคํ•  ๋•Œ ์ง€์ •๋œ ์ธ์ˆ˜์— ๋” ์ ํ•ฉํ•œ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์˜ˆ๋ฅผ ๋“ค์–ด abs(3.14) ๋Œ€์‹  fabs(3.14)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. C++์— ์ƒˆ๋กœ์šด ๊ฒฝ๊ณ ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" ๋ฐ "-Wclass-conversion". ์ด์ „์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ๊ฒฝ๊ณ ๊ฐ€ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ๋ช… C2x์ธ ๋ฏธ๋ž˜ C ์–ธ์–ด ํ‘œ์ค€์˜ ์ผ๋ถ€์— ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. C2x ์ง€์›์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด "-std=c2x" ๋ฐ "-std=gnu2x" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค(GNU ํ™•์žฅ์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด). ํ‘œ์ค€์€ ์•„์ง ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„์ด๋ฏ€๋กœ ํ•ด๋‹น ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์˜ ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” _Static_assert ํ‘œํ˜„์‹๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค(๋‘ ๊ฐœ์˜ ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” _Static_assert๋Š” C11์—์„œ ํ‘œ์ค€ํ™”๋จ).
  • C++17 ํ‘œ์ค€์— ๋Œ€ํ•œ ์ง€์›์ด ์•ˆ์ •์ ์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์—์„œ๋Š” C++17์˜ ์–ธ์–ด ๊ธฐ๋Šฅ์ด ์™„์ „ํžˆ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ, libstdc++์—์„œ๋Š” ํ‘œ์ค€์— ์ •์˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜๊ฐ€ ๊ฑฐ์˜ ์ „์ฒด ๊ตฌํ˜„์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.
  • ๊ณ„์†๋˜๋Š” ๊ตฌํ˜„ ๋ฏธ๋ž˜ C++2a ํ‘œ์ค€์˜ ์š”์†Œ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ดˆ๊ธฐํ™” ์ค‘์— ๋ฒ”์œ„๋ฅผ ํฌํ•จํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๊ณ , ๋žŒ๋‹ค ํ‘œํ˜„์‹์— ๋Œ€ํ•œ ํ™•์žฅ์ด ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ๋นˆ ๋ฉค๋ฒ„ ๋ฐ ๊ฐ€๋Šฅ์„ฑ/๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ์†์„ฑ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ์กฐ๊ฑด์‹์—์„œ ๊ฐ€์ƒ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. , ๋“ฑ.
    C++2a ์ง€์›์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด "-std=c++2a" ๋ฐ "-std=gnu++2a" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์„ธ์š”. C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ๋ฐ std::type_identity ํŠน์„ฑ, std::midpoint, std::lerp ํ•จ์ˆ˜์šฉ libstdc++์— ๋น„ํŠธ ๋ฐ ๋ฒ„์ „ ํ—ค๋” ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. , ํ‘œ์ค€::bind_front,
    std::visit, std::is_constant_evaluated ๋ฐ std::assume_aligned, char8_t ์œ ํ˜•์— ๋Œ€ํ•œ ์ง€์› ์ถ”๊ฐ€, ๋ฌธ์ž์—ด์˜ ์ ‘๋‘์‚ฌ ๋ฐ ์ ‘๋ฏธ์‚ฌ(starts_with, end_with)๋ฅผ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • ์ƒˆ๋กœ์šด ARM ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ ์ง€์› ์ถ”๊ฐ€
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE ๋ฐ Neoverse N1. ๋ณต์†Œ์ˆ˜, ์˜์‚ฌ ๋‚œ์ˆ˜ ์ƒ์„ฑ(rng) ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ํƒœ๊น…(memtag) ์ž‘์—…์„ ์œ„ํ•ด Armv8.3-A์— ๋„์ž…๋œ ๋ช…๋ น์— ๋Œ€ํ•œ ์ง€์›์€ ๋ฌผ๋ก  ์˜ˆ์ธก ์‹คํ–‰ ๋ฐ ๋ถ„๊ธฐ ์˜ˆ์ธก ์žฅ์น˜ ์ž‘๋™๊ณผ ๊ด€๋ จ๋œ ๊ณต๊ฒฉ์„ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. . AArch64 ์•„ํ‚คํ…์ฒ˜์˜ ๊ฒฝ์šฐ ๋ณดํ˜ธ ๋ชจ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์Šคํƒ๊ณผ ํž™์˜ ๊ต์ฐจ์  (โ€œ-fstack-clash ๋ณดํ˜ธโ€). Armv8.5-A ์•„ํ‚คํ…์ฒ˜์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด "-march=armv8.5-a" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์—ฌ๊ธฐ์—๋Š” GCN ๋งˆ์ดํฌ๋กœ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” AMD GPU์šฉ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฑ์—”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„์€ ํ˜„์žฌ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ปดํŒŒ์ผ(OpenMP ๋ฐ OpenACC๋ฅผ ํ†ตํ•œ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๊ณ„์‚ฐ ์ˆ˜ํ–‰ ์ง€์›์€ ๋‚˜์ค‘์— ์ œ๊ณต๋  ์˜ˆ์ •)๊ณผ GPU Fiji ๋ฐ Vega 10์— ๋Œ€ํ•œ ์ง€์›์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœ์„ธ์„œ๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋ฐฑ์—”๋“œ ์ถ”๊ฐ€ ์˜คํ”ˆRISC;
  • ํ”„๋กœ์„ธ์„œ์šฉ ๋ฐฑ์—”๋“œ ์ถ”๊ฐ€ C-์Šค์นด์ด V2, ๋‹ค์–‘ํ•œ ์†Œ๋น„์ž ์žฅ์น˜๋ฅผ ์œ„ํ•ด ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ค‘๊ตญ ํšŒ์‚ฌ์—์„œ ์ƒ์‚ฐ;
  • ๋ฐ”์ดํŠธ ๊ฐ’์„ ์ž‘๋™ํ•˜๋Š” ๋ชจ๋“  ๋ช…๋ น์ค„ ์˜ต์…˜์€ ์ ‘๋ฏธ์‚ฌ kb, KiB, MB, MiB, GB ๋ฐ GiB๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌํ˜„ "-flive-patching=[inline-only-static|inline-clone]" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ ˆ์ฐจ ๊ฐ„ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋‹ค๋‹จ๊ณ„ ์ œ์–ด๋กœ ์ธํ•ด ๋ผ์ด๋ธŒ ํŒจ์น˜ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์•ˆ์ „ํ•œ ์ปดํŒŒ์ผ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(IPA) ์ตœ์ ํ™”;
  • Bash๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์˜ต์…˜ ์™„์„ฑ์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด "--completion" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ง„๋‹จ ๋„๊ตฌ๋Š” ์ค„ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์†Œ์Šค ํ…์ŠคํŠธ ๋ฐœ์ทŒ ํ‘œ์‹œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ํ”ผ์—ฐ์‚ฐ์ž ์œ ํ˜•๊ณผ ๊ฐ™์€ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ค„ ๋ฒˆํ˜ธ์™€ ๋ ˆ์ด๋ธ” ํ‘œ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด "-fno-diagnostics-show-line-numbers" ๋ฐ "-fno-diagnostics-show-labels" ์˜ต์…˜์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

    GCC 9 ์ปดํŒŒ์ผ๋Ÿฌ ์ œํ’ˆ๊ตฐ ์ถœ์‹œ

  • ํผ์ง€๋Š” C++ ์ฝ”๋“œ์˜ ์˜ค๋ฅ˜ ์ง„๋‹จ ๋„๊ตฌ, ์˜ค๋ฅ˜ ์›์ธ์— ๋Œ€ํ•œ ์ •๋ณด์˜ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ•์กฐ ํ‘œ์‹œ

    GCC 9 ์ปดํŒŒ์ผ๋Ÿฌ ์ œํ’ˆ๊ตฐ ์ถœ์‹œ

  • ๊ธฐ๊ณ„๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•์‹(JSON)์œผ๋กœ ์ง„๋‹จ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” "-fdiagnostics-format=json" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฒ˜๋ฆฌํ•  ์†Œ์Šค ํŒŒ์ผ์„ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ํ”„๋กœํŒŒ์ผ๋ง ์˜ต์…˜ "-fprofile-filter-files" ๋ฐ "-fprofile-exclude-files"๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • AddressSanitizer๋Š” ์ž๋™ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•œ ํ™•์ธ ์ฝ”๋“œ ์ƒ์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฒ€์‚ฌ ์ค‘์ธ ์‹คํ–‰ ํŒŒ์ผ์˜ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
  • "์˜ ์ถœ๋ ฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.-fopt-์ •๋ณดยป (์ถ”๊ฐ€๋œ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด) ์ด์ „์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ ‘๋‘์‚ฌ "note" ์™ธ์— ์ƒˆ๋กœ์šด ์ ‘๋‘์‚ฌ "optimized" ๋ฐ "missed"๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ผ์ธ ์ „๊ฐœ ๋ฐ ์‚ฌ์ดํด ๋ฒกํ„ฐํ™”์— ๋Œ€ํ•œ ์˜์‚ฌ๊ฒฐ์ •์— ๋Œ€ํ•œ ์ •๋ณด ์ถœ๋ ฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • "-fsave-optimization-record" ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด GCC๋Š” ํŠน์ • ์ตœ์ ํ™” ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ฒฐ์ •์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ SRCFILE.opt-record.json.gz ํŒŒ์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์˜ต์…˜์€ ํ”„๋กœํ•„ ๋ฐ ์ธ๋ผ์ธ ์ฒด์ธ์— ๋Œ€ํ•œ ์ •๋ณด์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค๋Š” ์ ์—์„œ "-fopt-info" ๋ชจ๋“œ์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
  • ์ ˆ์ฐจ๊ฐ„ ์ตœ์ ํ™” ์ค‘์— ์Šคํƒ ์ •๋ ฌ ๋ฐ ์ •์  ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ฃผ์†Œ ์ง€์ • ๋ชจ๋“œ(์“ฐ๊ธฐ ์ „์šฉ ๋˜๋Š” ์ฝ๊ธฐ ์ •ํ™•) ์‚ฌ์šฉ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด "-fipa-stack-alignment" ๋ฐ "-fipa-reference-addressable" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์†์„ฑ ๋ฐ”์ธ๋”ฉ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ถ„๊ธฐ ์˜ˆ์ธก ๋ฐ ์˜ˆ์ธก ๋ช…๋ น์–ด ์‹คํ–‰๊ณผ ๊ด€๋ จ๋œ ๋™์ž‘์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋‚ด์žฅ ํ•จ์ˆ˜๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.__builtin_has_์†์„ฑยซ,ยซ__builtin_expect_with_probability" ๊ทธ๋ฆฌ๊ณ  "__builtin_speculation_safe_value". ํ•จ์ˆ˜, ๋ณ€์ˆ˜, ์œ ํ˜•์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์†์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณต์‚ฌ;
  • Fortran ์–ธ์–ด์— ๋Œ€ํ•ด ๋น„๋™๊ธฐ์‹ ์ž…๋ ฅ/์ถœ๋ ฅ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Solaris 10(*-*-solaris2.10) ๋ฐ Cell/BE(Cell Broadband Engine SPU) ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ง€์›์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋‹ค์Œ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ๊ฑฐ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. Armv2, Armv3, Armv5 ๋ฐ Armv5E ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Intel MPX(Memory Protection Extensions)์— ๋Œ€ํ•œ ์ง€์›์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€