LLVM λΉλμλ λ€λ₯Έ νμΌλ³΄λ€ μ»΄νμΌνλ λ° ν¨μ¬ μ€λ 걸리λ νμΌμ΄ μμ΅λλ€. μ΄ μ€ νλμΈ 30,000μ€μ§λ¦¬ C++ νμΌ(λ¬»μ§ μμ)μ νμΌ μ΄λ¦μ μνλ²³μμΌλ‘ κ½€ λ¦μκ³ λλΆλΆμ λ€λ₯Έ λμμ΄ λΉλλ₯Ό λ§μΉ ν μ€λλλ‘ νμ νλ κ²½μ°κ° λ§μ΅λλ€.
λμκ° κ²½νμ λ°©λ²μΌλ‘ κ·μΉ μ λ ₯μ κ²°ν©λ ν¬κΈ°λ₯Ό μ΄ν΄λ³΄κ³ λ ν° μ λ ₯μ΄ μλ κ·μΉμ λ¨Όμ μ€νν μ μλ€λ©΄ λ©μ§ κ²μ λλ€.
μ»΄νμΌ μκ°μ΄ κ³ μ νκ² νμΌ ν¬κΈ°μ ν¨μμΈμ§ νμ ν μ μμ΅λλ€. μ»΄νμΌλ¬κ° κΉ¨κΈ° νλ μμ νμΌκ³Ό μ¬μν ν° νμΌμ μμν μ μμ΅λλ€.
μ»΄νμΌ μκ°μ΄ κ³ μ νκ² νμΌ ν¬κΈ°μ ν¨μμΈμ§ νμ€νμ§ μμ΅λλ€.
κ·Έλ μ§ μλ€. κ·ΈλΌμλ λΆκ΅¬νκ³ μ»΄νμΌ μκ°μ νμ€ν νμΌ ν¬κΈ°μ μμ μκ΄κ΄κ³κ° μμ΅λλ€. λ°λΌμ μ΄ ν΄λ¦¬μ€ν±μ μ΄μ .
λν λμλ μΌμ’ μ PGO(νλ‘νμΌ κΈ°λ° μ΅μ ν):+1: κ° νμΌμ μ»΄νμΌνλ λ° κ±Έλ¦° μκ° μ 보λ₯Ό μμ§νκ³ μ΄ μ 보λ₯Ό μ¬μ©νμ¬ λ€μ λΉλμμ νμΌμ μ°μ μμλ₯Ό μ νλ κ²κ³Ό κ°μ μμ μ μνν μλ μμ΅λλ€.
κ·ΈλΌμλ λΆκ΅¬νκ³ μ»΄νμΌ μκ°μ νμ€ν νμΌ ν¬κΈ°μ μμ μκ΄κ΄κ³κ° μμ΅λλ€.
μμ€ νμΌμ κΈ°λ°μΌλ‘ νλ ν΄λ¦¬μ€ν±μ μλ―Έκ° μλ€κ³ μκ°ν©λλ€. μλ₯Ό λ€μ΄ κ±°μ 1λΆ λμ μ»΄νμΌλλ μ² μ€ λ―Έλ§μ C++ νμΌμ΄ μμ΅λλ€(λ¬»μ§ μμ). κΆκ·Ήμ μΌλ‘ μ μ²λ¦¬κΈ°μ© νμΌμ΄ μΌλ§λ μ΄λ €μ΄μ§μ μ»΄νμΌ μ€μ μΈμ€ν΄μ€νν ν νλ¦Ώ μμ λ°λΌ λ€λ¦ λλ€.
λ¬Όλ‘ 30k λΌμΈ νμΌμ΄ 1k λΌμΈλ³΄λ€ λ μ€λ μ»΄νμΌλ κ²μ΄λΌκ³ κ°μ ν μ μμ§λ§ λ΄ μκ°μλ λμκ° λ΄λ €μΌ ν κ²°μ μ μλλλ€.
κ° νμΌμ μ»΄νμΌνλ λ° κ±Έλ¦¬λ μκ° μ 보 μμ§κ³Ό κ°μ...
μ΄κ²μ μ΄λ―Έ .ninja_logμμ μνλ©λλ€. https://github.com/nico/ninjatracing μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ κ΅¬λ¬Έ λΆμνκ³ ν¬λ‘¬μμ λ‘λνμ¬ λΉλ νλ‘μΈμ€κ° μ΄λ»κ² μ§νλμλμ§ νμΈν μ μμ΅λλ€.
...μ΄ μ 보λ₯Ό μ¬μ©νμ¬ λ€μ λΉλμμ νμΌμ μ°μ μμλ₯Ό μ§μ ν©λλ€.
κ·Έλμ μ°λ¦¬λ μ΄λ―Έ λΉλ μκ° μ 보λ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ λμλ μ€μ λ‘ λ€μ λΉλμμ κ·Έ μ 보λ₯Ό μ¬μ©ν μ μμ΅λλ€. μ€μ λ‘ λμμ΄ λ μ μμ΅λλ€.
νΈμ§νλ€:
μ’μ΅λλ€. μ€μ λ‘ μ»΄νμΌ μκ°μ μ΄ν΄λ³΄μμ΅λλ€. κ°μ₯ μ€λ μ»΄νμΌλλ νμΌμ https://github.com/llvm-mirror/clang/blob/master/lib/ASTMatchers/Dynamic/Registry.cpp μ΄λ©° 600μ€λ§ μμ΅λλ€. λ°λΌμ νμΌ ν¬κΈ° λ©νΈλ¦μ μ΄ νΉμ νμΌμ λν΄ μ ν μλνμ§ μμ΅λλ€.
λν κ·Έ κ³Όμ μμ λ³λͺ© νμμ΄ λ³΄μ΄μ§ μμ΅λλ€. νμ§λ§ 13κ°μ μ€λ λλ‘ λΉλνλ λ° λμμ΄ λ μ μμ΅λλ€.
μλ νμΈμ, νμ€νμ§ μμ κ²½μ°λ₯Ό λλΉνμ¬ μ€μ λ‘ LLVM λ° clangμμ μμ ν©λλ€. λλ μ§λ λͺ μ£Ό λμ clang/llvm λ°±μλμ μλλ₯Ό μ΅μ ννλ λ° μκ°μ 보λκ³ μ¬μ€ μ΄ κ³Όμ μμ μ΄ λ¬Έμ κ° λ°μνμ΅λλ€. λΉμ μ ν΄λμ κΉ¨λν μ¬κ±΄ ν©μ΄ λ§μ΅λλ€. κ·Έλ¬λ νΉμ ν€λλ₯Ό ν°μΉνλ©΄ x86 isel lowering(μνλ²³μμ λ¦κ² λνλ λ¬Έμ λ₯Ό μ νμν΄)κ³Ό κ°μ λ§€μ° κΈ΄ μ»΄νμΌ μ€ νλλ₯Ό μ½κ² κΈ°λ€λ¦¬κ² λ μ μμ΅λλ€.
μμ λΆμμ νλμ νμΌλ§ 보기 λλ¬Έμ ν΅κ³μ μΌλ‘ μλ―Έκ° μμ΅λλ€. λ€μμ clangμ κΉ¨λν λΉλλ₯Ό μννλ λ΄ μ»΄ν¨ν°μμ cpp νμΌ ν¬κΈ°(xμΆ) λ μ»΄νμΌ μκ°(yμΆ)μ μ°μ λμ λλ€.
νμΌ ν¬κΈ°μ μ»΄νμΌ μκ° μ¬μ΄μ μκ΄ κ΄κ³κ° μλ€λ©΄ 무μμ λ Έμ΄μ¦μ²λΌ λ³΄μΌ κ²μ λλ€. κ·Έλ¬λ 보μλ€μνΌ νμΌ ν¬κΈ°μ μ»΄νμΌ μκ° μ¬μ΄μλ μλΉν μκ΄κ΄κ³κ° μμ΅λλ€.
μ΄μ¨λ κ³Όκ±° μ»΄νμΌ μκ°μ μ¬μ©νμ¬ μ£Όλ¬Έμ μ리λ κ²μ΄ μ’μ΅λλ€.
λ¬Όλ‘ μκ΄κ΄κ³κ° μμ΅λλ€. κ·Έλ¬λ λͺ¨λ νλ‘μ νΈμ 보νΈμ μΌ μ μμ λ§νΌ μΆ©λΆν κ²°μ μ μ΄μ§ μλ€κ³ μκ°ν©λλ€. λ°μ΄ν°κ° μμ΄μ μ¬κΈ°μμ ν릴 μ μμ΅λλ€.
μ°Έμ‘° #60 #376 #232
κ·Έλ¬λ λͺ¨λ νλ‘μ νΈμ 보νΈμ μΌ μ μμ λ§νΌ μΆ©λΆν κ²°μ μ μ΄μ§ μλ€κ³ μκ°ν©λλ€.
μλ§λ λ΄ μ μμ΄ λͺ ννμ§ μμ μ μμ΅λλ€.
μ μμ _건물 Aμ B μ¬μ΄μμ μμμ μ νμ νλ €λ κ²½μ°μλ λ°κ²¬μ λ°©λ²μ μ¬μ©νμ¬ λΉλνλ λ° μκ°μ΄ λ μ€λ 걸리λ λμμ νμ νλ κ²μ λλ€. "μ§λλ²μ λΉλνλ λ° μκ°μ΄ μΌλ§λ κ±Έλ Έλμ§ νμΈνμμμ€"λΌλ κ²½νμ λ°©λ²μ νμΌ ν¬κΈ°λ₯Ό νμΈνλ μ μ μλ³΄λ€ ν¨μ¬ μ’μ΅λλ€. κ·Έλ¬λ κ³Όκ±° λΉλ μκ°μ΄ μλ κ²½μ° νμΌ ν¬κΈ°κ° μ¬μ ν μ μ©ν κ²μΌλ‘ μμν©λλ€.
λ€μ λ§νμ§λ§, λ λμ ν΄λ¦¬μ€ν±(μ: μΈκΈν κ² μ€ νλ)μ΄ μ μ©λλ κ²½μ° μ΄λ₯Ό μ¬μ©ν΄μΌ ν©λλ€. κ·Έλ¬λ λλ μ΄ ν΄λ¦¬μ€ν±μ μ΅νμ μλ¨μΌλ‘ μ μ©ν κ²μ μ μνλ κ²μΌ λΏμ΄λ―λ‘ "보νΈμ "μ΄ μλλΌλ μ¬μ€μ΄ μ°¨μ΄λ₯Ό λ§λ€μ§ μλλ€κ³ μκ°ν©λλ€. μ°λ¦¬λ μμμ μΈ μ νμ νλ €κ³ νκ³ , μ΄μ λ μ‘°κΈ λ μμμ μΈ μ νμ ν©λλ€.
μ΄μ¨λ κ³Όκ±° λΉλ μκ°μ 보λ κ²μ΄ ν¨μ¬ λ«μ΅λλ€. νμΌ ν¬κΈ°λ₯Ό 보면 ν¬κ² μ κ²½ μ°μ§ μμ΅λλ€. :)
Ninjaλ 건물 Aμ B μ¬μ΄μμ μμμ μ νμ νκΈ° μν ν΄λ¦¬μ€ν±μ κ°μ§κ³ μμ΅λλ€. μ¦, 맀λνμ€νΈμμ λ¨Όμ λΉλνλ κ²μ λλ€. λμ build.ninja μμ±κΈ°μ ν΄λ¦¬μ€ν±μ λ£μ μ μμ΅λκΉ?
@colincross μ΄κΈ° μ£Όλ¬Έμλ λ¬Έμ κ° μμ§λ§ νμ μ£Όλ¬Έμ νμ΄λ°μ μ¬μ©νμ¬ μμ±μκ° κΈ°λν μ μλ κ²λ³΄λ€ λ μ νν μ μμ΅λλ€. κ°μΈμ μΌλ‘ μ΄κΈ° λΉλ μκ°μ λν΄ ν¬κ² κ±±μ νμ§ μμ§λ§ μμ±κΈ°λ κ·Έλ° μμΌλ‘ μ΅μ νν μ μμ΅λλ€.
νμΌ ν¬κΈ°λ₯Ό μ¬μ©νλ κ²μ΄ "νλ‘νμΌλ§"μ μΆ©λΆνμ§ μμ μ μλ€κ³ μκ°ν©λλ€. μλ₯Ό λ€μ΄, ν¬ν¨μ΄ λ§μ μμ£Ό μμ cpp νμΌμ μ²λ¦¬νλ λ° μ λ§ μ€λ 걸릴 μ μμ΅λλ€. κ·Έλ¦¬κ³ λΉ μ»΄νμΌ νλ‘μΈμ€(νμ±, 볡μ¬, νμΌ μμ±...)λ νμΌ ν¬κΈ°μ κ΄λ ¨μ΄ μμ΅λλ€.
κ·Έλλ μΌλΆ λΉλ λ¨μμλ μ’μ μ κ·Ό λ°©μμ
λλ€.
λ λ²μ§Έ μ κ·Ό λ°©μμ μΌλΆ νμΌμ λΉλνλ λ° νμν μκ°μ μΊμμ μ μ₯νλ κ²μ
λλ€. μ΄ μΊμλ₯Ό λΆμνμ¬ μ¬κ΅¬μΆμ μ΅μ νν μ μμ΅λλ€.
Ninjaλ μμ μκ°μ μ μ½νλ―λ‘ ν΄λΉ μ λ³΄κ° μμ΅λλ€. 첫 λ²μ§Έ λΉλκ° μ΅μ μ΄ μλ μλ μμ§λ§ ninja deps λ‘κ·Έλ μ±μμ§μ§ μμκΈ° λλ¬Έμ μ΄λ―Έ κ·Έλ μ΅λλ€.
@jlebar ,
https://go.googlesource.com/gollvm/κ³Ό λΉμ·ν κ²μ΄ μμ΅λλ€. νΉμ νμΌμ΄ "λ©λͺ¨λ¦¬ λΆμ‘±" μ€λ₯λ₯Ό νΉμ§μΌλ‘ νλ μ»΄νμΌλ¬ μΆ©λμ μννκΈ° μ μ μμ² κ°μ μ»΄νμΌλ μμ€ νμΌμ μ»μμ΅λλ€.
νμ¬ λ κ°μ νμΌλ‘ μΈν΄ μ΄λ¬ν μ€λ₯κ° λ°μν©λλ€.
https://github.com/llvm/llvm-project/blob/7d3aace3f52f6b3f87aac432aa41ae1cdeb348eb/llvm/lib/Target/AMDGPU/AMDGPULowerIntrinsics.cpp
https://github.com/llvm/llvm-project/blob/7d3aace3f52f6b3f87aac432aa41ae1cdeb348eb/llvm/lib/Target/AArch64/AArch64PreLegalizerCombiner.cpp
Golangμ μ»΄νμΌλ¬ νλ‘ νΈμλκ° OpenCL λλ OpenGLκ³Ό κ΄λ ¨μ΄ μλ€λ μ¬μ€μ μ½κ°μ μꡬμ¬μ΄ μμ§λ§(νμ¬ λ°±μλμλ κ΄λ ¨ κΈ°μ‘΄ μ΄λ²€νΈκ° μμ) μΌλ° CPU νλ‘κ·Έλλ°μ μν ARM64 μ§μμ΄ μ‘΄μ¬ν©λλ€.
μ΄λ€ κ²½μ°μλ CMakeμ ꡬμ±μμ LLVM νλ‘μ νΈμ μΌλΆλ₯Ό λΉνμ±νν΄μΌ ν©λλ€.
κ·Έλ¬λ 첫 λ²μ§Έ νμΌμ 2934κ° νμΌ μ€ 697κ°(κ³Όκ±° μ»΄νμΌ νλ‘μΈμ€λ μ»΄νμΌλ .o νμΌμ 보쑴ν¨)μ΄κ³ λ λ²μ§Έ νμΌ(ν΄λ¦° λΉλ λ΄)μ 3214κ° νμΌ μ€ 817κ°μ
λλ€.
λ€λ₯Έ νμΌμ λ¨Όμ μ»΄νμΌνλ κ²μ΄ κ°μ₯ μ’μΌλ―λ‘ RAMμ κ°μ₯ λ§μ΄ μλΉνλ νμΌμ μμλλ‘ κ³ μ λ©λλ€. κ·Έλμ λλ κ·Έκ²λ€μ λ§μ§λ§μΌλ‘ μ»λ λ° κ΄μ¬μ΄ μμ κ²μ
λλ€. κ·Έλ¦¬κ³ μλνκΈ° μ μλ μ μ μκΈ° λλ¬Έμ μ΄λ€ λ¬Έμ κ° μλμ§ νμΈν©λλ€. μλλ©΄ λ΄κ° ν μ μμ΅λκΉ?
μ΄λ°
@advancedwebdeveloper μ€μ λ‘ Ninjaμλ μ νν -jN
μ€μ κ³Ό λ³λ ¬λ‘ λͺ¨λ κ²μ μ»΄νμΌνκΈ°μ μΆ©λΆν RAMμ΄ μλ€λ κ°μ μ΄ μμ΅λλ€. κ·Όλ³Έμ μΌλ‘ μ΄ λ¬Έμ λ Ninjaκ° μ νν μμλ‘ μΈν΄ λ°μνλ κ²μ΄ μλλΌ Ninja(λ° λ΄κ° μκ³ μλ λ€λ₯Έ λͺ¨λ λΉλ λꡬ)κ° λ³λ ¬ μ²λ¦¬λ₯Ό μ ννλ λ§€μ° κ±°μΉ λ°©λ²λ§ μ 곡νλ€λ μ¬μ€ λλ¬Έμ λ°μν©λλ€. -j
νλκ·Έμ
λλ€.
κ°μ₯ μ μ©ν λκΈ
Ninjaλ μμ μκ°μ μ μ½νλ―λ‘ ν΄λΉ μ λ³΄κ° μμ΅λλ€. 첫 λ²μ§Έ λΉλκ° μ΅μ μ΄ μλ μλ μμ§λ§ ninja deps λ‘κ·Έλ μ±μμ§μ§ μμκΈ° λλ¬Έμ μ΄λ―Έ κ·Έλ μ΅λλ€.