最近的读书笔记

一切的转变都发生在要结束生命的那一刻,都发生在死亡如此之近的时候,才发现生命中什么是最重要的,不是痛苦,不是绝望,而是爱!为了爱,甘愿痛苦;为了爱,敢于直面绝望。这正如尼采所说:“一个人有了活着的理由,就可以承受生活的任何境遇。”

Everything in your life is a reflection of a choice you have made. If you want a different result, make a different choice.

孩童之所以荒唐是因为任何生物的死,即便是一只苍蝇,都是一场灾难;但与此同时,从诸神的角度来看,我们的死于苍蝇的死同样是微不足道的。

美国医生爱德华·特鲁多的墓志铭:有时治愈,常常帮助,总是安慰,To cure sometimes; to relieve often; to comfort always.

不奴役别人,不爱慕虚荣,用心去感受每个事物,认真对待自己拥有的每样东西,懂得美,善自知,又有爱,就像在放风筝抓气泡的小孩一样纯真。

 

CUDA学习笔记(四)——CUDA性能

四、CUDA性能

CUDA中的block被划分成一个个的warp,在GeForce8800GTX上,一个warp有32个线程。若不够32个线程,则padding相应数目的线程。Warp中的线程ID是连续且递增的。对于二维组织的线程来说,先把threadIdx.y为0的线程按照threadIdx.x从小到大排,然后把threadIdx.y为1的线程按照threadIdx.x从小到大的顺序排列成warp。对于三维组织的线程来说,先排列 threadIdx.z为0的二维线程,再排列threadIdx.z为1的二维线程,以此类推。

任何时刻,硬件都只能一次选择执行一个warp。

下面2个图是执行元素总和的操作,不同的算法实现,其效率不同。第二种方法使得线程没有分支。

CUDA学习笔记(四)——CUDA性能

CUDA学习笔记(四)——CUDA性能

继续阅读“CUDA学习笔记(四)——CUDA性能”

CUDA学习笔记(一)——CUDA编程模型

转自新浪博客: http://blog.sina.com.cn/s/blog_48b9e1f90100fm56.html

一、CUDA 编程模型

2009-10-21

CUDA的代码分成两部分,一部分在host(CPU)上运行,是普通的C代码;另一部分在device(GPU)上运行,是并行代码,称为kernel,由nvcc进行编译。

Kernel产生的所有线程成为Grid。在并行部分结束后,程序回到串行部分即到host上运行。

在CUDA中,host和device有不同的内存空间。所以在device上执行kernel时,程序员需要把host memory上的数据传送到分配的device memory上。在device执行完以后,需要把结果从device传送回host,并释放device memory。CUDA runtime system提供了API给程序员做这些事情。

继续阅读“CUDA学习笔记(一)——CUDA编程模型”