Occupancy와 Block Size

cudaoccupancyblock-sizeoptimization

block size를 크게 잡는다고 항상 빨라지는 것은 아니다.

parallelism
register/shared pressure

occupancy란

occupancy는 SM에서 동시에 active 상태로 올라갈 수 있는 warp의 비율을 말한다. occupancy가 너무 낮으면 memory latency를 숨기기 어렵다.

하지만 occupancy가 높다고 항상 빠른 것도 아니다. register를 많이 쓰거나 shared memory를 많이 쓰는 kernel은 block을 많이 올리지 못할 수 있다.

실전 감각

blockDim = 128, 256, 512

이런 후보를 놓고 실제 benchmark로 고른다. warp 단위가 32이므로 block size는 보통 32의 배수로 잡는다.

확인

  • block size는 parallelism, memory pattern, resource pressure를 동시에 바꾼다.
  • occupancy는 성능의 필요조건일 수 있지만 충분조건은 아니다.
  • 최종 선택은 측정으로 해야 한다.