CUDA线程调度器、指令发布及指令操作次数


计算能力为1.x的设备
        每个SM具有8个SP(cuda核),每个SP每次单精度浮点运算或整形运算需要1个时钟周期,因此每个时钟周期SM可以执行8个单精度浮点运算或整数运算。每个时钟周期可以执行1个双精度浮点运算。
        每个SM具有1个线程束调度器,一次可以把一条指令发送给8个SP,由于每个SP执行一次单精度浮点运算或整形运算需要1个时钟周期。因此要让一个线程束中的所有线程都执行一条单精度浮点运算或整数运算指令的话,每个SP需要将该指令执行4次。这样,线程束调度器就需要等4个时钟周期才能发布下一条指令。
计算能力为2.1的设备
      每个SM具有48个SP, 每个SP每次单精度浮点运算或整形运算需要1个时钟周期,因此每个时钟周期SM可以执行48个单精度浮点运算或整数运算。每个时钟周期可以执行4个双精度浮点运算。
       每个SM具有2个线程束调度器。在每个指令发布时间,每个线程束调度器发布两条独立的指令(如果存在线程束准备好执行下一条指令的话)。第一个调度器负责向偶数ID的线程束发布指令。第2个调度器负责向奇数ID的线程束发布指令。注意,当一个调度器发布一条双精度浮点指令时,另一个调度器无法发布任何指令。
        由于一个线程束调度器只能向一半的CUDA核发布指令,为了让一个线程束的全部线程的都执行一条单精度浮点运算或整形运算指令,一个调度器必须2个时钟周期发布一条指令。
       关于上面一段话的理解:一个线程束如果准备好执行下一条整形或单精度浮点运算指令,这个线程束需要32个SP进行运算。由哪一个线程调度器向这个线程束发布指令取决于这个线程束的线程素ID是奇数还是偶数。而一个线程调度器一次只能向SM中的一半的SP发布指令,因此,同一条指令需要发布2次,待第一次发布的指令执行一次后再发布下一次,执行一次整形或单精度浮点型运算需1个时钟周期,因此每2个时钟周期发布一条新指令。

这段代码中使用了几个 CUDA API 函数,我会逐一解释它们的作用。 1. `cudaMalloc`: 分配 GPU 上的内存空间,其原型为: ``` cudaError_t cudaMalloc(void **devPtr, size_t size); ``` 它的第一个参数为 void 类型的指针,指向分配的内存空间;第二个参数为分配的内存空间大小。该函数返回一个 cudaError_t 类型的错误码,如果函数执行成功,则返回 `cudaSuccess`。 2. `cudaMemcpy`: 在 CPU 与 GPU 之间拷贝数据,其原型为: ``` cudaError_t cudaMemcpy(void* dst, const void* src, size_t count, cudaMemcpyKind kind); ``` 它的第一个参数为目标内存地址,第二个参数为源内存地址,第三个参数为拷贝的字节数,第四个参数为拷贝的方向。其中,拷贝方向有四种选择: - `cudaMemcpyHostToHost`: 主机内存到主机内存 - `cudaMemcpyHostToDevice`: 主机内存到设备内存 - `cudaMemcpyDeviceToHost`: 设备内存到主机内存 - `cudaMemcpyDeviceToDevice`: 设备内存到设备内存 该函数返回一个 cudaError_t 类型的错误码,如果函数执行成功,则返回 `cudaSuccess`。 3. `cudaFree`: 释放 GPU 上的内存空间,其原型为: ``` cudaError_t cudaFree(void* devPtr); ``` 它的唯一参数为需要释放的内存空间的指针,该函数返回一个 cudaError_t 类型的错误码,如果函数执行成功,则返回 `cudaSuccess`。 4. `<<<...>>>`:CUDA 内核函数的启动符号,用于启动 GPU 上的一个或多个线程块。其语法为: ``` kernel_name <<< num_blocks, num_threads >>> (args); ``` 其中,`kernel_name` 是要执行的内核函数名,`num_blocks` 是线程块的数量,`num_threads` 是每个线程块中的线程数量,`args` 是传递给内核函数的参数列表。该符号的作用是告诉 CUDA 编译如何将内核函数映射到 GPU 上,以及如何分配和调度线程块和线程。 以上是这段代码中使用的几个 CUDA API 函数的简单介绍,如果需要更详细的说明,可以参考 CUDA 编程手册。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值