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

12.1๋…„๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— ์ƒˆ๋กœ์šด GCC 12.x ๋ธŒ๋žœ์น˜์˜ ์ฒซ ๋ฒˆ์งธ ์ค‘์š”ํ•œ ๋ฆด๋ฆฌ์Šค์ธ ๋ฌด๋ฃŒ ์ปดํŒŒ์ผ๋Ÿฌ ์ œํ’ˆ๊ตฐ GCC 12.0์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฆด๋ฆฌ์Šค ๋ฒˆํ˜ธ ์ง€์ • ์ฒด๊ณ„์— ๋”ฐ๋ผ ๋ฒ„์ „ 12.1์ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉฐ GCC 13.0 ๋ฆด๋ฆฌ์Šค ์ง์ „์— GCC 13.1 ๋ถ„๊ธฐ๊ฐ€ ์ด๋ฏธ ๋ถ„๊ธฐ๋˜์—ˆ์œผ๋ฉฐ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์Œ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์ธ GCC 23์ด ํ˜•์„ฑ๋œ๋‹ค. 35์›” XNUMX์ผ, ์ด ํ”„๋กœ์ ํŠธ๋Š” GCC ์ดˆํŒ์ด ํ˜•์„ฑ๋œ ์ง€ XNUMX์ฃผ๋…„์„ ๊ธฐ๋…ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ :

  • C ์œ ํ˜•, ํ•จ์ˆ˜ ๊ฐ„ ์—ฐ๊ฒฐ ๋ฐ ๋””๋ฒ„๊น… ๊ธฐํ˜ธ์— ๋Œ€ํ•œ ์ •๋ณด์˜ ์ปดํŒฉํŠธํ•œ ์ €์žฅ์„ ์ œ๊ณตํ•˜๋Š” CTF(Compact Type Format) ๋””๋ฒ„๊น… ํ˜•์‹์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ELF ๊ฐ์ฒด์— ํฌํ•จ๋˜๋ฉด ํ˜•์‹์„ ํ†ตํ•ด EFL ๋ฌธ์ž ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 1980๋…„๋Œ€์— ๋งŒ๋“ค์–ด์ง„ "STABS" ๋””๋ฒ„๊น… ์ •๋ณด ์ €์žฅ ํ˜•์‹์— ๋Œ€ํ•œ ์ง€์›์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • C ๋ฐ C++ ์–ธ์–ด์— ๋Œ€ํ•œ ํ–ฅํ›„ C2X ๋ฐ C++23 ํ‘œ์ค€์— ๋Œ€ํ•œ ์ง€์›์„ ๊ณ„์† ํ™•์žฅํ•˜๋Š” ์ž‘์—…์ด ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "if consteval" ํ‘œํ˜„์‹์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ธ์ˆ˜์— auto๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค("f(auto(g()))"). constexpr๋กœ ์„ ์–ธ๋œ ํ•จ์ˆ˜์—์„œ๋Š” ๋ฆฌํ„ฐ๋Ÿด์ด ์•„๋‹Œ ๋ณ€์ˆ˜์ธ goto ๋ฐ labels์˜ ์‚ฌ์šฉ์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์ฐจ์› ์ธ๋ฑ์Šค ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. if, for ๋ฐ switch์—์„œ ์ดˆ๊ธฐํ™” ๋ธ”๋ก์˜ ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค("for (using T = int; T e : v)").
  • C++ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” C++20 ๋ฐ C++23 ํ‘œ์ค€์˜ ์‹คํ—˜์  ์„น์…˜์— ๋Œ€ํ•œ ์ง€์›์„ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. std::move_only_function, , std::basic_string::resize_and_overwrite, , ๋ฐ std::invoke_r์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. constexpr ํ•จ์ˆ˜์—์„œ std::unique_ptr, std::Vector, std::basic_string, std::ional ๋ฐ std::variant๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Fortran ํ”„๋ŸฐํŠธ์—”๋“œ๋Š” Fortran๊ณผ C ์ฝ”๋“œ ๊ฐ„์˜ ์ด์‹์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•˜๋Š” TS 29113 ์‚ฌ์–‘์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์ „์— Clang์— ์ถ”๊ฐ€๋œ __builtin_shuffleVector(vec1, vec2, index1, index2, ...) ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ™•์žฅ์€ ์ผ๋ฐ˜์ ์ธ ๋ฒกํ„ฐ ์…”ํ”Œ ๋ฐ ์…”ํ”Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ์ผ ํ˜ธ์ถœ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • "-O2" ์ตœ์ ํ™” ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฒกํ„ฐํ™”๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค(-ftree-Vectorize ๋ฐ -fvect-cost-model=very-cheap ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋จ). ๋งค์šฐ ์ €๋ ดํ•œ ๋ชจ๋ธ์—์„œ๋Š” ๋ฒกํ„ฐ ์ฝ”๋“œ๊ฐ€ ๋ฒกํ„ฐํ™”๋˜๋Š” ์Šค์นผ๋ผ ์ฝ”๋“œ๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฒกํ„ฐํ™”๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜ ์‚ฌ์šฉ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•˜๊ณ  ์ทจ์•ฝ์ ์„ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•ด ์Šคํƒ์—์„œ ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก "-ftrivial-auto-var-init" ๋ชจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • C ๋ฐ C++ ์–ธ์–ด์˜ ๊ฒฝ์šฐ Clang์˜ ์œ ์‚ฌํ•œ ํ•จ์ˆ˜์™€ ํ˜ธํ™˜๋˜๋Š” ๋‚ด์žฅ ํ•จ์ˆ˜ __builtin_dynamic_object_size๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๊ฐ์ฒด์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • C ๋ฐ C++ ์–ธ์–ด์˜ ๊ฒฝ์šฐ "unavailable" ์†์„ฑ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).
  • C ๋ฐ C++ ์–ธ์–ด์˜ ๊ฒฝ์šฐ ์ „์ฒ˜๋ฆฌ ์ง€์‹œ๋ฌธ "#elifdef" ๋ฐ "#elifndef"์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • UTF-8 ๋ฌธ์ž๊ฐ€ ์ž˜๋ชป ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๋Š” "-Wbidi-chars" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์–‘๋ฐฉํ–ฅ ํ…์ŠคํŠธ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด์„ ์ฐธ์กฐํ•˜๋Š” ๋‘ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋น„๊ตํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๋Š” "-Warray-compare" ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๋ฒกํ„ฐํ™” ์žฅ์น˜(SIMD)๊ฐ€ ์žˆ๋Š” ๋ฉ€ํ‹ฐ ์ฝ”์–ด ๋ฐ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ(CPU+GPU/DSP) ์‹œ์Šคํ…œ์— ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ API์™€ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” OpenMP 5.0 ๋ฐ 5.1(๊ฐœ๋ฐฉํ˜• ๋‹ค์ค‘ ์ฒ˜๋ฆฌ) ํ‘œ์ค€ ๊ตฌํ˜„ , ๊ณ„์†๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • GPU ๋ฐ NVIDIA PTX์™€ ๊ฐ™์€ ํŠน์ˆ˜ ํ”„๋กœ์„ธ์„œ์—์„œ ์ž‘์—…์„ ์˜คํ”„๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ •์˜ํ•˜๋Š” OpenACC 2.6 ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‚ฌ์–‘์˜ ๊ตฌํ˜„์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ™•์žฅ ์ง€์นจ Intel AVX86-FP512 ๋ฐ _Float16 ์œ ํ˜•์— ๋Œ€ํ•œ ์ง€์›์ด x16 ์•„ํ‚คํ…์ฒ˜์šฉ ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐฑ์—”๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • x86 ์•„ํ‚คํ…์ฒ˜์˜ ๊ฒฝ์šฐ ๋ฌด์กฐ๊ฑด ์•ž์œผ๋กœ ์ ํ”„ ์ž‘์—… ํ›„ ์ถ”์ธก์— ๋”ฐ๋ฅธ ๋ช…๋ น์–ด ์‹คํ–‰์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ํ”„๋กœ์„ธ์„œ์˜ ์ทจ์•ฝ์„ฑ์— ๋Œ€ํ•œ ๋ณดํ˜ธ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ถ„๊ธฐ ๋ช…๋ น ์งํ›„์˜ ๋ช…๋ น์„ ์„ ์ ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(SLS, Straight Line Speculation). ๋ณดํ˜ธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด "-mharden-sls" ์˜ต์…˜์ด ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค.
  • ์‹คํ—˜์  ์ •์  ๋ถ„์„๊ธฐ์— ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๊ฐ์ง€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ผ์ธ ์‚ฝ์ž…์˜ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ ๋ถ„์„์„ ์œ„ํ•œ ์ดˆ๊ธฐ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ–ฅ์ƒ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ถ”์ . ์Šค์œ„์น˜ ํ‘œํ˜„์‹์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ ๋‹ค์‹œ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ๋‚ด์žฅํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ JIT ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ libgccjit์— ๋Œ€ํ•œ 30๊ฐœ์˜ ์ƒˆ๋กœ์šด ํ˜ธ์ถœ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • CO-RE(Compile Once - Run Everywhere) ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•œ ์ง€์›์ด BPF ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ƒ์„ฑ์„ ์œ„ํ•ด ๋ฐฑ์—”๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Linux ์ปค๋„์šฉ eBPF ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์ปดํŒŒ์ผํ•˜๊ณ  ์ด๋ฅผ ์ ์šฉํ•˜๋Š” ํŠน์ˆ˜ ๋ฒ”์šฉ ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ํ˜„์žฌ ์ปค๋„ ๋ฐ BPF ์œ ํ˜• ํ˜•์‹์œผ๋กœ ๋กœ๋“œํ•จ). CO-RE๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์š”์†Œ ์œ„์น˜๊ฐ€ ๋ฒ„์ „๋งˆ๋‹ค ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „์—๋Š” ์ปดํŒŒ์ผ๋œ ์ปค๋„ ๋ฒ„์ „์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ปดํŒŒ์ผ๋œ eBPF ํ”„๋กœ๊ทธ๋žจ์˜ ์ด์‹์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • RISC-V ๋ฐฑ์—”๋“œ๋Š” ์ƒˆ๋กœ์šด ๋ช…๋ น์–ด ์„ธํŠธ ์•„ํ‚คํ…์ฒ˜ ํ™•์žฅ์ธ zba, zbb, zbc ๋ฐ zbs์— ๋Œ€ํ•œ ์ง€์›๊ณผ ๋ฒกํ„ฐ ๋ฐ ์Šค์นผ๋ผ ์•”ํ˜ธํ™” ์ž‘์—…์„ ์œ„ํ•œ ISA ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ RISC-V ISA 20191213 ์‚ฌ์–‘์— ๋Œ€ํ•œ ์ง€์›์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. T-HEAD c906 ์ฝ”์–ด์— ๋Œ€ํ•œ ์ตœ์ ํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด -mtune=thead-c906 ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • __int128_t/integer(kind=16) ์œ ํ˜•์— ๋Œ€ํ•œ ์ง€์›์ด GCN ๋งˆ์ดํฌ๋กœ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” AMD GPU์šฉ ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐฑ์—”๋“œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ปดํ“จํŒ… ์œ ๋‹›(CU)๋‹น ์ตœ๋Œ€ 40๊ฐœ์˜ ์ž‘์—… ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ฃน๋‹น ์ตœ๋Œ€ 16๊ฐœ์˜ ๋ช…๋ น์–ด ํ”„๋ก ํŠธ(ํŒŒ๋ฉด, SIMD ์—”์ง„์— ์˜ํ•ด ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜๋Š” ์Šค๋ ˆ๋“œ ์ง‘ํ•ฉ)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” CU๋‹น ํ•˜๋‚˜์˜ ๋ช…๋ น ์—์ง€๋งŒ ํ—ˆ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • NVIDIA PTX(๋ณ‘๋ ฌ ์Šค๋ ˆ๋“œ ์‹คํ–‰) ๋ช…๋ น์–ด ์„ธํŠธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์„ค๊ณ„๋œ NVPTX ๋ฐฑ์—”๋“œ์—๋Š” "-march", "-mptx" ๋ฐ "-march-map" ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. PTX ISA sm_53, sm_70, sm_75 ๋ฐ sm_80์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์•„ํ‚คํ…์ฒ˜๋Š” sm_30์ž…๋‹ˆ๋‹ค.
  • PowerPC / PowerPC64 / RS6000 ํ”„๋กœ์„ธ์„œ์˜ ๋ฐฑ์—”๋“œ์—์„œ ๋‚ด์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ๋‹ค์‹œ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์žฅ ํ•จ์ˆ˜ __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar ๋ฐ __builtin_set_tfiar๊ฐ€ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • Arm Ampere-64(-mcpu/-mtune ampere1), Arm Cortex-A1(cortex-a510), Arm Cortex-A510(cortex-a710) ๋ฐ Arm Cortex-X710(cortex-x2)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. "-march" ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ƒˆ๋กœ์šด ARMv2 ์•„ํ‚คํ…์ฒ˜ ์˜ต์…˜(armv8-a, armv8.7-a, armv8.8-a)์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ™•์žฅ๋œ ARM ๋ช…๋ น์–ด(ls9) ์‚ฌ์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์›์ž์ ์œผ๋กœ ๋กœ๋“œํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ(Intrinsics)์— ๋‚ด์žฅ๋œ C ํ•จ์ˆ˜ ๊ตฌํ˜„์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. mopsoption ARM ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜์—ฌ memcpy, memmove ๋ฐ memset ๊ธฐ๋Šฅ์„ ๊ฐ€์†ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ˜„์žฌ AArch64 ์•„ํ‚คํ…์ฒ˜์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  "-ffixed-r18" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์ž‘๋™ํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ฒ€์‚ฌ ๋ชจ๋“œ "-fsanitize=shadow-call-stack"(ShadowCallStack)์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“œ๋Š” ์Šคํƒ์—์„œ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ๋ฎ์–ด์“ฐ์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ˜ธ์˜ ๋ณธ์งˆ์€ ์ œ์–ด๋ฅผ ํ•จ์ˆ˜๋กœ ์ „์†กํ•˜๊ณ  ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— ์ด ์ฃผ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ ํ›„ ๋ณ„๋„์˜ "์„€๋„์šฐ" ์Šคํƒ์— ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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