2024-10-02 17:41:18
λ°˜μ‘ν˜•

 

μ˜€λŠ˜μ€ ν”„λ‘œμ„ΈμŠ€ μ€‘μ—μ„œλ„ 병행 ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•˜μ—¬ 곡뢀λ₯Ό ν•΄λ³Ό 것이닀.

 

병행 ν”„λ‘œμ„ΈμŠ€λŠ” μ„±λŠ₯ν–₯상을 μœ„ν•΄μ„œ 병행 λ˜λŠ” λ³‘λ ¬λ‘œ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ°°μΉ˜ν•˜λŠ” 방법을 λ§ν•œλ‹€.

λ‹€μŒ κ·Έλ¦Ό 예제λ₯Ό 보며 ν™•μΈν•΄λ³΄μž.

병행성과 λ³‘λ ¬μ„±μ˜ μ˜ˆμ‹œ

μš°μ„  병행 싀행이라면, ν•˜λ‚˜μ˜ CPUλ₯Ό μ‚¬μš©ν•˜λŠ”λ° 4개의 processκ°€ nμ΄ˆμ”© 할당을 ν•˜λ©° λŒμ•„κ°€λ©΄μ„œ κ³΅ν‰ν•˜κ²Œ μ‹€ν–‰λ˜λŠ” 것이닀. μ΄λ ‡κ²Œ 되면 λ‚΄λΆ€μ μœΌλ‘œ λ™μ‹œμ—λŠ” μ•„λ‹ˆκΈ΄ ν•˜μ§€λ§Œ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” νš¨κ³ΌλŠ” λ§Œλ“€μ–΄λ‚Ό 수 μžˆλ‹€.

 

병렬 싀행이라면, 두 개 μ΄μƒμ˜ CPUλ₯Ό κ°€μ§€κ³ μ„œ μ‹€μ œλ‘œ λ™μ‹œμ— processλ₯Ό μ‹€ν–‰ν•˜λŠ” 것이닀. μ΄λŠ” CPU의 κ°―μˆ˜κ°€ λ§Žμ•„μ§€λ©΄

λ§Žμ•„μ§ˆμˆ˜λ‘ μ„±λŠ₯이 ν–₯μƒλœλ‹€.

 

λ˜ν•œ, 병생성이 높아지면 λ†’μ•„μ§ˆμˆ˜λ‘ μ•”λ‹¬μ˜ 법칙에 μ˜ν•΄μ„œ μ„±λŠ₯이 λ”μš± 더 ν–₯μƒλœλ‹€.

μ•”λ‹¬μ˜ λ²•μΉ™μ΄λž€, μ„±λŠ₯ <= 1 / ((1 - p) + P / N ) λ₯Ό ν•œ 것이닀. μ—¬κΈ°μ„œ PλŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ λ³‘ν–‰μ²˜λ¦¬κ°€ κ°€λŠ₯ν•œ λΉ„μœ¨μ΄κ³ 

N은 CPU의 κ°œμˆ˜μ΄λ‹€.

 

ν•˜μ§€λ§Œ, 병행 ν”„λ‘œκ·Έλž˜λ°μ„ ν• λ•Œ κ³ λ €ν•΄μ•Όν•  점이 μžˆλŠ”λ° λ‹€μŒκ³Ό κ°™λ‹€.

1. 병행 ν”„λ‘œμ„ΈμŠ€λ“€ κ°„μ˜ κ³΅μœ μžμ› 문제

2. 병행 ν”„λ‘œμ„ΈμŠ€λ“€ κ°„μ˜ μƒν˜Έν†΅μ‹  문제

3. 병행 ν”„λ‘œμ„ΈμŠ€λ“€ κ°„μ˜ 동기화 문제

 

μ„ ν–‰κ·Έλž˜ν”„

μ„ ν–‰κ·Έλž˜ν”„λž€, 병행성을 νŒλ³„ν•  λŒ€ μ‚¬μš©ν•˜λŠ” 기법 즉, tool이닀.

μ˜ˆμ‹œλ₯Ό 그림으둜 ν•œ 번 μ‚΄νŽ΄λ³΄μž.

μ„ ν–‰κ·Έλž˜ν”„μ˜ μ˜ˆμ‹œ

이 κ·Έλž˜ν”„λ₯Ό κΈ°μ€€μœΌλ‘œ λ§ν•˜μžλ©΄, S1κ³Ό S2λŠ” λ™μ‹œμ— 싀행이 κ°€λŠ₯ν•œ 것이닀.

(단, μ‹€ν–‰μˆœμ„œ κ·Έλž˜ν”„μ— 사이클이 있으면 μ•ˆλœλ‹€.)

 

병렬 ν”„λ‘œμ„ΈμŠ€

---> 병렬 ν”„λ‘œκ·Έλž˜λ°μ€ μ²˜λ¦¬λŸ‰μ„ κ· λ“±ν•˜κ²Œ λ‚˜λˆ„μ–΄μ„œ μ²˜λ¦¬ν•΄μ•Όν•œλ‹€

병렬 ν”„λ‘œμ„ΈμŠ€μ˜ νŠΉμ§•κ³Ό ν•„μš”μ„±μ„ ν•œ 번 μ•Œμ•„λ³΄μž.

(2개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό 물리적으둜 λ™μ‹œμ— μ‹€ν–‰μ‹œν‚¨λ‹€) 

 

병렬 ν”„λ‘œκ·Έλž˜λ°μ€ μ—¬λŸ¬ 개의 ν”„λ‘œμ„ΈμŠ€λ₯Ό λ™μ‹œμ— μ‹€ν–‰ν•˜λŠ” 것인데, 데이터 패럴러리즘과 ν…ŒμŠ€ν¬ 패럴러리즘이 μ‘΄μž¬ν•œλ‹€.

데이터 νŒ¨λŸ΄λ¦¬μ¦˜μ€ λ©”λͺ¨λ¦¬μ— μ €μž₯된 데이터λ₯Ό λŒ€μ‹  λΆ„ν• ν•˜μ—¬ λ™μ‹œμ— μ²˜λ¦¬ν•˜λ €λŠ” 방식인데

μ„œλ‘œ λ©”λͺ¨λ¦¬μ— μ ‘κ·Όν•˜λ €λ‹€ λ³΄λ‹ˆ 병λͺ©ν˜„상이 λ°œμƒν•  수 μžˆλ‹€.

κ·Έλž˜μ„œ μ•„μ˜ˆ λΆ„λ¦¬μ‹œμΌœμ„œ μ‚¬μš©ν•˜λŠ” 것이 ν…ŒμŠ€ν¬ νŒ¨λŸ΄λ¦¬μ¦˜μ΄λ‹€.

 

openMP :

병렬 ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ API도 μ‘΄μž¬ν•˜λŠ”λ° C 계열 언어에 μ‚¬μš©λœλ‹€.

κ³ μ„±λŠ₯ 처리λ₯Ό μœ„ν•΄μ„œ Multi CPUλ₯Ό λ™μ‹œμ— μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” 원리인데 이λ₯Ό 톡해 

μ‹€ν–‰ μ‹œκ°„μ„ 쀄여 μ„±λŠ₯을 μ˜¬λ¦¬λŠ” 것이닀. ν•˜μ§€λ§Œ 병렬 ν”„λ‘œκ·Έλž˜λ°μ€ CPU의 λΆ€ν•˜λ₯Ό μ¦κ°€μ‹œν‚€κΈ° λ•Œλ¬Έμ—

μ‹ μ€‘ν•˜κ²Œ μ‚¬μš©ν•΄μ•Όλ§Œ ν•œλ‹€.

 

CUDA : 

2007λ…„ GPUμ—μ„œ κ³ μ„±λŠ₯ 처리λ₯Ό μœ„ν•΄ nvidia에 μ˜ν•΄ 개발된 HW/SW이닀.

주둜 AIλ‚˜ 블둝체인 λ§ˆμ΄λ‹μ—μ„œ ν™œμš©μ΄ λœλ‹€

 

이제 κ°€μž₯ μ€‘μš”ν•œ κ°œλ… 쀑 ν•˜λ‚˜μΈ μƒν˜Έκ°œλ…(μž„κ³„κ΅¬μ—­)에 λŒ€ν•˜μ—¬ ν•œ 번 μ•Œμ•„λ³΄λ„λ‘ ν•˜μž.

- ν”„λ‘œμ„ΈμŠ€κ°€ λ™μ‹œ μ‹€ν–‰ μ‹œ, 고유 μžμ–Έμ„ ν†΅μ œν•˜κΈ° μœ„ν•΄ μƒν˜Έ 배제 μ „λž΅μ„ μ‚¬μš©ν•œλ‹€.

- μƒν˜Έ λ°°μ œλŠ” μž„κ³„ μ˜μ—­μ— λ¨Όμ € μ§„μž…ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ œμ–΄ν•˜λŠ”λ°, ν”„λ‘œμ„ΈμŠ€κ°€ μž„κ³„μ˜μ—­μ— 

λ“€μ–΄κ°€λ €κ³  ν• λ•Œ, λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μž„κ³„μ˜μ—­ μ§„μž… μ‹œλ„λ₯Ό μ°¨λ‹¨ν•˜μ—¬ 좜ꡬ μ˜μ—­μ„ μ„€μ •ν•˜λŠ” 것이닀.

 

μƒν˜Έλ°°μ œμ˜ μ˜ˆμ‹œ ν‘œ
μƒν˜Έλ°°μ œμ˜ κ·Έλ¦Ό μ„€λͺ… 및 μ½”λ“œ μ„€λͺ…

 

μ˜€λŠ˜μ€ 기본적인 μƒν˜Έλ°°μ œμ™€ 병렬 ν”„λ‘œμ„ΈμŠ€μ— κ΄€ν•΄ μ•Œμ•„λ³΄μ•˜λ‹€.

μ’€ 더 μžμ„Ένžˆ μ•Œμ•„λ³΄κΈ° 전에 기본을 ν™•μ‹€νžˆ μ•Œκ³  κ°€μž.

728x90