春季开学以来的各种收获

整整半年没有更新博客,昨天刚刚搞定了域名解析的麻烦,然而我的实名认证居然失败了!!

关于Cuda编程的一点惨痛经验

Cuda基础篇请见:http://tombraiderjf.com/2016/09/06/Cuda%E7%BC%96%E7%A8%8B%E5%AD%A6%E4%B9%A0%E4%B8%80/

改程序的时候一直觉得并行遮挡检测速度不够快,怀疑C++ AMP的优化太垃圾,所以尝试一下Cuda。

  1. cudaDeviceProp这个结构体可以得到显卡的各方面信息,比如maxThreadsPerBlock(每个block的最大线程数),maxThreadsDim(block每个维度的最大线程数),maxGridSize(Grid每个维度的最大block数),以免cuda因资源不足而报错。

  2. cudaError方便我们找出cuda程序中出错的原因。几乎所有的cuda函数都返回cudaError类型,只需要判断返回值是否等于cudaSuccess就可以了,如果不等,可以用stderr输出错误信息的字符串。我在分配核函数block和grid时卡了很久,一直报错,后来发现是block的线程数超过了maxThreadsPerBlock。

  3. Block有最大线程数的限制,而Grid却没有最大Block数的限制,为什么呢?
    我们知道,显卡是有物理限制的,它有一定数目的处理核,而每个处理核的硬件决定了该核内的并行线程的上限,比如GTX 1070M是1024。每个处理核心对应的就是一个block,但是处理核心的数目对应的并不是grid,一般显卡只有十几个处理核心,因此grid需要排队,直至所有block的线程执行完毕。

  4. 看学长的代码运行时发现一个差点让学长怀疑人生的问题,第一次启动cuda设备调用其核函数时,时间消耗巨大,尤其是内存写入显存的过程,达到了160多毫秒,简直可怕,但是只有第一次调用cuda时会如此慢,以后的每一次调用只花费几个毫秒就可以。如果你的cuda函数要多次调用的话,千万不要按照例程手贱地粘贴进去cudaDeviceReset()这个函数,这就意味着每一次调用cuda函数都要重新启动设备!网上说的什么RunTime不大懂。

  5. 大费周章写的程序与原来AMP的程序对比,其实收效甚微,到此不得不说微软的还是牛X啊,最后没有采用cuda是因为会莫名其妙跑着跑着报错,无数次的遮挡检测我实在无法一次一次调试,因此只好放弃…不过AMP真的很稳定,风扇也不是太响。

还有一个未搞清楚的问题是,grid的最大维度并不能达到,依然会报错,而我只是把x维度设到最大,yz维度设为1而已,这是虚假推销?

Opencv的由懵比到入门

可怕,我居然用熟了Opencv(-_-||)

有一个需要注意的的问题:

1
2
3
4
Mat img1 = imread("img1.bmp");
Mat img2 = imread("img2.bmp");
Mat tmp = img2 - img1;
imshow("a",tmp);

如果某一个像素减完是负值,怎么显示tmp这张图呢?那肯定不行的。我们没有规定img1的类型,但是只要从图片里读Mat,它的类型必然是uchar,非负字符型,所以如果相减后结果为-10,它将被自动转化为-10+255=245,而不是取绝对值。

Ubuntu的血泪安装史

这是一个有毒的操作系统,我现在无比热爱windows

有毒的输入法

周日上午如期在研讨室做kinect2相关,文青的电脑成功装好kinect2以及opencv2,但是系统的输入法总是打不出正常的字,于是在冉冉的怂恿下下载安装了搜狗输入法,然后就是灾难性的崩塌,所有的对话框外面多了一个黑框,这倒无所谓,本来系统就没什么颜值,可是控制台也黑了,毛都木有了,想输命令?盲打吧。欸,不对,刚刚sudo没输密码…这句话跑完了吗?看看能不能关掉…OMG

上网查可能是linux的显卡驱动不完善,很容易出现界面崩溃的情况。

Kinect V2 for linux

驱动安装

环境:Ubuntu 14.04;ros indigo,参见链接:http://blog.csdn.net/sunbibei/article/details/51594824

查看驱动是否安装成功,参见链接:http://blog.csdn.net/sean_xyz/article/details/53117546

libfreenect2 API

参见链接:https://openkinect.github.io/libfreenect2/

论文相关

update in 2017/6/16 22:09:47

陈老师的指导十分实用的说。他强调文章逻辑性为重,把做的工作描述清楚,语法正确是基础,用词能够多样有文采是进阶

先总结几点用词和语法上需要注意的方面:

  1. 所有的句子尽可能用被动语态,不需要说明by后的主语
  2. 一切都用一般现在时叙述,因为scientific writing 写的是事实
  3. 相同的词汇或派生词避免出现在同一个句子中,或在连续的语句中多次出现,尽量用同义词代替
  4. 每个句子尽可能以动词为中心,前后部分的长度要平衡
  5. 用好连词,让上下文之间的关系更明确

论文结构和内容:

  1. 摘要部分一定要简洁,把工作描述清楚,不需要写综述性的句子
  2. 内容一定要严密,严谨,审稿人很可能抓住一个细节challenge
  3. 尽量数学化(公式)描述问题,以免语言上的误解出现漏洞
  4. 要让读者明白整体框架,并且可以快速的找到他想看的部分
  5. related work 部分可以把多个work集合在一块说,不需要分别解释,注重分类让结构更明了
Thanks!