暗記メーカー
ログイン
멀코 8장. 병렬 라이브러리
  • ユーザ名非公開

  • 問題数 77 • 12/6/2023

    記憶度

    完璧

    11

    覚えた

    29

    うろ覚え

    0

    苦手

    0

    未解答

    0

    アカウント登録して、解答結果を保存しよう

    問題一覧

  • 1

    람다 함수의 특징을 말하시오.

    프로그래밍이 편리하다. 디버깅이 어렵다.

  • 2

    고성능 프로그램을 만들기 위한 조건은?

    블럭킹으로 구현하면 안된다. 운영체제 호출하면 안된다.

  • 3

    coroutine의 특징을 설명하시오.

    컨텍스트 스위치 오버헤드와 스레드 생성 오버헤드가 없다. 생성한 코어에서만 사용이 가능해서 멀티 코어에서 사용하지 못한다.

  • 4

    OpenMP에는 스레드라는 개념이 없다. ( O / X )

    O

  • 5

    OpenMP 사용 시 주의점은?

    컴파일러 레벨에서 구현되어야 한다.

  • 6

    OpenMP는 표준이 아니다. ( O / X )

    X

  • 7

    OpenMP는 내부적으로 ( A ), ( B )를 사용한다.

    A: Multi-Thread B: 공유메모리

  • 8

    OpenMP는 ( A )와 ( B ), ( C )로 구성되어 있다.

    A: 컴파일러 디렉티브, B: 함수, C: 변수

  • 9

    OpenMp의 특징은?

    분산 메모리에서는 사용할 수 없다. 최상의 공유메모리 사용 패턴을 보장하지 않는다. Data Dependency, Data Race, Deadlock 검사는 프로그래머가 해야 한다. 어느 부분을 어떻게 병렬화 할지를 프로그래머가 지정해 주어야 한다.

  • 10

    OpenMP는 ( ) 모델을 사용한다.

    Fork-join

  • 11

    OpenMP는 Nesting이 불가능하다. ( O / X )

    X

  • 12

    OpenMP는 멀티스레드 프로그래밍이다. ( O / X )

    X

  • 13

    OpenMP에서 'private(var1, var2)'는 call by value or reference?

    call by value

  • 14

    OpenMP에서 'shared(var1, var2)'는 call by value or reference?

    call by reference

  • 15

    OpenMP의 for는 병렬로 처리해준다. ( O / X )

    O

  • 16

    OpenMP의 for는 자동으로 알아서 병렬로 잘 돌아가도록 해준다. ( O / X )

    X

  • 17

    OpenMP의 for 병렬화에서 ( )를 검사하지 않는다.

    data dependency

  • 18

    OpenMP는 로드 밸런싱을 알아서 해준다. ( O / X )

    O

  • 19

    c++11의 thread와 OpenMP를 혼용해서 써도 된다. ( O / X )

    X

  • 20

    Intel TBB의 특징을 설명하시오.

    쓰레드 사용에 편리한 여러 API를 가진다. Task 관리 기능을 포함한다. Intel CPU에서 동작한다.

  • 21

    TBB의 기능들에는 어떤 것들이 있나요?

    Loop Parallelizer: loop를 병렬로 사용하고 싶을 때 사용 Containers: vector, set, queue에서 사용하는 contains를 최적화해서 non-blocking으로 구현해 놨다. Mutual Exlusion: 여기서도 뮤텍스를 제공하지만 기존 C++11에 있는 것과 비슷하다. 메모리 할당자: 멀티스레드 상에서의 효율적인 메모리 할당자 Task 스케쥴링

  • 22

    Intel TBB에 있는 Loop Parallellizer를 사용하려면 TBB가 멀티스레드를 적용할 수 있는 형태로 변형해주어야 한다. ( O / X )

    O

  • 23

    빈칸에 알맞은 코드를 넣으세요.

    parallel_for(first, last, step, f);

  • 24

    Intel TBB에서의 concurrent_unordered_map을 사용할 때 주의점은?

    모든 메소드가 다 안전한 것이 아니다. insert(), find(), count(), size(), at()만 안전하다. erase()가 안전하지 않아서 지울 수가 없다.

  • 25

    데이터를 넣다 빼는 용도로 TBB의 concurrent_unordered_map은 적합하다. ( O / X )

    X

  • 26

    빈칸에 알맞은 코드를 넣으세요.

    size_t(0), N, [&table](int i)

  • 27

    멀티스레드에서 데이터를 넣는 것 뿐만 아니라 빼는 것도 해야 한다면 어떤 자료구조를 사용하는 것이 좋은가?

    concurrent_hash_map

  • 28

    TBB의 concurrent_hash_map에서 accessor라는 스마트 포인터를 사용하여 자료에 접근하는 이유는 무엇인가?

    동시성 문제가 있기 때문이다.

  • 29

    TBB의 concurrent_vector의 주의점은?

    clear() 메소드는 병렬수행이 불가능하니 꼭 다른 메소드와 동시에 호출되지 않도록 해야 한다. 원소들이 연속된 주소에 있지 않으므로 일반적인 pointer 연산은 불가능하다. 크기 감소가 안된다. 원소를 읽을 때 원소가 생성 중일 수 있으므로 읽기 전에 생성완료를 확인하도록 프로그래밍해야 한다.

  • 30

    TBB의 concurrent_queue에서 pop()대신 try_pop()을 제공하는 이유는 무엇인가?

    empty() 호출이 pop()의 성공을 보장하지 않기 때문이다. empty()를 할때는 empty가 아니었지만 pop()할 때는 empty일 수 있기 때문이다.

  • 31

    TBB의 scoped_lock은 c++11의 어떤 것과 같은가?

    lock_guard

  • 32

    RWlocking의 아이디어는?

    read_only인 메소드는 동시 실행해도 아무 문제가 없기 때문에 read_lock과 write_lock을 따로 두어 read_lock끼리는 상호배제없이 사용하도록 하는 것이다.

  • 33

    TBB의 scoped_lock은 ( )으로 구현되어 있지 않아서 다른 자료형끼리 섞어 쓰는 것이 안된다.

    템플릿

  • 34

    TBB의 scalable(Mutual Exclusion)의 특징을 설명하시오.

    busy waiting을 없애 CPU 낭비를 없앤다. 근데 busy waiting 없애려고 운영체제 호출해서 오버헤드가 크다. critical section이 길어서 오래 걸리는 구간이라면 효율이 올라가겠지만 그게 아니면 낭비이다.

  • 35

    TBB의 Fair(Mutual Exclusion)의 특징을 설명하시오.

    critical section에 도착한 순서로 lock을 얻는다. 큐 형태로 호출한다.

  • 36

    TBB에서 Long wait일 경우 Fair에서는 ( )로 해주어야 한다.

    block

  • 37

    TBB의 speculative_spin_mutex(Mutual Exclusion)의 특징을 설명하시오.

    상호배제를 해제하여 critical section을 동시에 수행하게 한다. 동시에 실행시켜서 문제가 없으면 그냥 실행하고 충돌해서 문제가 생기면 둘 중 하나를 롤백 시키는 형태이다.

  • 38

    RWlock을 사용하면 무조건 빨라진다. ( O / X )

    X

  • 39

    TBB의 Task 스케쥴링의 주의점은?

    하나의 task 관리 객체에 많은 task를 넣어 주는 것은 비효율적이다. task 관리 객체를 로컬 객체로 생성하고 소수의 task를 넣는 방식으로 구현하는 것을 권장한다.

  • 40

    CUDA는 gpu의 멀티 코어를 사용하는 것이다. ( O / X )

    O

  • 41

    ( 가 )가 나오면서 gpu에서 다양한 연산을 할 수 있게 되었다.

    셰이더 언어

  • 42

    directX, openGL을 모르면 CUDA를 사용할 수 없다. ( O / X )

    X

  • 43

    CUDA를 사용하면 GPU에서 대규모 병렬 처리가 가능하다. ( O / X )

    O

  • 44

    GPGPU의 약자는?

    General Purpose GPU

  • 45

    CUDA의 단점은 무엇인가?

    NVIDIA 하드웨어만 지원한다.

  • 46

    CUDA는 C프로그래밍 하듯이 GPU 프로그래밍을 할 수 있다. ( O / X )

    O

  • 47

    CUDA를 사용하기 위해서 컴파일러 도움은 필요 없다. ( O / X )

    X

  • 48

    NVIDIA가 아닌 하드웨어에서 CUDA와 같은 gpu를 이용하여 병렬 프로그램을 만들고 싶으면 어떻게 해야 하는가?

    OpenCL을 사용하면 된다.

  • 49

    GPGPU의 단점은?

    I/O 작업이 느리다. 메모리가 적다. 직렬계산이 느리다. gpu로 계산하려면 데이터 보내줘야 하는데 보내는 부분이 병목현상이 발생한다.

  • 50

    CUDA를 게임에서 잘 안쓰는 이유는?

    게임은 i/o 작업이 많고 실시간으로 처리해줘야 하는게 많은데 gpu는 그게 느리다.

  • 51

    Big-Little(P-E)는 게임에서 사용하면 안좋은 이유는?

    멀티스레드로 돌리면 P, E 코어 둘 다 같이 돌아가는데 P코어가 먼저 일을 끝내고 E코어를 기다리는 현상이 발생한다. 게임이랑 상극이다.

  • 52

    블럭킹 프로그램의 장단점을 설명하시오.

    장점 - 직관적이다. - 의도대로 잘 돌아간다. - 프로그래밍이 쉽다. 단점 - 병렬성이 없어서 성능개선의 여지가 없다. - 우선순위 역전: 높은 우선순위의 스레드가 잠금이 없어서 실행되지 못한다. - 호위현상: 잠금을 잡은 스레드가 실행을 멈춘 동안에는 모든 잠금을 원하는 스레드가 대기해야 한다. - 교착상태: 일명 데드락

  • 53

    Lock-free 알고리즘의 한계는?

    확장성이 떨어진다. 복수개의 메소드호출의 atomic화는 어렵다. 알고리즘의 정확성을 증명하는 것이 어렵다.

  • 54

    트랜잭션은 교착상태를 발생시키지 않는다. ( O / X )

    O

  • 55

    Child 트랜잭션의 Abort가 Parent를 Abort를 시킨다. ( O / X )

    X

  • 56

    트랜잭션은 소프트웨어와 하드웨어 모두 구현 가능하다. ( O / X )

    O

  • 57

    트랜잭션의 장점을 설명하시오.

    병렬성, 확장성, 넌블럭킹

  • 58

    소프트웨어로 트랜잭션를 만들 때 주의점은?

    Zombie 트랜잭션이 되지 않도록 주의해야 한다. - 동기화 충돌 이후에도 트랜잭션이 계속 실행될 수 있다. 성능이 좋지 않다. - 모든 read/write를 api를 통해서 해야 하므로 성능이 좋지 않다.

  • 59

    Zombie 트랜잭션이 발생하지 않도록 하기 위해서는 프로그래머의 주의가 필요하다. ( O / X )

    O

  • 60

    하드웨어로 트랜잭션을 어떻게 구현했는가?

    캐시 태그에 트랜잭션비트를 추가하였다. 트랜잭션이 끝나고 캐시가 충돌했는지 확인하다. 충돌이 없으면 그냥 캐시에 있는 값 쓰고 아니면 캐시에 있는 값 invalid에 넣는다.

  • 61

    Haswell의 XTM 트랜잭션에서 복수개의 메모리에 대한 Transaction을 L3 캐시의 용량 한도까지 허용한다. ( O / X )

    X. L1까지 허용

  • 62

    트랜잭션을 게으른 동기화를 수정해서 만들면 좋은 이유는 무엇인가?

    critical section이 최대한 작아야 성능이 좋기 때문이다.

  • 63

    여기서 왜 goto를 쓰지 않고 _xabort(0)을 쓴 이유는?

    goto를 써서 transaction 구간이 커지면 성능에 안 좋은 영향을 미친다.

  • 64

    트랜잭션 메모리의 장점은?

    생산성, 확장성, 정확성, 성능

  • 65

    STM의 단점과 HTM의 단점과 트랜잭션 메모리의 한계를 말하시오.

    STM 단점 성능: 오버헤드가 커서 코어가 매우 많지 않으면 오히려 성능 저하 HTM 단점 범용성: 일부 CPU에서만 지원 제한성: hw 용량의 한계로 알고리즘이 제한된다. High Contention 상황에서 lock-free 보다 성능 저하가 있다. 한계: 코어의 개수가 많아질 경우 성능향상의 한계가 찾아온다.

  • 66

    트랜잭션은 뮤텍스와 함께 돌리면 안된다. ( O / X )

    X

  • 67

    트랜잭션 안에서 메모리를 많이 읽고 쓰면 충돌하지 않더라도 실패할 수 있다. ( O / X )

    O

  • 68

    Haswell HTM의 한계는?

    모든 알고리즘에 적용이 불가능하다. 오버헤드가 크다.

  • 69

    불변 변수는 절대 data race를 일으키지 않는다. ( O / X )

    O

  • 70

    Go언어에서 공유 메모리 대신 사용하는 것은?

    Channel

  • 71

    Go는 내부적으로 IOCP로 돌아간다. ( O / X )

    O

  • 72

    하스켈에는 멀티스레드 명령어들이 많다. ( O / X )

    X. 그런 명령어는 없다. 싱글 스레드 알고리즘인데 멀티 스레드로 돌아간다.

  • 73

    하스켈로 프로그래밍 할 때 주의점은?

    태스크 자체가 너무 작아지면 문제가 있다. 그럴경우는 싱글로 돌려주어야 한다.

  • 74

    Erlang을 메인 서버에서 잘 사용하지 않는 이유는?

    구현 난이도가 있기 때문이다.

  • 75

    Erlang에서 사용하는 process는 thread에 가까운 것이다. ( O / X )

    X. coroutine에 가까운 것이다.

  • 76

    함수형 언어의 문제는?

    생산성, 성능, I/O 문제

  • 77

    리눅스와 visual studio와 호환성에서 가장 주의해야 할 것은?

    visual studio의 long은 32bit이고, 리눅스의 long은 64bit이다.