less than 1 minute read

笔记

最近开始自己写些东西, 感觉很多基础概念还是很模糊, 找到了一个比较近的tutorial, 感觉更清晰一些.

  • 设备与函数调用
  调用位置 执行位置
__device__ device device
__global__ host & device device
__host__ host host
  • 线程层次
Software GPU  
Thread CUDA core 线程由CUDA core执行
Block SM Block在SM上执行, Block线程属于同一个SM, Block中线程可协作
Grid Device Grid中的Block可以在多个SM中执行
  • 为什么要设置层次结构? A: 便于管理, 扩展, 协作.
  • 执行流程:
    1. 将Grid分配到Device
    2. 根据<<<..>>>第一个参数, 将Block分配到SM
    3. 根据<<<..>>>第二个参数, Warp调度器启用线程(32一组, 每个Warp分配到32个core)
  • 资源和通信:
    • Grid: 共享Kernel和Context
    • Block: 同一个SM, 同一个Shared Memory
    • Threads/Warp: 允许Threads之间共享一些变量
  • 如何设置Gridsize & Blocksize?
    • cover所需的线程数N, 性能最优需要通过实验试错
    • 同时需要注意不超过block/grid上限, 一般block上限是1024, gird上限很大
  • 数据过大线程不够用怎么办? A: Grid Loop.

Tags:

Categories:

Updated:

Comments