λ©ν° μ½μ΄ νλ‘μΈμ± λ° μ±λ₯ μ΅μ ν
λ©ν° μ½μ΄ νλ‘μΈμ±μ νλ μ»΄ν¨ν°μ μ±λ₯μ κ·Ήλννλ λ° νμμ μΈ μμμ£ . μ΅κ·Ό λͺ λ λμ λ©ν° μ½μ΄ νλ‘μΈμλ μΌλ°νλλ©΄μ νμλ λ€μν μ΅μ ν κΈ°λ²μ΄ μ£Όλͺ©λ°κ³ μμ΅λλ€. λ³Έ κΈμμλ 8κ°μ§ λ©ν° μ½μ΄ νλ‘μΈμ± μ΅μ ν κΈ°λ², μ΄λ₯Ό ν΅ν΄ 200% ν₯μλ μ±λ₯μ λΉκ²°μ μκ°νκ² μ΅λλ€. μ΄λ¬ν κΈ°λ²λ€μ μ΅μ νλμ§ μμ λ¨μΌ CPU νκ²½μμμ μ±λ₯μ λΉκ΅μ μ½κ² λμ΄μ¬λ¦΄ μ μλ λμμ΄ λ©λλ€.
1. λ³λ ¬ μ²λ¦¬μ κ°λ
λ³λ ¬ μ²λ¦¬λ λ©ν° μ½μ΄ μμ€ν μμ μμ μ λμμ μννλ λ°©λ²μ λλ€. CPU μ½μ΄κ° μ¬λ¬ κ°μΌ κ²½μ°, νλ‘μΈμλ μ¬λ¬ κ°μ μμ μ λ³λ ¬λ‘ μ²λ¦¬ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ΄λ―Έμ§ μ²λ¦¬λ λΉλμ€ μΈμ½λ© μμ μμ λ³λ ¬ μ²λ¦¬ κΈ°μ μ ν΅ν΄ κ° μ½μ΄κ° λ 립μ μΌλ‘ λ°μ΄ν°μ μΌλΆλΆμ μ²λ¦¬νλλ‘ ν μ μμ΅λλ€. μ΄λ λ°μ΄ν° μ μ‘ μμ λ³λͺ©νμμ μ€μ΄κ³ , μ²λ¦¬ μλλ₯Ό κ·Ήλννλ ν¨κ³Όλ₯Ό κ°μ Έμ΅λλ€.
λ©ν° μ½μ΄ νλ‘μΈμμ κ°μ₯ ν° μ₯μ μ λ°λ‘ μ΄λ¬ν λ³λ ¬ μ²λ¦¬ λ₯λ ₯μ λλ€. μ΄λ₯Ό ν΅ν΄ λ€μ€ μ€λ λ μ ν리μΌμ΄μ μ λμμ λ λ§μ μμ μ μνν μ μλ κ°λ₯μ±μ μ΄μ΄μ€λλ€. μλ₯Ό λ€μ΄, λ©ν°νμ€νΉμ μ§μνλ μ ν리μΌμ΄μ μ κ° μ½μ΄μμ μλ‘ λ€λ₯Έ μμ μ λ 립μ μΌλ‘ μ€νν μ μμ΅λλ€. μ΄ λͺ¨λ κ²μ΄ κ° μ½μ΄μ μ΅μ νλ μ±λ₯μ μꡬνκ² λλ©°, μ μ ν νλ‘κ·Έλλ°κ³Ό μμ λ°°λΆμ΄ 무μλ³΄λ€ μ€μν©λλ€.
λ³λ ¬ μ²λ¦¬λ₯Ό μ§μνλ νλ‘κ·Έλλ° ν¨λ¬λ€μμλ λ€μν μ€νμΌμ΄ μμ΅λλ€. OpenMP, MPI, CUDA λ±μ΄ λνμ μ΄λ©°, κ°κ°μ ν¨λ¬λ€μμ μꡬλλ μ±λ₯κ³Ό μμμ λ°λΌ μ νν μ μμ΅λλ€. μ΄λ¬ν κΈ°μ λ€μ λ©ν° μ½μ΄ μμ€ν μ νμ κ·ΉλννκΈ° μν΄ λ§€μ° ν¨κ³Όμ μ λλ€.
2. λ‘λ λ°Έλ°μ±
λ‘λ λ°Έλ°μ±μ μμ μ΄ μ¬λ¬ μ½μ΄μ κ³ λ₯΄κ² λΆλ°°λλ κ³Όμ μ λ§ν©λλ€. λ°μ΄ν°κ° ν μ½μ΄μ μ§μ€λλ©΄, ν΄λΉ μ½μ΄μ λΆνκ° λμμ Έ μ 체 μμ€ν μ μ±λ₯μ΄ μ νλ©λλ€. λ°λΌμ λ‘λ λ°Έλ°μ± κΈ°μ μ νμ©νλ©΄ μμ νμ©λλ₯Ό κ·Ήλνν μ μμ΅λλ€.
μ μ ν λ‘λ λ°Έλ°μ±μ κ° μ½μ΄κ° μ μ ν μμ μμ μ λ°μ μ μλλ‘ ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ½μ΄μ κ³ΌλΆνλ₯Ό λ°©μ§νκ³ , μμμ μλͺ¨λ₯Ό μ€μΌ μ μμ΅λλ€. μλ₯Ό λ€μ΄, μΉ μλ²λ λ§μ μμ²μ μ²λ¦¬ν΄μΌ ν κ²½μ°, κ° μμ²μ CPU μ½μ΄μ κ· λ±νκ² λΆλ°°ν΄ λμ μλ΅ μλλ₯Ό μ μ§ν©λλ€. μ΄λ κ²°κ΅ μ¬μ©μ κ²½νμ κ°μ μΌλ‘ μ΄μ΄μ§λ©°, μλ²μ μ λ°μ μΈ μ±λ₯μ ν₯μμν΅λλ€.
λ‘λ λ°Έλ°μ±μ κΈ°λ²μλ μ μ λΆλ°°μ λμ λΆλ°°κ° μμ΅λλ€. μ μ λΆλ°°λ 미리 μ ν΄μ§ κ·μΉμ λ°λΌ μ½μ΄μ μμ μ ν λΉνμ§λ§, λμ λΆλ°°λ νμ¬ μ½μ΄μ λΆνλ₯Ό λͺ¨λν°λ§νλ©° μ€μκ°μΌλ‘ μμ μ μ‘°μ ν©λλ€. μ΄λ¬ν μ κ·Όμ νΉν μμΈ‘ν μ μλ λΆν λ³νκ° μλ νκ²½μμ λ§€μ° μ μ©ν©λλ€.
3. μΊμ μ΅μ ν
CPU μΊμλ λ°μ΄ν° μ κ·Ό μκ°μ ν¬κ² μ€μ¬μ£Όλ μ€μν λ©λͺ¨λ¦¬μ λλ€. νλ‘μΈμ λ΄μ λ κ° μ΄μμ μ½μ΄κ° μΊμ λ©λͺ¨λ¦¬λ₯Ό 곡μ ν κ²½μ°, μΊμ μ΅μ νλ λ μ€μν κ³ λ €μ¬νμ΄ λ©λλ€. μΊμ μ΅μ νλ μμ£Ό μ¬μ©λλ λ°μ΄ν°λ₯Ό μ¬μ¬μ©νμ¬ λ©λͺ¨λ¦¬ μ κ·Όμ μ΅μννκ³ , μ±λ₯μ κ·Ήλννλ κΈ°λ²μ λλ€.
μλ₯Ό λ€μ΄, λ°μ΄ν°λ₯Ό μμ°¨μ μΌλ‘ μ κ·Όνλ λμ , νλ‘κ·Έλ¨μ ν΄λΉ λ°μ΄ν°κ° μμ£Ό μ¬μ©λ κ²μ΄λΌ μμΈ‘λ κ²½μ° μΊμμ μ μ₯ν©λλ€. μ΄ λ°©μμ λ©λͺ¨λ¦¬ λμνμ μ μ½νκ³ , λΉ λ₯Έ μ κ·Ό μλλ‘ μΈν μ±λ₯ ν₯μμ κ°μ Έμ΅λλ€. λν, λ€μν μΊμ κ³μΈ΅ ꡬ쑰λ₯Ό μ€κ³νμ¬ λ©ν° μ½μ΄ νλ‘μΈμμ μ΅μ νν μλ μμ΅λλ€. μ΄λ¬ν ꡬ쑰λ λ³λ ¬ νλ‘μΈμ±μ ν¨μ¨μ±μ λμ΄λ λ° μ€μν μν μ ν©λλ€.
μΊμ μ΅μ νλ₯Ό ν΅ν΄ μ€μ μ±λ₯μ 200%κΉμ§ ν₯μμν¨ μ¬λ‘λ μ’ μ’ μ°Ύμλ³Ό μ μμ΅λλ€. μ±λ₯μ΄ μ€μν κ²μμ΄λ κ³ μ±λ₯ μ»΄ν¨ν λΆμΌμμλ μ΄λ₯Ό ν΅ν΄ λμ± μꡬλλ μ±λ₯μ λ¬μ±ν μ μμ΅λλ€.
4. μ€λ λ μ΅μ ν
μ€λ λ μ΅μ νλ λ©ν° μ½μ΄ νλ‘μΈμμμ μ€μν©λλ€. νλ‘κ·Έλλ¨Έλ μννΈμ¨μ΄κ° μ€λ λλ₯Ό μ μ νκ² κ΄λ¦¬ν΄μΌ κ° μ½μ΄μμ μλν μμ μ΄ μ€νλ μ μμ΅λλ€. ν¨κ³Όμ μΌλ‘ μ€λ λλ₯Ό νμ©νλ©΄ λ©ν° μ½μ΄ νλ‘μΈμμ μ±λ₯μ κ·Ήλνν μ μμ΅λλ€.
νλμ νλ‘κ·Έλ¨μμ μ¬λ¬ μ€λ λκ° νμν λ, μ€λ λλ₯Ό ν¨μ¨μ μΌλ‘ λ°°μΉνκ³ κ΄λ¦¬νλ κ²μ μ±λ₯μ μ§μ μ μΈ μν₯μ λ―ΈμΉ©λλ€. μλ₯Ό λ€μ΄, μ¬λ¬ μ€λ λκ° λμμ DBμ μ κ·Όν λ μΆ©λμ΄ λ°μν μ μμΌλ©°, μ΄λ μ±λ₯ μ νλ‘ μ΄μ΄μ§λλ€. λ°λΌμ μ€λ λ κ°μ νλ ₯μ μ κ΄λ¦¬νκΈ° μν΄ Lock, Mutex λ° Semaphore λ±μ κΈ°λ²μ νμ©νλ κ²μ΄ νμμ μ λλ€.
λν, κ° μ€λ λκ° μ±λ₯μ κ·Ήλννλ λ°©λ²μ λͺ¨μν΄μΌ ν©λλ€. μ€λ λλ₯Ό μμ±νκ³ μλ©Έμν€λ λΉμ©μ μ€μ΄κΈ° μν λ°©λ²μΌλ‘ μ€λ λ ν(Thread Pool)μ μ¬μ©νλ κ²½μ°κ° λ§μ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ€λ λ κ΄λ¦¬μ μ€λ²ν€λλ₯Ό μ€μ΄κ³ , νμν μκ°μλ§ μ€λ λλ₯Ό νμ±νν μ μμ΅λλ€.
5. νμ΄νλΌμ΄λ
νμ΄νλΌμ΄λμ λ©ν° μ½μ΄ νλ‘μΈμμ μ±λ₯μ ν₯μμν€κΈ° μν κΈ°μ μ€ νλμ λλ€. νμ΄νλΌμ΄λμ λͺ λ Ήμ΄λ₯Ό μ¬λ¬ λ¨κ³λ‘ λλμ΄ λμμ μ²λ¦¬νλ κΈ°λ²μΌλ‘, κ° μ€ν μ΄μ§μμ μλ‘ λ€λ₯Έ λͺ λ Ήμ΄λ₯Ό μ²λ¦¬ν μ μμ΅λλ€. μ΄λ‘ μΈν΄ CPUμ μμ νμ©λλ₯Ό λμΌ μ μμ΅λλ€.
μλ₯Ό λ€μ΄, λ§€μ° κΈ΄ μμ μ μ²λ¦¬ν λ, μ λ ₯ λ¨κ³μ μλ μμ κ³Ό μΆλ ₯ λ¨κ³μ μλ μμ μ λμμ μνν μ μμ΅λλ€. μ΄λ κ° λ¨κ³κ° νΉμ μ½μ΄λ₯Ό μ¬μ©νκ³ , κ²°κ³Όμ μΌλ‘ μ 체 μ²λ¦¬ μκ°μ λ¨μΆμν€λ λ° κΈ°μ¬ν©λλ€. μ΄λ¬ν κΈ°λ²μ λΉλμ€ λ λλ§μ΄λ λκ·λͺ¨ λ°μ΄ν° μ²λ¦¬μ κ°μ κ³ μ μ²λ¦¬ νκ²½μμ νΉν μ μ©ν©λλ€.
νμ΄νλΌμ΄λμ λμ μ μμ€ν μ μ±λ₯μ λμ΄κ³ , νκ· μ μΌλ‘ λ λ§μ μμ μ μ²λ¦¬ν μ μλ λ₯λ ₯μ λΆμ¬ν©λλ€. μ λ°μ μΌλ‘ λ°μ΄ν° μ²λ¦¬ μ§μ°μ μ€μ΄κ³ , μ±λ₯μ λμ΄λ λ° κΈ°μ¬ν©λλ€.
6. λ©λͺ¨λ¦¬ μ΅μ ν
λ©λͺ¨λ¦¬ μ΅μ νλ λ©ν° μ½μ΄ μμ€ν μμ νμμ μΈ μμμ λλ€. κ°κ°μ μ½μ΄κ° λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ, λ©λͺ¨λ¦¬ μ κ·Ό ν¨ν΄μ μ΅μ νν΄μΌ λ°μ΄ν° μ μ‘μ λΉν¨μ¨μ±μ μ€μ΄κ³ , μλλ₯Ό μ¦κ°μν¬ μ μμ΅λλ€.
μ΅μ νλ λ©λͺ¨λ¦¬ ꡬ쑰λ λ°μ΄ν° μ κ·Όμ΄ ν¬μν νκ²½μμ λ§€μ° μ€μν©λλ€. λΆνμν λ©λͺ¨λ¦¬ μ κ·Όμ μ€μ΄κΈ° μν΄ μ£Όμ₯λ λ°μ΄ν°μ ν λΉ λ° ν΄μ λ₯Ό μ΅μννλ λ°©λ²λ μμ΅λλ€. μ΄λ μλ₯Ό λ€μ΄, μ€ν λ©λͺ¨λ¦¬ λμ κ³ μ λ λ©λͺ¨λ¦¬ λΈλ‘μ μ¬μ©νλ κ²μ ν¬ν¨ν©λλ€. μ΄λ₯Ό ν΅ν΄ λ©λͺ¨λ¦¬ ν λΉκ³Ό ν΄μ μ μ€λ²ν€λλ₯Ό μ€μΌ μ μμ΅λλ€.
λν, μΊμ μ λ ¬(Cache Alignment) κΈ°λ²μ΄λ νμ΄μ§ ν¬κΈ° μ‘°μ (Page Size Tuning) λ±μ λ°©λ²μ ν΅ν΄ λ©λͺ¨λ¦¬ μ κ·Ό μλλ₯Ό ν¬κ² κ°μ ν μ μμ΅λλ€. λ©λͺ¨λ¦¬ ꡬ쑰μ μ±λ₯ μ΅μ νλ λ©ν° μ½μ΄ μμ€ν μ μ±λ₯μ μ΅λλ‘ λμ΄ μ¬λ¦¬λλ° μ€μν μμλ‘ μμ©ν©λλ€.
7. λΉλκΈ° μ²λ¦¬
λΉλκΈ° μ²λ¦¬λ λ©ν° μ½μ΄ κΈ°λ° μ ν리μΌμ΄μ μμ μ΅μ νλ μ±λ₯μ ν립ν μ μλ ν¨κ³Όμ μΈ λ°©λ²μ λλ€. λΉλκΈ°μ μΌλ‘ μμ μ μ§νν¨μΌλ‘μ¨ μ½μ΄λ λ€λ₯Έ μμ μ μνν μ μλ μ¬μ λ₯Ό κ°μ§ μ μμ΅λλ€.
μλ₯Ό λ€μ΄, λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν° μμ²μ΄ λ°μνμ λ, λΉλκΈ° μ²λ¦¬λ₯Ό ν΅ν΄ μμ²μ΄ μλ£λ λκΉμ§ κΈ°λ€λ¦¬μ§ μκ³ , λ€λ₯Έ μμ μ λμμ μνν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ½μ΄λ λμ± ν¨μ¨μ μΌλ‘ μμμ νμ©ν μ μκ² λ©λλ€.
λΉλκΈ° μ²λ¦¬λ₯Ό ν΅ν΄ κ°μμ μΈ μ±κ³Όλ₯Ό μ»κΈ° μν΄μλ, μ€λ λ κ΄λ¦¬μ λ€νΈμν¬ μ§μ° μκ°μ λν μ μ ν κ΄λ¦¬κ° νμν©λλ€. μ΄λ λΉλκΈ° APIλ μ΄λ²€νΈ 루ν(Event Loop)λ₯Ό νμ©νμ¬ κ΅¬νν μ μμ΅λλ€. κ²°κ³Όμ μΌλ‘, λΉλκΈ° μ²λ¦¬λ μ ν리μΌμ΄μ μ μ λ°μ μΈ λ°μμ±κ³Ό μ±λ₯μ ν₯μμν€λ©°, λ©ν° μ½μ΄ νλ‘μΈμμ μ±λ₯μ κ·Ήλννλ λ° ν¬κ² κΈ°μ¬ν©λλ€.
8. μ΅μ νλ μκ³ λ¦¬μ¦
μκ³ λ¦¬μ¦μ μ΅μ νλ μ±λ₯ ν₯μμ 무κΆλ¬΄μ§ν κ°λ₯μ±μ μ 곡νλ©°, λ©ν° μ½μ΄ νκ²½μμλ κ·Έ μ€μμ±μ λ§€μ° ν½λλ€. λμ± ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ μ£Όμ΄μ§ λ¬Έμ λ₯Ό λ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ ν΄κ²°ν μ μμ΅λλ€. μ΄λ κ²°κ΅ λ©ν° μ½μ΄ μμ€ν μ μ±λ₯μ κ·Ήλννλ λ° κΈ°μ¬νκ² λ©λλ€.
μλ₯Ό λ€μ΄, μ λ ¬ μκ³ λ¦¬μ¦μ κ²½μ°, λ³ν© μ λ ¬(Merge Sort)μ΄λ ν΅ μ λ ¬(Quick Sort)κ³Ό κ°μ κ³ κΈ μ λ ¬ μκ³ λ¦¬μ¦μ λλμ λ°μ΄ν°λ₯Ό λ³΄λ€ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μμ΅λλ€. μ΄λ¬ν μκ³ λ¦¬μ¦μ λ€μμ μ½μ΄μμ λ°μ΄ν°λ₯Ό λλμ΄ μ²λ¦¬ν μ μλ κ΅¬μ‘°λ‘ μ€κ³λμ΄ μμ΄, κ° μ½μ΄μ μ±λ₯μ κ·Ήλνν μ μμ΅λλ€. μκ³ λ¦¬μ¦μ 볡μ‘λλ μ±λ₯μ μ§μ μ μΈ μν₯μ λ―ΈμΉκΈ° λλ¬Έμ, λ¬Έμ μ λ§λ μλ§μ μκ³ λ¦¬μ¦μ μ°Ύλ κ²μ΄ μ€μν©λλ€.
μ΅μ νλ μκ³ λ¦¬μ¦μ νμ©νλ©΄ μ²λ¦¬ μκ°μ΄ λν λ¨μΆλλ©°, μ΄λ μλΉμ€μ μλ΅ μλλ₯Ό λμ΄λ λ° μ£Όν¨ν©λλ€. λ©ν° μ½μ΄ νλ‘μΈμλ₯Ό νμ©νλ νλμ μ»΄ν¨ν νκ²½μμ μ΅μ νλ μκ³ λ¦¬μ¦μ μ‘΄μ¬λ νμμ μ λλ€.
κ²°λ‘ λ° κΆμ₯ μ¬ν
λ³Έ κΈμμλ λ©ν° μ½μ΄ νλ‘μΈμ± νκ²½μμ μ±λ₯μ 200% ν₯μμν¬ μ μλ 8κ°μ§ μ΅μ ν κΈ°λ²μ λν΄ μκ°νμμ΅λλ€. λ³λ ¬ μ²λ¦¬, λ‘λ λ°Έλ°μ±, μΊμ μ΅μ ν, μ€λ λ μ΅μ ν, νμ΄νλΌμ΄λ, λ©λͺ¨λ¦¬ μ΅μ ν, λΉλκΈ° μ²λ¦¬, κ·Έλ¦¬κ³ μκ³ λ¦¬μ¦ μ΅μ ν λ± μ¬λ¬ κΈ°λ²μ΄ λ Όμλμμ΅λλ€. μ΄λ¬ν κΈ°λ²λ€μ λ©ν° μ½μ΄ νλ‘μΈμλ₯Ό μ νμ©νμ¬ μ±λ₯μ κ·Ήλννλ λ° νμμ μ λλ€.
μ΄λ¬ν κΈ°λ²λ€μ κ°κΈ° λ€λ₯Έ νκ²½κ³Ό μꡬμ λ°λΌ μ΅μ νλμ΄μΌ νλ©°, μ€νμ ν΅ν΄ μ΅μμ μ‘°ν©μ μ°ΎμμΌ ν©λλ€. λμμμ΄ λ³ννλ κΈ°μ νκ²½ μμμ μ΅μ κΈ°μ λν₯μ νμ νκ³ , λ§μΆ€ν κ°λ° μ λ΅μ μΈμ°λ κ²μ΄ νμν©λλ€. μ¬λ¬λΆμ νλ‘μ νΈμ μ΅μ μ μ±λ₯μ νμΈν΄ 보μΈμ!
λ©ν μ€λͺ
8κ°μ§ λ©ν° μ½μ΄ νλ‘μΈμ± μ΅μ ν κΈ°λ²μ ν΅ν΄ μ±λ₯μ 200% ν₯μμν€λ λΉκ²°μ μμ보μΈμ.
#λ©ν°μ½μ΄ #νλ‘μΈμ± #μ΅μ ν #μ±λ₯ν₯μ #λ³λ ¬μ²λ¦¬ #λ‘λλ°Έλ°μ± #λ©λͺ¨λ¦¬μ΅μ ν #λΉλκΈ°μ²λ¦¬ #μκ³ λ¦¬μ¦ #μ€λ λμ΅μ ν