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

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

GCC 10.1์€ C++20 ํ‘œ์ค€์„ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ C++ ์–ธ์–ด์˜ ๋งŽ์€ ํ˜์‹  ๊ตฌํ˜„, ํ–ฅํ›„ C ์–ธ์–ด ํ‘œ์ค€(C2x)๊ณผ ๊ด€๋ จ๋œ ๊ฐœ์„  ์‚ฌํ•ญ, ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐฑ์—”๋“œ์˜ ์ƒˆ๋กœ์šด ์ตœ์ ํ™” ๋ฐ ์‹คํ—˜์  ์ง€์›์œผ๋กœ ์œ ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„ ๋ชจ๋“œ. ๋˜ํ•œ ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋™์•ˆ ํ”„๋กœ์ ํŠธ๋Š” ์ €์žฅ์†Œ๋ฅผ SVN์—์„œ Git์œผ๋กœ ์ด์ „ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

  • ์ถ”๊ฐ€๋จ ์ •์  ๋ถ„์„์˜ ์‹คํ—˜ ๋ชจ๋“œ "-ํŒฌ ๋ถ„์„๊ธฐ"๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ ์‹คํ–‰ ๊ฒฝ๋กœ์™€ ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์ ์ธ ์ ˆ์ฐจ๊ฐ„ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“œ๋Š” ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•œ free() ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ด์ค‘ ํ˜ธ์ถœ, ํŒŒ์ผ ์„ค๋ช…์ž ๋ˆ„์ถœ, ๋„ ํฌ์ธํ„ฐ ์—ญ์ฐธ์กฐ ๋ฐ ์ „๋‹ฌ, ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก ์•ก์„ธ์Šค, ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๊ฐ’ ์‚ฌ์šฉ ๋“ฑ๊ณผ ๊ฐ™์€ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OpenSSL ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ ์‹๋ณ„์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์œ„ํ—˜ํ•œ ์ทจ์•ฝ์„ฑ.
  • ํ”„๋กœ์‹œ์ € ๊ฐ„ ์ตœ์ ํ™”๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. IPA-SRA(ํ”„๋กœ์‹œ์ € ๊ฐ„ ์Šค์นผ๋ผ ๊ณต์œ  ๊ต์ฒด) ํŒจ์Šค๋Š” ๋ฐ”์ธ๋“œ ์‹œ ์ž‘๋™ํ•˜๋„๋ก ์žฌ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ๋ฌด์—‡๋ณด๋‹ค๋„ ๊ณ„์‚ฐ ๋ฐ ๋ฐ˜ํ™˜๋œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๊ฐ’์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. "-O2" ์ตœ์ ํ™” ๋ชจ๋“œ์—์„œ๋Š” "-finline-functions" ์˜ต์…˜์ด ํ™œ์„ฑํ™”๋˜๋ฉฐ, ์ด๋Š” ์‹คํ–‰ ์„ฑ๋Šฅ๋ณด๋‹ค ๋” ์ปดํŒฉํŠธํ•œ ์ฝ”๋“œ๋ฅผ ์„ ํ˜ธํ•˜๋„๋ก ๋‹ค์‹œ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ธ๋ผ์ธ ํ•จ์ˆ˜ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ํœด๋ฆฌ์Šคํ‹ฑ ์ž‘์—…์ด ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ผ์ธ ํ™•์žฅ ๋ฐ ํ•จ์ˆ˜ ๋ณต์ œ ํœด๋ฆฌ์Šคํ‹ฑ์€ ์ด์ œ ๊ฐ’ ๋ฒ”์œ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ณ„ ๋ณ€ํ™˜์˜ ํšจ๊ณผ๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. C++์˜ ๊ฒฝ์šฐ ์œ ํ˜• ๊ธฐ๋ฐ˜ ๋ณ„์นญ ๊ตฌ๋ฌธ ๋ถ„์„์˜ ์ •ํ™•์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ–ฅ์ƒ๋œ ์—ฐ๊ฒฐ ์‹œ๊ฐ„ ์ตœ์ ํ™”(LTO). ์ƒˆ๋กœ์šด ์‹คํ–‰ ํŒŒ์ผ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. lto ๋คํ”„ LTO ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๊ฐ์ฒด ํŒŒ์ผ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ LTO ํŒจ์Šค๋Š” ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” make ์ž‘์—…์˜ ์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ๊ฒฐ์ •ํ•˜๊ณ , ๊ฒฐ์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ CPU ์ฝ”์–ด ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณ‘๋ ฌํ™” ์š”์†Œ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. zstd ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ LTO ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์••์ถ•ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ํ”„๋กœํŒŒ์ผ๋ง(PGO - Profile-guided Optimization) ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ตœ์ ํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๊ฐœ์„ ๋˜์–ด ์ฝ”๋“œ ์‹คํ–‰ ํŠน์„ฑ ๋ถ„์„์„ ๋ฐ”ํƒ•์œผ๋กœ ๋”์šฑ ์ตœ์ ์˜ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ๋ฐ ํ•ซ/์ฝœ๋“œ ์ฝ”๋“œ ๋ถ„๋ฆฌ ์ค‘ ํ”„๋กœํ•„ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ต์…˜์„ ํ†ตํ•ด "-fprofile-๊ฐ’ยป ์ด์ œ ๊ฐ„์ ‘ ํ†ตํ™” ๋ฐ ๋ณด๋‹ค ์ •ํ™•ํ•œ ํ”„๋กœํ•„ ์ •๋ณด ์ œ๊ณต ๋“ฑ ์ตœ๋Œ€ 4๊ฐœ์˜ ํ”„๋กœํ•„ ๊ฐ’์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • C, C++ ๋ฐ Fortran ์–ธ์–ด์šฉ์œผ๋กœ ๊ตฌํ˜„๋œ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‚ฌ์–‘ ์˜คํ”ˆACC 2.6๋Š” GPU ๋ฐ NVIDIA PTX์™€ ๊ฐ™์€ ํŠน์ˆ˜ ํ”„๋กœ์„ธ์„œ์—์„œ ์ž‘์—…์„ ์˜คํ”„๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ๊ตฌํ˜„์ด ๊ฑฐ์˜ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆMP 5.0 (Open Multi-Processing)์€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๋ฒกํ„ฐํ™” ์žฅ์น˜(SIMD)๊ฐ€ ์žˆ๋Š” ๋ฉ€ํ‹ฐ ์ฝ”์–ด ๋ฐ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ(CPU+GPU/DSP) ์‹œ์Šคํ…œ์— ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•˜๋Š” API์™€ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. lastprivate ์กฐ๊ฑด, ์Šค์บ” ๋ฐ ๋ฃจํ”„ ์ง€์‹œ์–ด, order ๋ฐ use_device_addr ํ‘œํ˜„์‹๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. OpenMP ๋ฐ OpenACC์˜ ๊ฒฝ์šฐ 10์„ธ๋Œ€(Fiji) ๋ฐ 20์„ธ๋Œ€ AMD Radeon(GCN) GPU(VEGA XNUMX/VEGA XNUMX)์—์„œ์˜ ์˜คํ”„๋กœ๋“œ ์ž‘์—…์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • C ๊ณ„์—ด ์–ธ์–ด์˜ ๊ฒฝ์šฐ ์ฐธ์กฐ ๋˜๋Š” ํฌ์ธํ„ฐ๋กœ ์ „๋‹ฌ๋œ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ํ•จ์ˆ˜์˜ ์•ก์„ธ์Šค๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์ด๋Ÿฌํ•œ ๊ฐœ์ฒด๋ฅผ ๊ฐœ์ฒด ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ์ •์ˆ˜ ์ธ์ˆ˜์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด "access" ํ•จ์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "access"์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด "type" ์†์„ฑ์ด ๊ตฌํ˜„๋˜์–ด ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ์—ด ๊ฒฝ๊ณ„ ์™ธ๋ถ€ ์˜์—ญ์— ๊ฐ’์„ ์“ธ ๋•Œ ์‚ฌ์šฉ์ž ํ•จ์ˆ˜์˜ ์ž˜๋ชป๋œ ์•ก์„ธ์Šค๋ฅผ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ELF ํŒŒ์ผ์˜ ๊ธฐํ˜ธ๋ฅผ ํŠน์ • ๋ฒ„์ „ ๋ฒˆํ˜ธ์™€ ์—ฐ๊ฒฐํ•˜๋Š” "symver" ์†์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๊ฒฝ๊ณ ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค:
    • "-Wstring-compare"("-Wextra"๋กœ ํ™œ์„ฑํ™”๋จ) - strcmp ๋ฐ strncmp ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ์™€ XNUMX์„ ๋น„๊ตํ•˜๋Š” ํ‘œํ˜„์‹์ด ์žˆ์Œ์„ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ธธ์ด๊ฐ€ ์ƒ์ˆ˜์™€ ๋™์ผํ•˜๋ฏ€๋กœ ํ•œ ์ธ์ˆ˜์˜ ํฌ๊ธฐ๊ฐ€ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜์˜ ๋ฐฐ์—ด ํฌ๊ธฐ๋ณด๋‹ค ํฝ๋‹ˆ๋‹ค.
    • "-Wzero-length-bounds"("-Warray-bounds"๋กœ ํ™œ์„ฑํ™”๋จ) - ๊ธธ์ด๊ฐ€ XNUMX์ธ ๋ฐฐ์—ด ์š”์†Œ์— ์•ก์„ธ์Šคํ•˜๋ฉด ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ƒํ™ฉ์˜ ์ˆ˜๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" ๋ฐ "-Wstringop-overflow" ๊ฒฝ๊ณ ๊ฐ€ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • UCN ํ‘œ๊ธฐ๋ฒ•(\uNNNN ๋˜๋Š” \UNNNNNNNN) ๋Œ€์‹  ํ˜„์žฌ ์ธ์ฝ”๋”ฉ(๊ธฐ๋ณธ์ ์œผ๋กœ UTF-8)์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹๋ณ„์ž์— ์™€์ด๋“œ ๋ฌธ์ž๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

    ์ •์  const int ฯ€ = 3;
    int get_naรฏve_pi() {
    ฯ€๋ฅผ ๋ฐ˜ํ™˜;
    }

  • C ์–ธ์–ด์˜ ๊ฒฝ์šฐ C2X ํ‘œ์ค€ ๋‚ด์—์„œ ๊ฐœ๋ฐœ๋œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์˜ ์ผ๋ถ€๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค(-std=c2x ๋ฐ -std=gnu2x๋ฅผ ์ง€์ •ํ•˜์—ฌ ํ™œ์„ฑํ™”๋จ). ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์†์„ฑ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด "[[]]" ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์ง€์›์ด ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. C++(์˜ˆ: [[gnu ::const]], [[deprecated]], [[fallthrough]] ๋ฐ [[maybe_unused]]. UTF-8 ๋ฌธ์ž๋กœ ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ "u8" ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ์— ์ƒˆ๋กœ์šด ๋งคํฌ๋กœ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. . strftime์— "%OB" ๋ฐ "%Ob" ๋Œ€์ฒด ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • C์˜ ๊ธฐ๋ณธ ๋ชจ๋“œ๋Š” "-fno-common"์ด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ผ๋ถ€ ํ”Œ๋žซํผ์—์„œ ์ „์—ญ ๋ณ€์ˆ˜์— ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • C++์˜ ๊ฒฝ์šฐ C++16 ํ‘œ์ค€์—์„œ ๊ฐœ๋ฐœ๋œ ์•ฝ 20๊ฐ€์ง€ ๋ณ€๊ฒฝ ๋ฐ ํ˜์‹ ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋œ ํ‚ค์›Œ๋“œ โ€œcontinitโ€ ํฌํ•จ
    ํ…œํ”Œ๋ฆฟ ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.๊ฐœ๋…๋“ค". ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ์‹œ ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ—ˆ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ธ์ˆ˜ ์ง‘ํ•ฉ์„ ์ œํ•œํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜ ์š”๊ตฌ ์‚ฌํ•ญ ์ง‘ํ•ฉ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋…์€ ํ…œํ”Œ๋ฆฟ ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ์†์„ฑ๊ณผ ์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ฐ์ดํ„ฐ ์œ ํ˜• ์†์„ฑ ๊ฐ„์˜ ๋…ผ๋ฆฌ์  ๋ถˆ์ผ์น˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • G++์—์„œ๋Š” constexpr์„ ํ†ตํ•ด ์ƒ์ˆ˜ ๊ฐ์ฒด ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์ •์˜๋˜์ง€ ์•Š์€ ๋™์ž‘์„ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. constexpr์„ ๊ณ„์‚ฐํ•  ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๊ฐ€ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ฒฝ๊ณ  "-Wmismatched-tags" ๋ฐ "-Wredundant-tags"๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๋ช…๋ น์ค„ ์˜ต์…˜์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค:
    • "-fallocation-dce"๋Š” ๋ถˆํ•„์š”ํ•œ "new" ๋ฐ "delete" ์—ฐ์‚ฐ์ž ์Œ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    • ํ›ˆ๋ จ ์‹คํ–‰์ด ์—†๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ํฌ๊ธฐ ์ตœ์ ํ™”๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด "-fprofile-partial-training"์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • "-fprofile-reproducible์€ ํ”„๋กœํŒŒ์ผ ์žฌํ˜„์„ฑ ์ˆ˜์ค€์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
    • "-fprofile-prefix-path"๋Š” ๋ณ„๋„์˜ ํ”„๋กœํ•„ ์ƒ์„ฑ์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ์†Œ์Šค ๋นŒ๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค("-fprofile-generate=profile_dir" ๋ฐ "-fprofile-use=profile_dir"์˜ ๊ฒฝ์šฐ).
  • ์–ธ๊ธ‰๋œ ์˜ต์…˜์— ๋Œ€ํ•œ ๊ฒฝ๊ณ  ํ…์ŠคํŠธ์—๋Š” ํ•ด๋‹น ์˜ต์…˜์— ๋Œ€ํ•œ ์„ค๋ช…์„œ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜์ดํผ๋งํฌ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. URL ๋Œ€์ฒด๋Š” "-fdiagnostics-urls" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œ์–ด๋ฉ๋‹ˆ๋‹ค.
  • ์ „์ฒ˜๋ฆฌ๊ธฐ ์—ฐ์‚ฐ์ž ์ถ”๊ฐ€ "__has_builtin"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด์žฅ ๊ธฐ๋Šฅ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • "round"์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ISO/IEC TS 18661 ์‚ฌ์–‘์— ์ •์˜๋œ ๋ฐ˜์˜ฌ๋ฆผ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋‚ด์žฅ ํ•จ์ˆ˜ "__builtin_roundeven"์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ 0.5๋ณด๋‹ค ํฐ ๋ถ€๋ถ„์„ (๋” ํฐ ๊ฐ’์œผ๋กœ) 0.5๋ณด๋‹ค ์ž‘๊ฒŒ ๋ฐ˜์˜ฌ๋ฆผํ•ฉ๋‹ˆ๋‹ค. - ์•„๋ž˜๋กœ(0.5์œผ๋กœ), XNUMX์™€ ๋™์ผ - ๋์—์„œ ๋‘ ๋ฒˆ์งธ ์ˆซ์ž์˜ ํŒจ๋ฆฌํ‹ฐ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • AArch64 ์•„ํ‚คํ…์ฒ˜์˜ ๊ฒฝ์šฐ SVE2 ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ๋‚ด์žฅ SVE ACLE ๊ธฐ๋Šฅ ๋ฐ ์œ ํ˜•์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ง€์›, ๋ฒกํ„ฐํ™” ์‚ฌ์šฉ์„ ํฌํ•จํ•˜์—ฌ SVE(Scalable Vector Extension)์— ๋Œ€ํ•œ ์ง€์›์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. LSE(Large System Extensions) ๋ฐ TME(Transactional Memory Extension)์— ๋Œ€ํ•œ ์ง€์›์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚œ์ˆ˜ ์ƒ์„ฑ, ๋ฐ˜์˜ฌ๋ฆผ, ๋ฉ”๋ชจ๋ฆฌ ํƒœ๊ทธ ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•œ ์ง€์นจ์„ ํฌํ•จํ•˜์—ฌ Armv8.5-A ๋ฐ Armv8.6-A์—์„œ ์ œ์•ˆ๋œ ์ƒˆ๋กœ์šด ์ง€์นจ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    bfloat16 ๋ฐ ํ–‰๋ ฌ ๊ณฑ์…ˆ. ํ”„๋กœ์„ธ์„œ ์ง€์› ์ถ”๊ฐ€
    ํŒ” ํ”ผ์งˆ-A77,
    ํŒ” ํ”ผ์งˆ-A76AE,
    ํŒ” ํ”ผ์งˆ-A65,
    ํŒ” ํ”ผ์งˆ-A65AE,
    Arm Cortex-A34 ๋ฐ
    ๋งˆ๋ฒจ ThunderX3.

  • ARM32์šฉ ABI FDPIC(64๋น„ํŠธ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ)์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 64๋น„ํŠธ ์ •์ˆ˜ ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ์žฌ์„ค๊ณ„ํ•˜๊ณ  ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋œ CPU ์ง€์›
    ํŒ” ํ”ผ์งˆ-A77,
    Arm Cortex-A76AE ๋ฐ
    ํŒ” Cortex-M35P. 32๋น„ํŠธ SIMD, 16๋น„ํŠธ ๊ณฑ์…ˆ, ๋ž˜์น˜ ์‚ฐ์ˆ  ๋ฐ ๊ธฐํƒ€ DSP ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ตœ์ ํ™”๋ฅผ ํฌํ•จํ•˜์—ฌ ACLE ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ช…๋ น์— ๋Œ€ํ•œ ์ง€์›์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ACLE CDE(Custom Datapath Extension) ์ง€์นจ์— ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • GCN ๋งˆ์ดํฌ๋กœ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” AMD GPU์šฉ ๋ฐฑ์—”๋“œ์˜ ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐ ๋ฒกํ„ฐํ™”๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • AVR ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•œ XMEGA ์œ ์‚ฌ ์žฅ์น˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208, ATmega3209 4808, ATmega4809 ๋ฐ ATmegaXNUMX.

  • IA-32/x86-64 ์•„ํ‚คํ…์ฒ˜์šฉ์œผ๋กœ ์ƒˆ๋กœ์šด Intel ENQCMD ๋ช…๋ น์–ด ์„ธํŠธ ์•„ํ‚คํ…์ฒ˜ ํ™•์žฅ(-menqcmd)์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Intel Cooperlake(-march=cooperlake, AVX512BF16 ISA ํ™•์žฅ ํฌํ•จ) ๋ฐ Tigerlake(-march=tigerlake, MOVDIRI, MOVDIR64B ๋ฐ AVX512VP2INTERSECT ISA ํ™•์žฅ ํฌํ•จ) CPU์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • HSA ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ด๊ธฐ์ข… ์ปดํ“จํŒ… ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ HSAIL(์ด๊ธฐ์ข… ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์ค‘๊ฐ„ ์–ธ์–ด) ๊ตฌํ˜„์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ๊ฑฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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