티스토리 뷰
1. Shared Bus
snooping 메모리 트래픽이 있는 걸 알아서 기다림
2. Distributed
each processor has partial of memory, cache internal circuit. Not share big bus
만약 Lock이 없다면 어떻게 해야할까? "spin" or "busy-wait"
Test-and-Set
Consensus number 2
swap true with current value
return priori value
Tas Lock
if ret == false -> get lock
if ret == true -> not get lock
space O(1) - 하나의 변수에 TAS를 계속 반복
TTas Lock (Test and Test and Set)
atomic instruction 이 비싼이유 - cache line을 block 하기 때문
TTAS -> keep check
T(Read)
TAS(Read Modifiy Write)
즉, Lurking(hide) stage & pouncing(execution) stage로 이루어짐
Backoff Lock
Anderson QueueLock
Lock 하나당 Thread 만큼의 bool flag를 둬서 각자 다른곳에서 validate를 체크
그렇지만, 여전히 같은 cache line 에 있는 bit가 많음
ex) 0~15 까진 같은 cache line
solution = padding - bit를 멀리 떨어트려 놓음
CLH Lock
L : Lock 갯수, N : Thread 개수
Anderson QueueLock 에서 space complexity 가 O(L * N) 인 것을
O (L + N)으로 줄인 Lock
MCS Lock
CLH Lock은 Shared Bus Architecture 에선 좋지만, 프로세스 별 독립적인 별도의 메모리를 제공하는 Uncached NUMA Architecture에서는 좋지 않다. 왜냐하면 NUMA Machine에서는 remote memory는 느리고 할당받은 local memory는 빠르기 때문이다.
CLH Lock에서 Link를 추가하는 것으로 구현한다
'개발 > 병렬프로그래밍' 카테고리의 다른 글
[병렬프로그래밍] Concurrent Objects, 마치며 (0) | 2019.12.17 |
---|---|
[병렬프로그래밍] Universality of Consensus (0) | 2019.12.17 |
[병렬프로그래밍] Consensus (0) | 2019.12.17 |
[병렬프로그래밍] Shared Memory (0) | 2019.12.17 |
[병렬프로그래밍] Concurrent Objects (0) | 2019.12.17 |
- Total
- Today
- Yesterday
- 클래스 맴버 변수 출력하기
- SuffixArray
- 코어 남기기
- Quest2
- 우리는 vr핏이라고 부릅니다
- 면접
- Visual Studio
- vrpit
- mysql
- chrome-extension
- Obstacle Avoidance
- 영상 픽셀화 하기
- 카카오
- C++
- vr핏
- shared_from_this
- it's called a vrpit
- Reciprocal n-body Collision Avoidance
- 봄날에 스케치
- print shared_ptr class member variable
- set value
- cockroach db
- 에러 위치 찾기
- ad skip
- boost
- hole-punching
- RVO
- red underline
- 잘못된 빨간줄
- Golang
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |