問題一覧
1
PC에서의 메모리 접근은 atomic이다.
X
2
피터슨 알고리즘에 volatile을 추가하면 문제가 해결된다.
X
3
피터슨 알고리즘에서 volatile을 추가해도 제대로 해결이 안되는 이유는?
메모리 접근 순서가 프로그램을 짠데로 돌아가지 않기 때문이다.
4
명령어 위 아래 실행 순서가 절대로 뒤바뀌지 않도록 하는 명령어는?
_asm_mfence
5
메모리 접근이 atomic하지 않은 이유는?
out of order execution이 대표적인 이유이다.
6
write buffer의 위치가 왜 저기있는가?
L1 캐시 미스 나면 write buffer에 넣기 위해서이다.
7
volatile 키워드는 기계어로 번역이 된다. ( O / X )
X
8
volatile은 ( A )한테 순서 제대로 하라는 거지 ( B )와는 상관이 없다.
A: 컴파일러, B: CPU
9
volatile은 무엇을 위해 나온 키워드였나?
I/O 작업을 위해 나온 키워드
10
피터슨 알고리즘이 속하는 type은?
Type-E
11
멀티스레드 프로그래밍에서 이러한 식으로 부정확해 보이는 결과가 나오는 이유는?
CPU의 out of order 실행, 메모리의 접근이 순간적이 아니다., 멀티 코어에서는 옆의 코어의 out of order 실행이 관측된다.
12
이 코드 실행 결과 error가 0으로 출력되는가? 아니라면 이유는 무엇인가?
아니다. Cache Line Size Boundary 문제가 일어난다. 메모리를 가져올 때 캐시라인을 통째로 가져오는데 메모리가 캐시 라인 두 개에 걸쳐있다면 두 번에 걸쳐서 가져와야 한다. 하지만 그 사이에 다른 스레드가 끼어들면 제대로 된 값이 나오지 않는다.
13
여기서 'temp -= 2;'를 'temp -= 1;'로 바꾸면 error 값으로 어떤 것들이 출력되는가?
ff, ffffff00
14
무모순성(Consistency)라고도 불리고, Memory Consistency 또는 Memory Ordering이라고도 불리는 것은?
메모리 일관성
15
멀티스레드에서의 공유 메모리는 다른 코어에서 보았을 때 업데이트 순서가 틀릴 수 있는데 이것은 쓰는 쪽의 문제이다. ( O / X )
X
16
atomic_thread_fence()는 성능저하를 전혀 일으키지 않는다. ( O / X )
X
17
멀티스레드 프로그래밍에서 메모리에 대한 쓰기는 언젠가는 완료 된다. ( O / X )
O
18
멀티스레드 프로그래밍에서 자기 자신의 프로그램 실행 순서는 잘 지켜지지 않는다. ( O / X )
X
19
멀티스레드 프로그래밍에서 캐시의 일관성은 지켜지지 않는다. ( O / X )
X
20
캐시라인 내부의 읽기/쓰기는 중간 값을 만들지 않는다. ( O / X )
O
21
멀티스레드 프로그래밍에서 <mutex>나 fence없이 SW적인 방법 만으로도 atomic memory를 만들 수 있다. ( O / X )
O
22
싱글 코어에서는 모든 메모리가 atomic memory이다. ( O / X )
O
23
접근(메모리는 read, write)의 절대 순서가 모든 스레드에서 지켜지는 자료구조는?
atomic
24
atomic 자료구조를 통해 cache 문제를 해결할 수 있다. ( O / X )
X
25
atomic과 volatile 중에 성능이 더 좋은 것은?
volatile
26
일반적인 '=' 연산자도 atomic하게 동작한다. ( O / X )
O
27
volatile은 파이프라인을 stall 시킨다. ( O / X )
X
28
다음 프로그램이 정상적으로 동작 할까? 이유는?
아니다. 더 악질적인 버그다. atomic 사이에 있다고 atomic하게 돌아가는 것이 아니다. atomic 변수들끼리만 atomic하게 동작한다.
29
atomic 자료구조만으로 게임을 만들 수 없는 이유는?
게임에서는 기본 자료구조만을 가지고 만들지 않는다. 보다 더 복잡한 자료구조를 이용하여 만들기 때문이다. atomic 자료구조는 기본 자료구조에만 해당한다.
30
atomic memory를 사용하여 만든 자료구조가 atomic한가? ( O / X )
X
31
멀티스레드 프로그래밍에서 lock이 없다고 성능저하가 없는가? ( O / X )
X
32
멀티스레드에서는 작성한 코드에 블럭킹 알고리즘이 있으면 그 곳이 ( )이 된다.
바틀넥
33
Lock을 공유하는 덜 중요한 작업들이 중요한 작업의 실행을 막는 현상은?
우선순위 역전(Priority Inversion)
34
Lock을 얻은 스레드가 스케쥴링에서 제외된 경우, lock을 기다리는 모든 스레드가 공회전하는 현상은?
Convoying
35
Convoying이 자주 발생하는 상황은 언제인가?
Core보다 많은 수의 스레드를 생성했을 경우
36
성능이 낮아도 non-blocking이 필요할 수 있다. ( O / X )
O
37
Lock-free 알고리즘은 적어도 한 개의 메소드가 유한한 단계에 실행을 끝마친다. ( O / X )
O
38
무대기여도 무잠금이 아닐 수 있다. ( O / X )
X
39
lock-free 알고리즘은 기아를 유발하기도 한다. ( O / X )
O
40
성능은 무대기가 무조건 무잠금보다 더 좋다. ( O / X )
X
41
한 개를 제외한 모든 스레드가 멈추었을 때, 멈추지 않은 스레드의 메소드가 유한한 단계에 종료하는 알고리즘은?
무간섭(obstruction-free)