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