Post List

2018년 5월 20일 일요일

openCL & GPU programming

openCL을 수치컴퓨팅을 수강하면서 접하게 되었다.

1. 왜 GPU를 사용할까?

GPU의 아키텍처를 생각해보자.

GPU는 상당히 많은 processor 들과 메모리로 이루어져 있다.

사진은 radeon 계열의 GPU 내부구조이다. (내부 구조는 제품, 아키텍처 별로 다를 수 있다)

general purpose processing 에 초첨을 맞춰 CU를 들여다 보면

  • SIMD unit
  • Register
  • Local Data share
  • blog

로 이루어져 있다.

SIMD unit

SIMD unit은 16개의 lane으로 이루어져 있고 한개의 SIMD unit가 wavefront 혹은 warp를 담당한다. 즉 CU에 하나의 work group(thread block) 이 할당되면 work group내의 wavefront들이 4개의 SIMD unit에 4 cycle에 걸쳐 연산되는 것이다.

Register

Register는 각 SIMD unit마다 64KB이 있고 따라서 CU안에 64K의 32bit register가 있다.

Local Data Share

Local Data Share은 work group 내에서 데이터를 서로 공유할 수 있는 영역으로 L1 cache 급의 성능을 보인다. Global memory를 접근하는 것은 비용이 크므로 프로그래밍시 local memory를 적절히 쓰는 것이 중요하다.

특정 상황에서 CPU를 쓰는 것보다 GPU를 이용해 가속을 하면 얼마나 성능향상이 되는지 감이 잘 오지 않을 수 있다. 그래서 학교 과제로 나온 cloth simulation을 GPU, CPU로 각각 수행시켜 보았다.

GPU accelerated cloth simulation

CPU cloth simulation

내가 짠 코드는 분명 구데기 같은 코드지만 차이를 확연하게 느낄 수 있다

댓글 없음:

댓글 쓰기