20200309

@liwei

Plan

  • cuda文档阅读
    • 3.2.9 Error Checking 10mins 实际15mins
    • 3.2.10 Call Stack 5mins 实际5mins
    • 3.2.11 Texture Memory 15mins 实际10mins
  • leetcode daily 45mins

Notes

Error Checking

cuda 函数有相应的返回值表示函数是否出错。对于异步执行的函数,由于在device端执行完毕之前,host端就已经重新获得控制权,返回值只能体现一些简单的host端错误,例如传入参数出错等等。异步执行函数对应的错误,在后续无关runtime函数中会被report。如果我们想要立即获取出错信息,我们也可以强制进行同步。runtime为每个线程维护了一个错误变量,错误变量的默认值为cudaSuccess。

cuda 提供了两个函数用于获取runtime运行时候的错误码,分别为cudaPeekAtLastError()cudaGetLastError(),后者与前者区别在于后者在获取后将会将线程错误变量重置。由于kernel launch没有返回值,用户想要获取正确的kernel运行状态,需要注意自行对错误变量进行reset。

Call Stack

在capability为2.x以及以上的设备上,我们可以通过cudaDeviceGetLimit()查询调用栈大小,同时使用cudaDeviceSetLimit()设置调用栈大小。当发生stack overflow,如果我们在使用CUDA Debugger,则返回一个stack overflow错误码,否则,很可能返回一个为止错误。

Texture Memory

CUDA支持访问一部分硬件的texture和surface memory。这两种memory的具体对比分析,暂且不表。现在记住从这两种memory里面读,相比global memory会更快就好了。关于texture memory,有两种对应的API:

  1. texture reference API
  2. texture object API

今后两天的阅读笔记会逐渐展开。

leetcode daily

今天的题目是 121. 股票买卖时机。这是一道简单的动态规划题目,并且之前做过,奈何,五分钟内仍然没有顺利编码通过。评论区里面一篇文章《一个方法团灭 6 道股票问题》真的惊为天人。值得反复阅读和思考。

More

nvidia在memory方面玩的花样,真是让人眼花缭乱。