摘要:
CUDA是一个线程网络,我特别想弄清楚的一件事情是,主机如果是个二维的数组,传到设备中,是否还是可以用二维数组来表示呢?很多例子都是将二维的数组映射到一个一维指针变量中去。但是我就是还想在设备中也用arr[][]的形式来找到我想要的那个元素,可以吗?肯定是可以的。方案一:栈定义arr[2][10],直接用地址传进去。但是栈的空间很小,在CPU中能声明的数组就不大。所以,这里不讨论这个方案。方案二:堆上new出个二维指针结合CPU来说:首先,在CPU中,二维指针和二维数组的一个映射关系可以用一个拷贝实现,代码入下:…… 21 // b[2][10] 22 int **b= (in... 阅读全文
摘要:
6规约思想和同步概念扩大点说,并行计算是有一种基本思想的,这个算法能解决很多很常规的问题,而且很实用,比如说累加和累积等——规约思想。对于基础的、重要的,我想有必要系统的学习。我觉得有必要重新复制下之前写的这篇介绍:http://www.cnblogs.com/viviman/archive/2012/11/21/2780286.html并行程序的开发有其不同于单核程序的特殊性,算法是重中之重。根据不同业务设计出不同的并行算法,直接影响到程序的效率。因此,如何设计并行程序的算法,似乎成为并编程的最大难点。观其算法,包括cudasdk的例子和网上的牛人,给出的一些例子,以矩阵和矢量处理为主,深入 阅读全文
摘要:
5GPU也不允许偏心并行的事情多了,我们作为GPU的指令分配者,不能偏心了——给甲做的事情多,而乙没事做,个么甲肯定不爽的来。所以,在GPU中,叫做线程网络的分配。首先还是来看下GPU的线程网络吧,图2:图2线程网络我们将具体点的,在主机函数中如果我们分配的是这样的一个东西:dim3blocks(32,32);dim3threads(16,16);dim3是神马?dim3是一个内置的结构体,和linux下定义的线程结构体是个类似的意义的东西,dim3结构变量有x,y,z,表示3维的维度。不理解没关系,慢慢看。kernelfun<<<blocks,threads>> 阅读全文
摘要:
0序言学习CUDA已经有个把月了,感觉自己学习一门新技术的第一个阶段已经接近尾声,对于一些基本的东西,学习的收获应该作一个总结,我是一个喜欢总结的人。CUDA是异构编程的一个大头,洋洋洒洒的看了写资料,但是,感觉这个技术没有像C++或者Java那样有自己的权威的《编程思想》来指导系统学习,总是感觉心里不踏实,是不是自己还没掌握深入、或者说心里没底气说自己已经入门了、已经熟悉了、已经精通了。站在一个初学者的角度,作为一个笔记式的记录,讲解自己学习和理解CUDA过程中的一些列想到的、碰到的问题。享受一个东西不一定是结果,可以是从无知到了解到精通的这个整个过程。1给自己提几个问题对的,我想要做什么事 阅读全文