0 随便说两句
嗯,因为项目需要,所以学CUDA。感觉对之后的计算机图形学会稍微有点帮助?如果毕业要换电脑,我一定要记得买一个有Nvidia显卡的电脑,否则这CUDA有些算是白学了哈哈。
刚接触,感觉还是挺难的,主要是一些概念没有理清。这个矩阵乘法,我也算是迷迷糊糊弄懂,特别是最后计算index的部分,实在是。。。线性代数、数学、空间想象能力真的不管在哪个领域都重要到不行啊!以后如果有孩子了一定要好好教育(呵呵。
真的是懵逼了半个星期,今晚终于看懂了点。分享下我觉得入门CUDA(真的是入门!入门)的一些步骤和概念吧。
0 先下好各种驱动程序,安装包,然后在VS里面跑Sample
1 知道CPU,GPU是什么东西,还有一些关键词 host, device, global, shared 等。
2 知道三个基本过程, host到device,device跑核心函数,device到host,已经这三个过程所对应的函数、参数的意义、用法
3 仔细参透grid block 和 thread之间的关系,熟记并理解blockDim.x/y, blockIdx.x/y, threadIdx.x/y各代表什么含义,注意它跟数组的下标是有区别的,我一开始真的想了很久,因为我把这个索引当成是数组下标,就怎么都不明白它为什么是这样表达的。(入门就先别想三维了吧。。。
4 第一个例子:实现向量加法,并且修改device核心函数中的num_blocks, num_threads,以作为理解(3)的参考。
5 第二个例子:实现矩阵乘法,对就是我现在这步。本来跑完了向量加法的你可能会觉得哈哈,挺简单。然后这个矩阵的优化算法(我是指优化算法!不是指每个线程算一个矩阵元素这种简单的。。。不过你可以先实现简单的,再使用优化的。。)的各种Index就把我弄晕了。这不是编程的问题,这就是数学。。。数学不好是硬伤啊!