赞
踩
GPGPU(General Purpose Computing on GPUs)的核心理念是将数组映射到纹理中,然后使用纹理来利用GPU进行并行计算,从而实现加速的作用。
首先,需要创建一个离屏渲染缓冲区(Frame Buffer Object),这样做的目的是将渲染(Render)工作放在后台,而不是渲染到常规的帧缓冲中,自然也就和显示没有任何关系,因为我们的目标是纯粹的利用GPU进行数值计算。
注:当然,所使用的显卡以及相应的显卡驱动程序必须支持shading language等扩展,具体的可以通过glview这个软件进行查看。
FBO的创建代码:
接下来生成一个纹理,并对纹理进行简单的设置:
然后将FBO对象和FBO纹理绑定在一起:
开始将数据传入纹理中:
为了确认数据确实传入了GPU内存单元中,我们再将刚才传进去的数据读取出来,看看和原来的输入数据(也就是data数组)是否一样:
至此,完成了GPGPU的第一步:将数组数据传送到显卡内存中,再从显卡内存中将数据读取出来。代码看上去比较麻烦,但是单机并行计算的诱惑是非常大的,拿我的GTX275显卡为例,240个流处理器,用来做并行计算是何等的强悍!
下面总结一下:
1.创建一个FBO
2.创建纹理,用于存储数据
3.用“glFramebufferTexture2DEXT”函数将FBO和纹理进行绑定。这里可以这样理解:FBO是一个大厅,这个大厅有很多门,具体的每一个门就是一个“GL_COLOR_ATTACHMENT0_EXT”(ATTACHMENT后面的数字就是每一个门的门牌号)。然后使用“glDrawBuffer”函数来确定我们的数据到底从哪一个门通过。
4.全部确定好以后,使用“glDrawPixels”函数来进行从数组到纹理的数据传递过程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。