GPU 프로그래밍

GPU의 점유율에 대해 올바른 것은?

  1. A점유율이 100%이면 반드시 최고 성능이 나온다
  2. B점유율이 낮아도 한 스레드에 독립적인 계산을 많이 갖게 하여 명령 수준 병렬성을 높이면 높은 성능이 나오는 경우가 있다
  3. C점유율은 성능과 전혀 관계가 없다
정답과 해설 보기

정답: B. 점유율이 낮아도 한 스레드에 독립적인 계산을 많이 갖게 하여 명령 수준 병렬성을 높이면 높은 성능이 나오는 경우가 있다

점유율은 지연을 숨기기 위한 수단의 하나이지 목적이 아닙니다. 한 스레드가 서로 의존하지 않는 여러 계산이나 메모리 읽기를 나란히 발행할 수 있다면 적은 워프로도 대기 시간을 메울 수 있습니다. 반대로 점유율을 높이려고 레지스터를 줄이면 메모리로의 밀려남이 늘어 느려질 수도 있습니다. 성능은 프로파일러로 실제로 측정하여 판단하는 것이 확실합니다.

이 분야 연습하기 분야로 돌아가기

GPU 프로그래밍의 다른 문제

  1. CUDA에서 블록과 SM(스트리밍 멀티프로세서)의 관계로 올바른 것은?
  2. CUDA에서 커널 도중에 다른 모든 블록의 계산이 끝나기를 기다린 뒤 다음 단계로 진행하고 싶다. 일반적인 방법은?
  3. GPU에서 픽셀 값의 히스토그램을 만들 때, 모든 스레드가 글로벌 메모리의 256개 빈(bin)에 atomicAdd로 직접 더하면 느린 경우가 있다. 개선 방법으로 올바른 것은?
  4. GPU에서 다수 값의 총합을 구할 때, 트리 형태의 리덕션(이웃끼리 더해 절반으로 줄이는 것을 반복)을 사용하는 이유로 올바른 것은?
  5. 1024개의 값을 트리 형태의 리덕션으로 합산할 때 필요한 단계 수는 몇 개인가?

이 분야의 비교