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

XNUMX๊ฐœ์›”๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— ์ œ์‹œ๋œ ํ”„๋กœ์ ํŠธ ๋ฆด๋ฆฌ์Šค LLVM 11.0 โ€” GCC ํ˜ธํ™˜ ๋„๊ตฌ(์ปดํŒŒ์ผ๋Ÿฌ, ์ตœ์ ํ™” ํ”„๋กœ๊ทธ๋žจ ๋ฐ ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ), ํ”„๋กœ๊ทธ๋žจ์„ RISC ์œ ์‚ฌ ๊ฐ€์ƒ ๋ช…๋ น์–ด์˜ ์ค‘๊ฐ„ ๋น„ํŠธ์ฝ”๋“œ(๋‹ค์ค‘ ๋ ˆ๋ฒจ ์ตœ์ ํ™” ์‹œ์Šคํ…œ์„ ๊ฐ–์ถ˜ ํ•˜์œ„ ๋ ˆ๋ฒจ ๊ฐ€์ƒ ๋จธ์‹ )๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์˜์‚ฌ์ฝ”๋“œ๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ์ง์ ‘ ๊ธฐ๊ณ„์–ด ๋ช…๋ น์–ด๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ๋ฆด๋ฆฌ์Šค์˜ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํ”Œ๋žœ์ง€, Fortran ์–ธ์–ด์˜ ํ”„๋ŸฐํŠธ์—”๋“œ์ž…๋‹ˆ๋‹ค. Flang์€ Fortran 2018, OpenMP 4.5 ๋ฐ OpenACC 3.0์„ ์ง€์›ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์€ ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ํ”„๋ŸฐํŠธ ์—”๋“œ๋Š” ์ฝ”๋“œ ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ •ํ™•์„ฑ ํ™•์ธ์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. LLVM ์ค‘๊ฐ„ ์ฝ”๋“œ ์ƒ์„ฑ์€ ์•„์ง ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์‹คํ–‰ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ •์‹ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์™ธ๋ถ€ Fortran ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋Ÿ‰ Clang 11.0์—์„œ:

  • ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ๋ฅผ ๋ณต์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(AST) ์†์ƒ๋œ C++ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ์ง„๋‹จ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ clang-tidy ๋ฐ clangd์™€ ๊ฐ™์€ ์™ธ๋ถ€ ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ C++ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ "-Xclang -f[no-]recovery-ast" ์˜ต์…˜์„ ํ†ตํ•ด ์ œ์–ด๋ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ์ง„๋‹จ ๋ชจ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • "-Wpointer-to-int-cast"๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฐ’์„ ์ˆ˜์šฉํ•˜์ง€ ์•Š๋Š” ์ •์ˆ˜ ์œ ํ˜• int์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ์บ์ŠคํŒ…์— ๋Œ€ํ•œ ๊ฒฝ๊ณ  ๊ทธ๋ฃน์ž…๋‹ˆ๋‹ค.
    • "-Wuninitialized-const-reference" - "const" ์†์„ฑ์ด ์žˆ๋Š” ์ฐธ์กฐ ์ธ์ˆ˜๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ์ž…๋‹ˆ๋‹ค.
    • "-Wimplicit-const-int-float-conversion" - ์‹ค์ˆ˜ ์ƒ์ˆ˜๋ฅผ ์ •์ˆ˜ ์œ ํ˜•์œผ๋กœ ์•”์‹œ์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.
  • ARM ํ”Œ๋žซํผ์˜ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋‚ด์žฅ๋œ C ํ•จ์ˆ˜๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค(๋‚ด์žฌ), ํšจ์œจ์ ์ธ ๋ฒกํ„ฐ ๋ช…๋ น์–ด Arm v8.1-M MVE ๋ฐ CDE๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์€ ํ—ค๋” ํŒŒ์ผ arm_mve.h ๋ฐ arm_cde.h์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€๋จ ํ™•์žฅ๋œ ์ •์ˆ˜ ์œ ํ˜• ์„ธํŠธ _ExtInt(N)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด XNUMX์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ด ์•„๋‹Œ ์œ ํ˜•์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ FPGA/HLS์—์„œ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, _ExtInt(7)์€ 7๋น„ํŠธ๋กœ ๊ตฌ์„ฑ๋œ ์ •์ˆ˜ํ˜•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ARM SVE(Scalable Vector Extension) ๋ช…๋ น์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚ด์žฅ C ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ง€์›์„ ์ •์˜ํ•˜๋Š” ๋งคํฌ๋กœ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    __ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
    __ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    __ARM_FEATURE_SVE2_BITPERM,
    __ARM_FEATURE_SVE2_SHA3,
    __ARM_FEATURE_SVE2_SM4. ์˜ˆ๋ฅผ ๋“ค์–ด __ARM_FEATURE_SVE ๋งคํฌ๋กœ๋Š” ๋ช…๋ น์ค„ ์˜ต์…˜ "-march=armv64-a+sve"๋ฅผ ์„ค์ •ํ•˜์—ฌ AArch8 ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

  • "-O" ํ”Œ๋ž˜๊ทธ๋Š” ์ด์ œ "-O1" ๋Œ€์‹  "-O2" ์ตœ์ ํ™” ๋ชจ๋“œ๋กœ ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • "-fstack-clash-protection" - ๋ณดํ˜ธ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ๊ณผ ํž™์˜ ๊ต์ฐจ์ .
    • "-ffp-Exception-behavior={ignore,maytrap,strict}" - ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • "-ffp-model={precise,strict,fast}" - ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž์— ๋Œ€ํ•œ ์ผ๋ จ์˜ ํŠน์ˆ˜ ์˜ต์…˜์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • "-fpch-codegen" ๋ฐ "-fpch-debuginfo"๋Š” ์ฝ”๋“œ ๋ฐ debuginfo์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ๊ฐœ์ฒด ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ํ—ค๋”(PCH)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ปค๋ฒ„๋ฆฌ์ง€ ํ…Œ์ŠคํŠธ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์™€ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ "-fsanitize-coverage-allowlist" ๋ฐ "-fsanitize-coverage-blocklist".
    • "-mtls-size={12,24,32,48}" TLS(์Šค๋ ˆ๋“œ ๋กœ์ปฌ ์ €์žฅ์†Œ) ํฌ๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ์‹คํ—˜์ ์ธ RISC-V ํ™•์žฅ์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด "-menable-experimental-extension"์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • C์˜ ๊ธฐ๋ณธ ๋ชจ๋“œ๋Š” "-fno-common"์ด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ผ๋ถ€ ํ”Œ๋žซํผ์—์„œ ์ „์—ญ ๋ณ€์ˆ˜์— ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ๋ชจ๋“ˆ ์บ์‹œ๊ฐ€ /tmp์—์„œ ~/.cache ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์ •์˜ํ•˜๋ ค๋ฉด "-fmodules-cache-path=" ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ C ์–ธ์–ด ํ‘œ์ค€์ด gnu11์—์„œ gnu17๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • GNU C ํ™•์žฅ์— ๋Œ€ํ•œ ์˜ˆ๋น„ ์ง€์› ์ถ”๊ฐ€ "asm ์ธ๋ผ์ธยป ์–ด์…ˆ๋ธ”๋Ÿฌ ์‚ฝ์ž…๋ฌผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์€ ์•„์ง ๋ถ„์„ ์ค‘์ด์ง€๋งŒ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋„ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • OpenCL ๋ฐ CUDA ์ง€์›๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. OpenCL 2.0 ๋ธ”๋ก ์ง„๋‹จ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜๊ณ  ์ƒˆ๋กœ์šด OpenMP 5.0 ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • extern "C" ๋ฐ extern "C++" ๋ธ”๋ก ๋‚ด ์ •๋ ฌ์„ ์œ„ํ•ด clang-format ์œ ํ‹ธ๋ฆฌํ‹ฐ์— IndentExternBlock ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ •์  ๋ถ„์„๊ธฐ๋Š” C++์—์„œ ์ƒ์†๋œ ์ƒ์„ฑ์ž์˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž ๊ธˆ์„ ํ™•์ธํ•˜๋Š” alpha.core.C11Lock ๋ฐ alpha.fuchsia.Lock, putenv์˜ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์„ ๊ฐ์ง€ํ•˜๋Š” alpha.security.cert.pos.34c, ์…€ ์ˆ˜ ์—†๋Š” ์œ ํ˜•์˜ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” webkit.NoUncountedMemberChecker ๋ฐ webkit.RefCntblBaseVirtualDtor๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. .cplusplus .SmartPtr์€ null ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ์—ญ์ฐธ์กฐ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฐํ„ฐ์—์„œ clang-tidy ์ถ”๊ฐ€ ์ƒˆ๋กœ์šด ์ˆ˜ํ‘œ์˜ ์ƒ๋‹น ๋ถ€๋ถ„.
  • clangd ์บ์‹ฑ ์„œ๋ฒ„(Clang Server)์˜ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜๊ณ  ์ƒˆ๋กœ์šด ์ง„๋‹จ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ํ˜์‹  LLVM 11.0:

  • ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด Python 3์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Python 3์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ Python 2๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Go ์–ธ์–ด(llgo)์šฉ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํฌํ•จ๋œ ํ”„๋ŸฐํŠธ ์—”๋“œ๋Š” ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ์™ธ๋˜๋ฉฐ ํ–ฅํ›„ ์žฌ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฒกํ„ฐํ™” ํ˜ธ์ถœ์„ ์œ„ํ•œ ์Šค์นผ๋ผ ํ•จ์ˆ˜์™€ ๋ฒกํ„ฐ ํ•จ์ˆ˜ ๊ฐ„์˜ ๋งคํ•‘์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒกํ„ฐ-ํ•จ์ˆ˜-abi-๋ณ€ํ˜• ์†์„ฑ์ด IR(์ค‘๊ฐ„ ํ‘œํ˜„)์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. llvm::VectorType์—๋Š” llvm::FixedVectorType๊ณผ llvm::ScalableVectorType์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋ณ„๋„์˜ ๋ฒกํ„ฐ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • udef ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๊ธฐํ•˜๊ณ  undef ๊ฐ’์„ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ์ •์˜๋˜์ง€ ์•Š์€ ๋™์ž‘์œผ๋กœ ์ธ์‹๋ฉ๋‹ˆ๋‹ค. ์•ˆ์—
    memset/memcpy/memmove๋Š” undef ํฌ์ธํ„ฐ ์ „๋‹ฌ์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ ํฌ๊ธฐ๊ฐ€ ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ XNUMX์ธ ๊ฒฝ์šฐ.

  • LLJIT์—๋Š” LLJIT::initialize ๋ฐ LLJIT::deinitialize ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ •์  ์ดˆ๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. StaticLibraryDefinitionGenerator ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JITDylib์— ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์— ๋Œ€ํ•œ C API๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ORCv2 (JIT ์ปดํŒŒ์ผ๋Ÿฌ ๊ตฌ์ถ•์„ ์œ„ํ•œ API)
  • Cortex-A64, Cortex-A34, Cortex-A77 ๋ฐ Cortex-X78 ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ ์ง€์›์ด AArch1 ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. RMv8.2-ECV(Enhanced Counter Virtualization), ARMv16-FGT(Fine Grained Traps), ARMv16-AMU(Activity Monitors virtualization)๋ฅผ ํฌํ•จํ•œ ARMv8.6-BF8.6(BFloat8.6) ๋ฐ ARMv8.6-A ํ™•์žฅ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ ARMv8.0-DGH(๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ํžŒํŠธ). SVE ๋ฒกํ„ฐ ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ๋‚ด์žฅ ํ•จ์ˆ˜ ๋ฐ”์ธ๋”ฉ์„ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • Cortex-M55, Cortex-A77, Cortex-A78 ๋ฐ Cortex-X1 ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ ์ง€์›์ด ARM ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„๋œ ํ™•์žฅ
    Armv8.6-A ํ–‰๋ ฌ ๊ณฑ์…ˆ ๋ฐ RMv8.2-AA32BF16 BFloat16.

  • POWER10 ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ ์ฝ”๋“œ ์ƒ์„ฑ ์ง€์›์ด PowerPC ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฃจํ”„ ์ตœ์ ํ™”๊ฐ€ ํ™•์žฅ๋˜์—ˆ์œผ๋ฉฐ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ง€์›์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • RISC-V ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ๋Š” ์•„์ง ๊ณต์‹์ ์œผ๋กœ ์Šน์ธ๋˜์ง€ ์•Š์€ ์‹คํ—˜์ ์ธ ํ™•์žฅ ๋ช…๋ น ์„ธํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ํŒจ์น˜๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • AVR ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ๋Š” ์‹คํ—˜ ๋ฒ”์ฃผ์—์„œ ๊ธฐ๋ณธ ๋ฐฐํฌํŒ์— ํฌํ•จ๋œ ์•ˆ์ • ๋ฒ”์ฃผ๋กœ ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • x86 ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ๋Š” Intel AMX ๋ฐ TSXLDTRK ๋ช…๋ น์–ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. LVI (๋กœ๋“œ ๊ฐ’ ์ฃผ์ž…) ๋ฐ ์ผ๋ฐ˜์ ์ธ ์ถ”์ธก ์‹คํ–‰ ๋ถ€์ž‘์šฉ ์–ต์ œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•˜์—ฌ CPU์—์„œ ์ž‘์—…์˜ ์ถ”์ธก ์‹คํ–‰์œผ๋กœ ์ธํ•œ ๊ณต๊ฒฉ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • SystemZ ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐฑ์—”๋“œ์— MemorySanitizer ๋ฐ LeakSanitizer์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Libc++์— ์ˆ˜ํ•™ ์ƒ์ˆ˜๊ฐ€ ํฌํ•จ๋œ ํ—ค๋” ํŒŒ์ผ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. .
  • ํผ์ง€๋Š” LLD ๋ง์ปค ๊ธฐ๋Šฅ. ์ถ”๊ฐ€๋œ ์˜ต์…˜ "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", "๋ฅผ ํฌํ•จํ•˜์—ฌ ELF ํ˜•์‹์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. -thinlto- ๋‹จ์ผ ๋ชจ๋“ˆ", "-unique", "-rosegment", "-threads=N". ์ถ”์ ์„ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” "--time-trace" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Chrome์˜ chrome://tracing ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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